How I can deploy my nodejs project on EC2?

24 views Asked by At

I have a root folder named test, under this folder there are 3 folders named admin, user, news, each of these folders represents the microservice. There is a src under each folder and index.ts within these srcs. How can I run these 3 services in a single container? How should docker-compose.yml be? How should Dockerfiles be written within each service? How should main.yml be edited for Github workflows? This project created using TypeScript. I would be very pleased if you could help me in these matters.

Admin Dockerfile

# admin/Dockerfile
FROM node:latest
WORKDIR /app/admin
COPY admin/package*.json ./
RUN npm install
COPY admin/ .
CMD ["npm", "start"]

Root docker-compose.yaml

version: '3'
services:
  admin:
    build: 
      context: admin
      dockerfile: Dockerfile
    image: admin
    ports:
      - "3000:3000"

Github Workflows main.yml

name: Deploy to EC2

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '20'

    - name: Install Docker CLI
      run: |
        sudo apt-get update

    - name: Build and push Docker image for admin
      run: |
        docker build -t test -f admin/Dockerfile .
        docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
        docker push test

    # Repeat the above steps for each service

    - name: SSH into EC2 instance and deploy
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.EC2_HOST }}
        username: ${{ secrets.EC2_USERNAME }}
        key: ${{ secrets.EC2_PRIVATE_KEY }}
        script: |
          sudo docker pull test:latest
          sudo docker stop test || true
          sudo docker rm test || true
          sudo docker run -d -p 3000:3000 --name test test:latest

Chatgpt, stackoverflow, github etc.

0

There are 0 answers