1- name : Deploy Microservices to EC2
1+ name : Deploy Microservices (Artifact Mode)
22
33on :
44 push :
@@ -21,86 +21,53 @@ jobs:
2121 node-version : 20
2222 cache : " pnpm"
2323
24+ # Install full workspace deps
2425 - name : Install dependencies
2526 run : pnpm install --frozen-lockfile
2627
27- - name : Build all services
28+ # Build everything
29+ - name : Build workspace
2830 run : pnpm -r run build
2931
30- # ---------- SSH SETUP ----------
32+ # Remove dev dependencies
33+ - name : Prune dev dependencies
34+ run : pnpm prune --prod
35+
36+ # SSH setup
3137 - name : Setup SSH
3238 run : |
3339 mkdir -p ~/.ssh
3440 echo "${{ secrets.EC2_SSH_KEY }}" > ~/.ssh/ec2.pem
3541 chmod 600 ~/.ssh/ec2.pem
3642 ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts
3743
38- # ---------- DEPLOY BACKEND ----------
39- - name : Deploy Backend Services
44+ # Deploy full production bundle
45+ - name : Deploy to EC2
4046 run : |
4147 rsync -avz --delete \
4248 -e "ssh -i ~/.ssh/ec2.pem" \
43- api-gateway/dist \
44- services/patient-service/dist \
45- services/staff-service/dist \
46- services/shared/dist \
47- api-gateway/package.json \
48- services/patient-service/package.json \
49- services/staff-service/package.json \
50- pnpm-workspace.yaml \
49+ api-gateway \
50+ services \
51+ frontend/.next \
52+ frontend/public \
5153 package.json \
5254 pnpm-lock.yaml \
55+ pnpm-workspace.yaml \
56+ node_modules \
5357 ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:${{ secrets.APP_DIR }}/
5458
55- - name : Install production dependencies & reload backend
59+ # Restart services
60+ - name : Restart Services
5661 run : |
5762 ssh -i ~/.ssh/ec2.pem ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF'
58- set -e
59- export NVM_DIR="$HOME/.nvm"
60- source "$NVM_DIR/nvm.sh"
61-
6263 cd ${{ secrets.APP_DIR }}
6364
64- CI=true pnpm install --prod --frozen-lockfile --ignore-scripts --force
65-
6665 pm2 reload api-gateway || pm2 start api-gateway/dist/server.js --name api-gateway
6766 pm2 reload patient-service || pm2 start services/patient-service/dist/server.js --name patient-service
6867 pm2 reload staff-service || pm2 start services/staff-service/dist/server.js --name staff-service
6968
70- pm2 save
71- EOF
72-
73- # ---------- DEPLOY FRONTEND ----------
74- - name : Deploy Frontend
75- run : |
76- ssh -i ~/.ssh/ec2.pem ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} \
77- "mkdir -p ${{ secrets.APP_DIR }}/frontend-deploy/frontend/.next/static ${{ secrets.APP_DIR }}/frontend-deploy/frontend/public"
78-
79- rsync -avz --delete \
80- -e "ssh -i ~/.ssh/ec2.pem" \
81- frontend/.next/standalone/ \
82- ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:${{ secrets.APP_DIR }}/frontend-deploy/
83-
84- rsync -avz \
85- -e "ssh -i ~/.ssh/ec2.pem" \
86- frontend/public/ \
87- ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:${{ secrets.APP_DIR }}/frontend-deploy/frontend/public/
88-
89- rsync -avz \
90- -e "ssh -i ~/.ssh/ec2.pem" \
91- frontend/.next/static/ \
92- ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:${{ secrets.APP_DIR }}/frontend-deploy/frontend/.next/static/
93-
94- - name : Restart Frontend
95- run : |
96- ssh -i ~/.ssh/ec2.pem ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF'
97- set -e
98- export NVM_DIR="$HOME/.nvm"
99- source "$NVM_DIR/nvm.sh"
100-
101- cd ${{ secrets.APP_DIR }}/frontend-deploy/frontend
102-
103- pm2 reload frontend || PORT=3000 pm2 start server.js --name frontend
69+ cd frontend
70+ pm2 reload frontend || PORT=3000 pm2 start .next/standalone/frontend/server.js --name frontend
10471
10572 pm2 save
10673 EOF
0 commit comments