@@ -14,28 +14,18 @@ jobs:
1414 - name : Checkout código
1515 uses : actions/checkout@v4
1616
17- - name : Configurar Node.js
18- uses : actions/setup-node@v4
19- with :
20- node-version : ' 20'
21- cache : ' npm'
22-
23- - name : Instalar dependências
24- run : npm ci
25-
26- - name : Build do projeto
27- run : npm run build
28-
2917 - name : Criar pacote para deploy
3018 run : |
31- mkdir -p deploy-package
32- cp -r dist deploy-package/
33- cp package.json deploy-package/
34- cp package-lock.json deploy-package/
35- cp ecosystem.config.js deploy-package/
36- tar -czf deploy.tar.gz -C deploy-package .
37-
38- - name : Copiar e extrair no EC2
19+ tar -czf deploy.tar.gz \
20+ --exclude='.git' \
21+ --exclude='node_modules' \
22+ --exclude='.env' \
23+ --exclude='dist' \
24+ --exclude='coverage' \
25+ --exclude='logs' \
26+ .
27+
28+ - name : Copiar pacote para EC2
3929 uses : appleboy/scp-action@v0.1.7
4030 with :
4131 host : ${{ secrets.EC2_HOST }}
@@ -45,30 +35,30 @@ jobs:
4535 source : ' deploy.tar.gz'
4636 target : ' /home/ec2-user/'
4737
48- - name : Deploy e iniciar aplicação
38+ - name : Deploy via Docker Compose
4939 uses : appleboy/ssh-action@v1.0.3
5040 with :
5141 host : ${{ secrets.EC2_HOST }}
5242 username : ec2-user
5343 key : ${{ secrets.EC2_SSH_KEY }}
5444 port : 22
5545 script : |
46+ set -e
5647 cd /home/ec2-user
5748
58- # Parar aplicação
59- pm2 stop buffs-api 2>/dev/null || true
60- pm2 delete buffs-api 2>/dev/null || true
49+ # Garantir que o Docker está rodando
50+ sudo systemctl start docker 2>/dev/null || true
6151
6252 # Backup do .env
6353 if [ -f buffs-api/.env ]; then
6454 cp buffs-api/.env /tmp/.env.backup
6555 fi
6656
67- # Limpar e recriar diretório
57+ # Limpar e recriar diretório (preserva .env)
6858 rm -rf buffs-api
6959 mkdir -p buffs-api
7060
71- # Extrair arquivos
61+ # Extrair código-fonte
7262 tar -xzf deploy.tar.gz -C buffs-api/
7363 rm deploy.tar.gz
7464
@@ -79,24 +69,23 @@ jobs:
7969
8070 cd buffs-api
8171
82- # Verificar arquivos necessários
83- [ ! -f .env ] && echo "ERRO: .env não encontrado" && exit 1
84- [ ! -d dist ] && echo "ERRO: dist não encontrado" && exit 1
85- [ ! -f dist/src/main.js ] && echo "ERRO: dist/src/main.js não encontrado" && exit 1
72+ # Verificar .env obrigatório
73+ [ ! -f .env ] && echo "ERRO: .env não encontrado na EC2" && exit 1
74+
75+ # Parar containers antigos (se existirem)
76+ docker compose -f infra/docker-compose.prod.yml down --remove-orphans 2>/dev/null || true
8677
87- # Criar logs
88- mkdir -p logs
78+ # Build e subir todos os serviços
79+ docker compose -f infra/docker-compose.prod.yml up -d --build
8980
90- # Instalar dependências
91- npm ci --omit=dev --no-audit
81+ # Limpar imagens antigas não utilizadas
82+ docker image prune -f
9283
93- # Iniciar aplicação
94- pm2 start ecosystem.config.js --env production
95- pm2 save
84+ # Aguardar a API inicializar
85+ echo "Aguardando API inicializar..."
86+ sleep 15
9687
97- # Aguardar e verificar
98- sleep 5
99- curl -f http://localhost:3001/health || exit 1
88+ # Health check
89+ curl -f http://localhost:3001/health || (docker compose -f infra/docker-compose.prod.yml logs buffs-api && exit 1)
10090
101- echo "Deploy concluído com sucesso!"
102- pm2 status
91+ echo "✅ Deploy concluído com sucesso!"
0 commit comments