From 2f4d5420803ff738ed8236636992b410170b3db4 Mon Sep 17 00:00:00 2001 From: jinu721 Date: Mon, 9 Feb 2026 10:13:45 +0530 Subject: [PATCH 1/3] chore(backend): implement ci/cd with github actions for aws --- .github/workflows/backend-cicd.yml | 63 ++++++++++++++++++++++++++++++ backend/.dockerignore | 10 +++++ backend/Dockerfile | 23 +++++++++++ 3 files changed, 96 insertions(+) create mode 100644 .github/workflows/backend-cicd.yml create mode 100644 backend/.dockerignore create mode 100644 backend/Dockerfile diff --git a/.github/workflows/backend-cicd.yml b/.github/workflows/backend-cicd.yml new file mode 100644 index 0000000..f642802 --- /dev/null +++ b/.github/workflows/backend-cicd.yml @@ -0,0 +1,63 @@ +name: Backend CI/CD + +on: + push: + branches: [ main, feature/my-active-tasks ] + paths: + - 'backend/**' + pull_request: + branches: [ main ] + paths: + - 'backend/**' + +jobs: + build-and-test: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '18' + cache: 'npm' + cache-dependency-path: backend/package-lock.json + + - name: Install Dependencies + run: | + cd backend + npm ci + + - name: Build Backend + run: | + cd backend + npm run build + + + deploy: + needs: build-and-test + runs-on: ubuntu-latest + if: github.event_name == 'push' && (github.ref == 'refs/heads/main') + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + + - name: Generate Deployment Package + run: | + cd backend + zip -r ../deploy.zip . -x "node_modules/*" "src/*" ".env" + + - name: Deploy to AWS Elastic Beanstalk + uses: einaregilsson/beanstalk-deploy@v21 + with: + aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + application_name: teamup-backend + environment_name: Teamup-backend-env + version_label: ${{ github.sha }} + region: us-east-1 + deployment_package: deploy.zip diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 0000000..a60d323 --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,10 @@ +node_modules +dist +src +.env +.git +.github +*.md +Dockerfile +.dockerignore +npm-debug.log diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..5f849fa --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,23 @@ +FROM node:18-alpine AS builder + +WORKDIR /app + +COPY package*.json ./ + +RUN npm ci + +COPY . . +RUN npm run build + +FROM node:18-alpine AS runner + +WORKDIR /app +COPY --from=builder /app/dist ./dist +COPY --from=builder /app/package*.json ./ +COPY --from=builder /app/node_modules ./node_modules + +EXPOSE 5000 + +ENV NODE_ENV=production + +CMD ["npm", "start"] From dc5416035e281745e3eb9c08e525b0bbd4cf9abb Mon Sep 17 00:00:00 2001 From: jinu721 Date: Mon, 9 Feb 2026 10:23:24 +0530 Subject: [PATCH 2/3] chore(backend): add docker-compose for production deployment --- backend/docker-compose.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 backend/docker-compose.yml diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml new file mode 100644 index 0000000..b1fc62a --- /dev/null +++ b/backend/docker-compose.yml @@ -0,0 +1,14 @@ +version: '3.8' + +services: + backend: + build: + context: . + dockerfile: Dockerfile + ports: + - "5000:5000" + env_file: + - .env + environment: + - NODE_ENV=production + restart: always From 85db5db8a90aa2b65461b7dc29a93e18f9e93ead Mon Sep 17 00:00:00 2001 From: jinu721 Date: Mon, 9 Feb 2026 10:34:25 +0530 Subject: [PATCH 3/3] chore(backend): update cicd to use ssh deployment with pem key --- .github/workflows/backend-cicd.yml | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/.github/workflows/backend-cicd.yml b/.github/workflows/backend-cicd.yml index f642802..d395b91 100644 --- a/.github/workflows/backend-cicd.yml +++ b/.github/workflows/backend-cicd.yml @@ -46,18 +46,16 @@ jobs: uses: actions/checkout@v4 - - name: Generate Deployment Package - run: | - cd backend - zip -r ../deploy.zip . -x "node_modules/*" "src/*" ".env" - - - name: Deploy to AWS Elastic Beanstalk - uses: einaregilsson/beanstalk-deploy@v21 + - name: Deploy to EC2 via SSH + uses: appleboy/ssh-action@v1.0.3 with: - aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - application_name: teamup-backend - environment_name: Teamup-backend-env - version_label: ${{ github.sha }} - region: us-east-1 - deployment_package: deploy.zip + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USERNAME }} + key: ${{ secrets.EC2_SSH_KEY }} + script: | + cd ~/teamup + git pull origin main + cd backend + docker-compose down + docker-compose up --build -d + docker image prune -f