Skip to content

Commit

Permalink
[CHORES] Create docker for deploying production.
Browse files Browse the repository at this point in the history
  • Loading branch information
JohannesSetiawan committed May 15, 2024
1 parent d79eca4 commit f6798b0
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 15 deletions.
92 changes: 92 additions & 0 deletions .github/workflows/deploy-docker-prod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
name: Deploy to Docker

on:
push:
branches:
- '**'

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Set Up Environment Variables
run: |
echo "DB_HOST=${{ secrets.DB_HOST }}" >> .env
echo "DJANGO_SECRET_KEY=${{ secrets.DJANGO_SECRET_KEY }}" >> .env
echo "DB_NAME=${{ secrets.DB_NAME }}" >> .env
echo "DB_USER=${{ secrets.DB_USER }}" >> .env
echo "DB_PASS=${{ secrets.DB_PASS }}" >> .env
echo "EMAIL_HOST=${{ secrets.EMAIL_HOST }}" >> .env
echo "EMAIL_HOST_USER=${{ secrets.EMAIL_HOST_USER }}" >> .env
echo "EMAIL_HOST_PASSWORD=${{ secrets.EMAIL_HOST_PASSWORD }}" >> .env
echo "DEFAULT_FROM_EMAIL=${{ secrets.DEFAULT_FROM_EMAIL }}" >> .env
echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}" >> .env
echo "OPENAI_API_ORGANIZATION_ID=${{ secrets.OPENAI_API_ORGANIZATION_ID }}" >> .env
echo "GCP_PRIVATE_KEY=${{ secrets.GCP_PRIVATE_KEY }}" >> .env
echo "GCP_PROJECT_ID=${{ secrets.GCP_PROJECT_ID }}" >> .env
echo "GCP_PRIVATE_KEY_ID=${{ secrets.GCP_PRIVATE_KEY_ID }}" >> .env
echo "GCP_CLIENT_EMAIL=${{ secrets.GCP_CLIENT_EMAIL }}" >> .env
echo "GCP_CLIENT_ID=${{ secrets.GCP_CLIENT_ID }}" >> .env
echo "GCP_AUTH_URI=${{ secrets.GCP_AUTH_URI }}" >> .env
echo "GCP_TOKEN_URI=${{ secrets.GCP_TOKEN_URI }}" >> .env
echo "GCP_AUTH_PROVIDER_X509_CERT_URL=${{ secrets.GCP_AUTH_PROVIDER_X509_CERT_URL }}" >> .env
echo "GCP_CLIENT_X509_CERT_URL=${{ secrets.GCP_CLIENT_X509_CERT_URL }}" >> .env
echo "GCP_UNIVERSE_DOMAIN=${{ secrets.GCP_UNIVERSE_DOMAIN }}" >> .env
echo "POSTGRES_PASSWORD=${{ secrets.DB_PASS }}" >> .env
echo "POSTGRES_USER=${{ secrets.DB_USER }}" >> .env
echo "POSTGRES_DB=${{ secrets.DB_NAME }}" >> .env
echo "POSGRES_HOST=${{ secrets.DB_HOST }}" >> .env
echo "DOCKER_USERNAME=${{ secrets.DOCKER_USERNAME }}" >> .env
echo "DOCKER_IMAGE_NAME=${{ secrets.DOCKER_IMAGE_NAME }}" >> .env
- name: Run Tests
run: |
python manage.py test
publish:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v3

- name: Login to Docker
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build Docker Image
run: |
docker build -t ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_IMAGE_NAME }}:latest .
- name: Push Docker Image
run: |
docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_IMAGE_NAME }}:latest
deploy:
runs-on: ubuntu-latest
needs: publish
steps:
- uses : actions/checkout@v3
- name: SSH to GCP
uses: appleboy/[email protected]
with:
host: ${{ secrets.DOCKER_SSH_HOST }}
username: ${{ secrets.DOCKER_SSH_USERNAME }}
key: ${{ secrets.DOCKER_SSH_PRIVATE_KEY }}
port: 22
passphrase: ${{ secrets.DOCKER_SSH_PASSPHRASE }}
script: |
sudo docker login --username=${{ secrets.DOCKER_USERNAME }} --password=${{ secrets.DOCKER_PASSWORD }}
sudo docker container rm -f ${{ secrets.DOCKER_IMAGE_NAME }} || true
sudo docker image rm -f ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_IMAGE_NAME }}:latest || true
sudo docker run --name ${{ secrets.DOCKER_IMAGE_NAME }} -d -p 8000:8000 ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_IMAGE_NAME }}:latest
27 changes: 12 additions & 15 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
# Use the official Python image as the base image
FROM python:3.11
FROM python:3.10

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV PYTHONUNBUFFERED=1

# Set the working directory to /app
WORKDIR /app
WORKDIR .

# Copy the current directory contents into the container at /app
COPY . /app
COPY . .

# Install dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
RUN pip install --upgrade pip

RUN pip install -r requirements.txt

# Expose port 8000 for the Django app to run
EXPOSE 8000
EXPOSE 5432

HEALTHCHECK --interval=15s --timeout=1s \
CMD curl --fail http://localhost:8000/swagger/ || exit 1

# Start the Django app
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

0 comments on commit f6798b0

Please sign in to comment.