Skip to content

Update Dockerfile

Update Dockerfile #5

Workflow file for this run

name: Production CI/CD - Backend
on:
push:
branches:
- main
jobs:
build-deploy:
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout source
uses: actions/checkout@v4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Login to Amazon ECR
uses: aws-actions/amazon-ecr-login@v2
- name: Build & Push Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
${{ secrets.ECR_REGISTRY }}/${{ secrets.ECR_REPOSITORY }}:latest
${{ secrets.ECR_REGISTRY }}/${{ secrets.ECR_REPOSITORY }}:${{ github.sha }}
- name: Deploy to EC2 (Docker)
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
set -e
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} \
| docker login --username AWS --password-stdin ${{ secrets.ECR_REGISTRY }}
docker pull ${{ secrets.ECR_REGISTRY }}/${{ secrets.ECR_REPOSITORY }}:latest
docker stop backend-prod || true
docker rm backend-prod || true
cat <<EOF > /tmp/.env
NODE_ENV=production
PORT=${{ secrets.PORT }}
MONGODB_URI=${{ secrets.MONGODB_URI }}
LOG_LEVEL=${{ secrets.LOG_LEVEL }}
JWT_ACCESS_SECRET=${{ secrets.JWT_ACCESS_SECRET }}
JWT_REFRESH_SECRET=${{ secrets.JWT_REFRESH_SECRET }}
ACCESS_TOKEN_EXPIRY=${{ secrets.ACCESS_TOKEN_EXPIRY }}
REFRESH_TOKEN_EXPIRY=${{ secrets.REFRESH_TOKEN_EXPIRY }}
WHITELIST_ADMINS_MAIL=${{ secrets.WHITELIST_ADMINS_MAIL }}
EOF
docker run -d \
--name backend-prod \
-p 80:8080 \
--env-file /tmp/.env \
--restart always \
${{ secrets.ECR_REGISTRY }}/${{ secrets.ECR_REPOSITORY }}:latest
rm /tmp/.env