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

4.4 KiB

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:

# 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

# 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)

# 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

# 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

docker logs wifi_etl_worker
docker exec wifi_etl_worker env | grep DB_

Cron não funciona

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

# 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

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

# 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