ci(aws): build imagem no runner e transfere para EC2 (evita buildx na… #19
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy BUFFS API to AWS EC2 | |
| on: | |
| push: | |
| branches: | |
| - main | |
| workflow_dispatch: | |
| jobs: | |
| deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout código | |
| uses: actions/checkout@v4 | |
| - name: Configurar Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build da imagem Docker | |
| run: | | |
| docker build -t buffs-api:latest . | |
| docker save buffs-api:latest | gzip > /tmp/buffs-api-image.tar.gz | |
| echo "Tamanho da imagem comprimida: $(du -sh /tmp/buffs-api-image.tar.gz | cut -f1)" | |
| - name: Criar pacote do código-fonte | |
| run: | | |
| tar -czf /tmp/deploy.tar.gz \ | |
| --exclude='.git' \ | |
| --exclude='node_modules' \ | |
| --exclude='.env' \ | |
| --exclude='dist' \ | |
| --exclude='coverage' \ | |
| --exclude='logs' \ | |
| . | |
| cp /tmp/deploy.tar.gz deploy.tar.gz | |
| cp /tmp/buffs-api-image.tar.gz buffs-api-image.tar.gz | |
| - name: Copiar arquivos para EC2 | |
| uses: appleboy/scp-action@v0.1.7 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ec2-user | |
| key: ${{ secrets.EC2_SSH_KEY }} | |
| port: 22 | |
| source: 'deploy.tar.gz,buffs-api-image.tar.gz' | |
| target: '/home/ec2-user/' | |
| - name: Deploy via Docker Compose | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ec2-user | |
| key: ${{ secrets.EC2_SSH_KEY }} | |
| port: 22 | |
| command_timeout: 10m | |
| script: | | |
| set -e | |
| cd /home/ec2-user | |
| # Garantir que o Docker está rodando | |
| sudo systemctl start docker 2>/dev/null || true | |
| # Instalar docker-compose se não existir | |
| if ! command -v docker-compose &> /dev/null; then | |
| echo "Instalando docker-compose..." | |
| sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose | |
| sudo chmod +x /usr/local/bin/docker-compose | |
| fi | |
| # Backup do .env | |
| if [ -f buffs-api/.env ]; then | |
| cp buffs-api/.env /tmp/.env.backup | |
| fi | |
| # Limpar e recriar diretório (preserva .env) | |
| rm -rf buffs-api | |
| mkdir -p buffs-api | |
| # Extrair código-fonte | |
| tar -xzf deploy.tar.gz -C buffs-api/ | |
| rm deploy.tar.gz | |
| # Restaurar .env | |
| if [ -f /tmp/.env.backup ]; then | |
| mv /tmp/.env.backup buffs-api/.env | |
| fi | |
| cd buffs-api | |
| # Verificar .env obrigatório | |
| [ ! -f .env ] && echo "ERRO: .env não encontrado na EC2" && exit 1 | |
| # Carregar imagem Docker pré-construída (evita buildx no servidor) | |
| echo "Carregando imagem Docker..." | |
| docker load < /home/ec2-user/buffs-api-image.tar.gz | |
| rm /home/ec2-user/buffs-api-image.tar.gz | |
| # Parar containers antigos (se existirem) | |
| docker-compose -f infra/docker-compose.prod.yml down --remove-orphans 2>/dev/null || true | |
| # Subir todos os serviços (sem --build, usa imagem já carregada) | |
| docker-compose -f infra/docker-compose.prod.yml up -d | |
| # Limpar imagens antigas não utilizadas | |
| docker image prune -f | |
| # Aguardar a API inicializar | |
| echo "Aguardando API inicializar..." | |
| sleep 15 | |
| # Health check | |
| curl -f http://localhost:3001/health || (docker-compose -f infra/docker-compose.prod.yml logs --tail=50 buffs-api && exit 1) | |
| echo "✅ Deploy concluído com sucesso!" |