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.