우리 기본 프로젝트에서 백엔드는 Python, FastAPI
프론트는 단순 React 하나 가져다 쓰고 있다.
이거 말고도 GPU 연산용 RunPod, 스케쥴 처리를 위한 Lambda 아키텍쳐도 같이 가져가고 있지만,
이건 내가 뺑이 치지는 않고 있으니 생략한다.
백엔드 배포
일반적인 방법대로 EC2 인스턴스에 배포하고 있다.
가장 추천되는 방법인 SSH로 Docker 배포하는 방법을 쓰고 있다.
대충 플로우를 이야기하자면 다음과 같다
EC2를 구성한다.
Docker, git 등등 필요 구성 요소들을 설치한다.
BE 프로젝트를 git으로 clone 받고, 내부에 docker compose를 빌드한다.
대충 돌아가는거 확인됬으면 기다린다.
연결로 보안 키를 설정한다.
Github Action을 만든다.
설정해둔 보안키로 접근하도록 한다.
프로젝트 경로에서 git pull 당긴다.
기존 docker compose를 중지한다.
docker compose를 빌드한다.
docker compose를... 암튼 그냥 실행하고 기다렸다가 서비스 검증한다 끝
대충 하나씩 풀어서 설명하겠다.
EC2 먼저 만들기
스펙은 원하는대로 하고,
SSH 접근에 0.0.0.0/0으로 둬서 아무나 접근하게 만든다.
(어차피 키 없으면 접근 안됨)
EC2 접근하기
AWS에서 인스턴스 만들 때 개인키 발급한걸로 먼저 접근하면 된다.
EC2 퍼블릭 IP 확인: AWS Console > EC2 > 인스턴스에서 확인
ssh -i your-key-name.pem ec2-user@YOUR_EC2_PUBLIC_IP
귀찮으면 AWS 콘솔에서 인스턴스 클릭하면 연결에 세션 관리자 있다.
거기서 연결하면 된다.
EC2 초기 설정하기
배포할꺼면 docker랑 git이 필요하다.
1. 시스템에 설치된 모든 패키지를 최신 상태로 업데이트
sudo dnf update -y
2. Git 설치
sudo dnf install git -y
3. Amazon 기본 리포지토리를 사용하여 Docker 설치
sudo dnf install docker -y
4. Docker 서비스 시작
sudo systemctl start docker
5. 시스템 부팅 시 Docker가 자동으로 시작되도록 설정
sudo systemctl enable docker
6. Docker 서비스가 정상적으로 실행 중인지 확인
sudo systemctl status docker
7. 현재 사용자를 docker 그룹에 추가 (sudo 없이 docker 명령어 사용)
sudo usermod -aG docker $USER
8. 그룹 변경 사항을 현재 세션에 즉시 적용
newgrp docker
9. 모든 사용자를 위한 Docker Compose 플러그인 디렉토리 생성
(경로 불일치 오류 방지를 위해 표준 경로인 /usr/local/lib/... 로 통일했습니다)
sudo mkdir -p /usr/local/lib/docker/cli-plugins
10. 최신 버전의 Docker Compose 플러그인 다운로드
sudo curl -SL "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" -o /usr/local/lib/docker/cli-plugins/docker-compose
11. 다운로드한 플러그인에 실행 권한 부여
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
12. Docker 서비스 재시작 (변경 사항 적용)
sudo systemctl restart docker
13. 설치 결과 확인 (Docker Compose 및 Git)
docker compose version git --version
도커 실행
docker compose 버전이 잘 표시되면
프로젝트 폴더(clone 받았다고 가정)으로 가서 빌드하고 실행를 진행하자
docker-compose build docker-compose up -d docker-compose ps
Github actions
Actions CD는 자체적으로 각자 만들자
중요한건 SSH키, Host, User 등은 github 내부 변수로 따로 관리하고,
절대로, 절대로, 절대 명시하지 말자
Actions에서는 그냥 방금 우리가 git, docker 진행했듯이
git pull origin main docker compose down docker compose build --no-cache docker compose up -d
을 진행해주면 된다.
위 과정을 진행하기 위해 SSH 키를 적용시켜줘야하는데,
EC2에 접속하고
nano ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
을 통해 기존 키에 우리 공개키 내용을 하단에 추가해주고 권한을 변경해주자
S3는 그냥 배포하자
그냥 일반 정적 리소스 배포고, IAM으로 계정하나 파서 연결해주면 되니,
자세한 설명은 생략한다.