AI 서버용 EC2 초기 설정 스크립트
chmod 400 your-ai-key.pem
ssh -i your-ai-key.pem ec2-user@<AI 서버의 EC2 퍼블릭 IP>
sudo yum update -y
sudo yum install git -y
sudo yum install -y python3.11 python3.11-devel python3.11-pip
sudo alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
sudo alternatives --install /usr/bin/pip3 pip3 /usr/bin/pip3.11 1
pip3 install poetry
서버의 시간을 한국 시간으로 변경
sudo timedatectl set-timezone Asia/Seoul
패키지 업데이트
sudo dnf update -y
Docker 설치
sudo dnf install docker -y
Docker 서비스 활성화 및 실행
sudo systemctl enable --now docker
Docker 서비스 상태 확인
sudo systemctl status docker
권한 부여 (ec2-user가 sudo 없이 docker 명령어 사용 가능하게)
sudo usermod -aG docker ec2-user
#6. 적용을 위해 재로그인
exit
# 1. Python 3.11 기반 이미지 사용
FROM python:3.11-slim
# 2. 컨테이너 내 작업 디렉토리 설정
WORKDIR /app
# 3. Poetry 및 필요한 시스템 패키지 설치
RUN apt-get update && apt-get install -y curl && \
pip install --no-cache-dir poetry
# 4. 프로젝트 파일 복사 (pyproject.toml 포함)
COPY pyproject.toml poetry.lock* ./
RUN poetry install --no-root --no-interaction --no-ansi
# 5. 소스 코드 복사
COPY . .
# 6. FastAPI 실행 (포트 8000)
EXPOSE 8000
CMD ["poetry", "run", "uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"]
name: Deploy AI Backend to EC2
on:
push:
branches: [ "main" ]
jobs:
deploy:
runs-on: ubuntu-latest
env:
AWS_REGION: ap-northeast-2
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login to ECR
uses: aws-actions/amazon-ecr-login@v1
with:
aws-region: ${{ env.AWS_REGION }}
- name: Build and Push Docker Image
run: |
IMAGE_URI=${{ secrets.ECR_URI }}:latest
docker build -t $IMAGE_URI .
docker push $IMAGE_URI
- name: SSH into EC2 and Deploy
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.EC2_HOST }}
username: ec2-user
key: ${{ secrets.EC2_KEY }}
script: |
docker pull ${{ secrets.ECR_URI }}:latest
docker stop nie-llm || true && docker rm nie-llm || true
docker run -d --name nie-llm -p 8000:8000 ${{ secrets.ECR_URI }}:latest