wifi-etl/docs/DEPLOY.md
Rafael Lopes 331a021d9a
Some checks failed
Deploy WiFi-ETL Prod / deploy (push) Failing after 0s
FEAT: Implementado ETL completo para Ruijie e Wifeed
- Adicionado suporte para extração de dados do Ruijie e WiFeed, incluindo autenticação e tratamento de erros.
- Adicionado suporte para watermarking em ambas as fontes para extração incremental.
- Criado script de transformação para mesclagem de MAC addresses.
- Implementado Backfill para WiFeed, permitindo extração histórica com controle de taxa.
- Adicionado script de depuração para testes de transformação do WiFeed.
- Desenvolvido scripts de implantação e configurações do Docker para setup de produção.
- Criado script de inicialização do schema do PostgreSQL em infra/init.sql.
- Adicionado teste automatizado para lógica de transformação e carregamento em test_transform_load.py.
- Atualizado documentation para implantação e setup de produção.
2026-04-22 16:55:44 -03:00

214 lines
4.4 KiB
Markdown

# 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