AI CICD배포

Seoyeon·2025년 10월 23일

백엔드

목록 보기
4/9

AI 서버용 EC2 초기 설정 스크립트

1. 권한 설정 및 SSH 접속 (동일)

키 파일 권한 변경 (최초 한 번만)

chmod 400 your-ai-key.pem

SSH 접속 (pem 파일 이름과 IP 주소는 AI 서버에 맞게 변경)

ssh -i your-ai-key.pem ec2-user@<AI 서버의 EC2 퍼블릭 IP>

2. 서버 패키지 업데이트 및 Git 설치 (동일)

설치된 패키지 모두 최신 버전으로 업데이트

sudo yum update -y

Git 설치

sudo yum install git -y

3. Python 3.11 설치 (Java 대신)

Python 3.11 및 관련 개발 도구 설치

sudo yum install -y python3.11 python3.11-devel python3.11-pip

python3 -> python3.11, pip3 -> pip3.11을 기본으로 사용하도록 설정 (선택 사항이지만 편리함)

sudo alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
sudo alternatives --install /usr/bin/pip3 pip3 /usr/bin/pip3.11 1

4. Poetry 설치 (프로젝트 의존성 관리 도구)

pip를 통해 poetry 설치

pip3 install poetry

5. 시간대 설정

서버의 시간을 한국 시간으로 변경
sudo timedatectl set-timezone Asia/Seoul

6. Docker 설치 및 실행

  1. 패키지 업데이트
    sudo dnf update -y

  2. Docker 설치
    sudo dnf install docker -y

  3. Docker 서비스 활성화 및 실행
    sudo systemctl enable --now docker

  4. Docker 서비스 상태 확인
    sudo systemctl status docker

  5. 권한 부여 (ec2-user가 sudo 없이 docker 명령어 사용 가능하게)
    sudo usermod -aG docker ec2-user

#6. 적용을 위해 재로그인
exit

  1. 그리고 다시 SSH 접속 후
    docker ps

Dockerfile (AI 서버용)

# 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"]

GitHub Actions (deploy.yml)

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

0개의 댓글