# Deploy WiFi-ETL em Produção ## Arquitetura - **Aplicação**: `/opt/wifi-etl` (clone do repositório) - **Config**: `.env` copiado de `/home/desenvolvimento/.envs/wifi_etl/.env` - **Container**: Rodando via `docker compose` (cron + ETL) - **Runner**: Self-hosted na VM (pull automático na mudança de código) ## Setup Inicial (uma única vez na VM) ### 1. Configurar Self-Hosted Runner no Gitea Na **VM de produção**: ```bash # Criar diretório para o runner mkdir -p ~/gitea-runner cd ~/gitea-runner # Baixar runner Gitea (Linux x86_64) # Substitua URL pela sua instância Gitea wget https://seu-gitea.com/api/v1/repos/seu-usuario/wifi-etl/actions/runners/download/linux_x86_64 # Ou use curl: # curl -LO https://seu-gitea.com/api/v1/repos/seu-usuario/wifi-etl/actions/runners/download/linux_x86_64 # Descompactar unzip linux_x86_64 chmod +x act_runner # Gerar token no Gitea: # 1. Vá para: Repositório → Settings → Actions → Runners # 2. Clique "Create Runner" # 3. Copie o Token gerado # Registrar runner (substitua o token) ./act_runner register \ --instance https://seu-gitea.com \ --token seu_token_aqui # Rodar em background nohup ./act_runner daemon > runner.log 2>&1 & # OU criar systemd service (recomendado): sudo tee /etc/systemd/system/gitea-runner.service > /dev/null << 'EOF' [Unit] Description=Gitea Runner After=network.target [Service] Type=simple User=ubuntu WorkingDirectory=/home/ubuntu/gitea-runner ExecStart=/home/ubuntu/gitea-runner/act_runner daemon Restart=always RestartSec=10 [Install] WantedBy=multi-user.target EOF sudo systemctl enable gitea-runner sudo systemctl start gitea-runner sudo systemctl status gitea-runner ``` ### 2. Preparar diretório da aplicação ```bash # Criar diretório mkdir -p /opt/wifi-etl # Primeiro clone manual (depois é automático) cd /opt/wifi-etl git clone https://seu-gitea.com/seu-usuario/wifi-etl.git . ``` ## Fluxo de Deploy Automático ``` 1. git push main (local → Gitea) ↓ 2. Gitea dispara workflow (push event) ↓ 3. Runner na VM executa ↓ 4. git pull /opt/wifi-etl (atualiza código) ↓ 5. Copiar .env ↓ 6. docker compose up -d --build ↓ 7. Validar CRON status ↓ 8. Testar conexão BD ↓ DONE! ✓ ``` ## Deploy Manual (se necessário) ```bash # Na VM cd /opt/wifi-etl git pull origin main cp /home/desenvolvimento/.envs/wifi_etl/.env ./.env docker compose -f infra/docker-compose.yml up -d --build # Aguardar inicialização sleep 5 docker logs -f wifi_etl_worker ``` ## Verificações Pós-Deploy ```bash # Status do container docker ps -a | grep wifi_etl # Logs em tempo real docker logs -f wifi_etl_worker # Validar cron rodando docker exec wifi_etl_worker ps aux | grep cron # Testar banco de dados docker exec wifi_etl_worker python3 << 'EOF' import psycopg2, os try: conn = psycopg2.connect( host=os.getenv('DB_HOST'), port=int(os.getenv('DB_PORT', 5432)), dbname=os.getenv('DB_NAME'), user=os.getenv('DB_USER'), password=os.getenv('DB_PASSWORD') ) print("✓ Database conectado") conn.close() except Exception as e: print(f"✗ Erro: {e}") EOF # Ver logs de ETL docker exec wifi_etl_worker tail -50 /var/log/wifi-etl.log ``` ## Troubleshooting ### Container não inicia ```bash docker logs wifi_etl_worker docker exec wifi_etl_worker env | grep DB_ ``` ### Cron não funciona ```bash docker exec -it wifi_etl_worker bash cat /etc/cron.d/wifi-etl # Verificar arquivo tail -20 /var/log/syslog # Verificar logs ``` ### Banco não conecta ```bash # Verificar variáveis de ambiente docker exec wifi_etl_worker env | grep DB_ # Testar conexão docker exec wifi_etl_worker python3 -m \ psycopg2 "postgresql://user:pass@host:port/db" ``` ### Runner não pegando mudanças ```bash cd ~/gitea-runner ./act_runner status # Ver logs tail -50 runner.log # Restart pkill act_runner nohup ./act_runner daemon > runner.log 2>&1 & ``` ## Revertir Deploy ```bash # Parar container docker-compose -f /opt/wifi-etl/infra/docker-compose.yml down # Remover para forçar rebuild docker rmi wifi-etl:latest # Ou voltar para commit anterior cd /opt/wifi-etl git reset --hard HEAD~1 # Depois fazer deploy novamente ``` ## ETL Schedule Roda a cada **5 minutos** em produção: ``` */5 * * * * /usr/local/bin/python /app/main.py ``` Logs: `/var/log/wifi-etl.log` (dentro do container) --- **Last updated**: 2026-04-22