diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..df27c68 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,12 @@ +.git +.gitignore +.dockerignore +Dockerfile +venv/ +local_settings.py +__pycache__/ +media +.env +db.sqlite3 +migrations +README.md \ No newline at end of file diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml new file mode 100644 index 0000000..a2ef272 --- /dev/null +++ b/.github/workflows/workflow.yml @@ -0,0 +1,52 @@ +name: CI/CD Pipeline + +on: + push: + branches: + - dev + +jobs: + build: + runs-on: ubuntu-latest + + steps: + # 코드 체크아웃 + - name: Checkout code + uses: actions/checkout@v2 + + # 더 나은 도커 빌드 환경 세팅 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + # DockerHub 로그인 + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Build and push Docker image + uses: docker/build-push-action@v2 + with: + context: . + file: Dockerfile + push: true + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ secrets.DOCKER_HUB_REPO }}:latest + + deploy: + runs-on: ubuntu-latest + needs: build + + steps: + # AWS 배포 + - name: SSH to EC2 and deploy + uses: appleboy/ssh-action@v0.1.3 + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USER }} + key: ${{ secrets.EC2_SSH_KEY }} + script: | + docker compose stop ${{ secrets.DOCKER_HUB_REPO }} + docker compose rm ${{ secrets.DOCKER_HUB_REPO }} + docker rmi ${{ secrets.DOCKER_HUB_USERNAME }}/${{ secrets.DOCKER_HUB_REPO }}:latest + docker compose up -d diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3849e0e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +# Use an official Python runtime as a parent image +FROM python:3.12-slim-bullseye + +# Set environment variables +ENV PYTHONUNBUFFERED 1 +ENV PYTHONDONTWRITEBYTECODE 1 + +# Set the working directory +WORKDIR /app + +# Install Python dependencies +COPY requirements.txt /app/ + +# 시스템 패키지 설치 +RUN apt-get update && apt-get install -y \ + build-essential \ + libpq-dev \ + pkg-config \ + && rm -rf /var/lib/apt/lists/* + +# 첫 번째 시도 +RUN pip install --upgrade pip || \ + # 실패할 경우, python.exe -m pip로 재시도 + python.exe -m pip install --upgrade pip +RUN pip install --no-cache-dir -r requirements.txt + +# Copy the Django project +COPY . /app/ \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index d45ea32..641927a 100644 Binary files a/requirements.txt and b/requirements.txt differ