https://hackjsp.tistory.com/72
https://bestdeveloper.tistory.com/40
https://wildeveloperetrain.tistory.com/401#google_vignette
https://ckm7907.tistory.com/1
https://velog.io/@tilsong/%EC%BD%94%EB%93%9C-Push%EB%A1%9C-%EB%B0%B0%ED%8F%AC%EA%B9%8C%EC%A7%80-Github-Actions-Docker (상황이 가장 유사)
를 참고하여 ci.yml 작성

New repository secret 선택

추가해서 기입
DOCKER_USERNAME, DOCKER_PASSWORD는 https://hub.docker.com 에서 로그인 후 오른쪽 상단 프로필 클릭 -> Account Settings

Personal Access Tokens 섹션에서 확인
없다면 New Access Token 버튼을 눌러 만들기


파이썬은 CI만 테스트 해보니 통과됨


git organization 초대가 되어도 repogitory마다 각각 권한을 줘야 push가 가능하다

스프링, FAST API, 엘라스틱 서치, 카바나(추후 삭제 예정)가 올라 가야 하기에 t3.medium(메모리 4GB)으로 설정
엘라스틱 서치가 많은 리소스를 차지한다고 함



t3.medium 선택 후 새 키 페어 생성



vpc-보안-보안그룹에 와서 스프링, 파이썬, 엘라스틱 서치, 키바나 추가


엘라스틱 서치는 우선 내ip로 설정
탄력적 ip로 가서 인스턴스를 중지했다가 켜도 바뀌지 않게 ip를 설정해준다.
ip를 새롭게 만들고 연결을 해준다

ssh -i "내키페어이름.pem" ubuntu@내-탄력적-IP
# ubuntu@ip-xxx-xxx-xxx-xxx:~$가 뜨면 진행
# 1. 패키지 업데이트 및 도커 설치
sudo apt-get update -y
sudo apt-get install -y docker.io
# 2. 도커 컴포즈 설치 (최신 버전)
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
# 3. 권한 설정 (sudo 없이 docker 사용 가능하게)
sudo usermod -aG docker $USER
newgrp docker
# 4. 배포용 폴더 생성
mkdir ~/project
pem 에러가 난다면, 속성 변경


System, Administrators 등 user 제외하고 전부 제거
했는데도 안되서 다음과 같이 진행
# 1. 상속된 모든 권한 제거
icacls "OJO.pem" /inheritance:r
# 2. 현재 사용자(본인)에게만 읽기 권한 부여
$currentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
icacls "OJO.pem" /grant:r "${currentUser}:R"
# 3. 설정된 권한 확인 (출력 내용에 본인 이름 1개만 있어야 함)
icacls "OJO.pem"

그렇게 접속은 성공
프리티어로 진행하기에 서버 죽는 거를 방지를 위해 swap 설정
elasticsearch와 kibana 부분은 제외하고 테스트 진행
# 2GB 스왑 파일 생성
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 재부팅 시에도 적용
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
# 설정 확인 (Swap 항목에 숫자가 보이면 성공)
free -h
EC2의 ~/project 폴더 안에 (Elasticsearch를 제외한) docker-compose.yml 파일 넣기
cd ~/project
nano docker-compose.yml #혹은 vi docker-compose.yml
테스트만을 위해 간단히 작성했다
version: '3.8'
services:
backend:
image: [도커 name]/backend:latest
container_name: spring_server
ports:
- "8080:8080"
restart: always
analytics:
image: [도커 name]/analytics:latest
container_name: python_server
ports:
- "8000:8000"
restart: always
실제로는 rds를 적용한 db를 넣어야 함
ex.
HOST(workflows에서 설정한 host 이름): 할당받은 탄력적 IP
KEY(workflows에서 설정한 key 이름): .pem 파일의 텍스트 내용 전체(-----BEGIN RSA PRIVATE KEY-----도 포함)
https://taehoon9393.tistory.com/415 참고함

rds 페이지로 이동


mysql을 사용할 것이기에 mysql 선택


나중에 다중이 필요하면 변경 예정




더 많은 과금되는 것을 방지하기 위해 "스토리즈 자동 조정"은 끄기







내 ip와 ec2 보안 그룹을 넣었다
docker-compose.yml
참고>
https://jjang-j.tistory.com/193
https://velog.io/@krkorklo58/AWS-S3%EB%A1%9C-React-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0


배포된 사이트에 도메인을 적용하기 위해서는 버킷 이름을 도메인 이름과 동일하게 작성해야 한다고 하여 xx.xxx.xx같은 형태로 작성하였다.


나머지는 유지한 상태로 버킷 만들기를 진행하였다.

버킷의 이름을 눌러 들어왔고, 속성을 눌러준다



맨 아래 '정적 웹 사이트 호스팅' -> [편집] -> 활성화 -> 인덱스 문서에 index.html 입력 후 저장


버킷 ARN 기억/복사해두기

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Action": ["s3:GetObject"],
"Effect": "Allow",
"Resource": "복사한 버킷 ARN 값/*",
"Principal": "*"
}
]
}
저장
RDS_HOST(db -> 연결 단계에 적힌 ~rds.amazonaws.com), RDS_USERNAME(rds 만들면서 했던 마스터 사용자 이름), RDS_PASSWORD(rds 만들면서 설정한 비번) 추가

AWS_ACCESS_KEY_ID: IAM 사용자 키
AWS_SECRET_ACCESS_KEY: IAM 사용자 비밀 키
AWS_S3_BUCKET: 버킷 이름
추가
$ docker compose pull
docker: unknown command: docker compose
Run 'docker --help' for more information
으로 ec2에서도 도커 실행이 안됨
$ ls -l /usr/local/bin/docker-compose
-rwxr-xr-x 1 root root 31327024 Feb 12 07:29 /usr/local/bin/docker-compose
존재는 함
#'docker compose' 명령어로 인식되도록 링크 연결
sudo ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
# 제대로 연결되었는지 확인
$ docker-compose --version
Docker Compose version v5.0.2
비용때문에 서버를 껐다가 다시 켜도 도커 자동 시작되게 설정
# 서버 부팅 시 도커 서비스 자동 시작 활성화
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
다시 실행
docker-compose up -d
잘 실행됨