wifi-etl/docs/PROD_SETUP.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.5 KiB

🖥️ Setup do Servidor de Produção

1. Sistema Operacional

Ubuntu 22.04+ ou Debian 12 recomendados.

# Atualiza
sudo apt update && sudo apt upgrade -y

# Instala Docker
sudo apt install -y docker.io docker-compose-plugin

# Habilita e inicia
sudo systemctl enable docker
sudo systemctl start docker

# Adiciona usuário deploy ao grupo docker (se usar usuário não-root)
sudo usermod -aG docker $USER
# Faça logout/login ou: newgrp docker

2. Estrutura de Diretórios

# Cria diretório da aplicação
sudo mkdir -p /opt/wifi-etl
sudo chown $USER:$USER /opt/wifi-etl   # ou usuário deploy
cd /opt/wifi-etl

3. SSH Key (para CI/CD acessar)

No servidor de produção, gere uma chave para o deploy (ou use existente):

# Como usuário deploy (ou root)
ssh-keygen -t rsa -b 4096 -C "deploy@wifi-etl" -f ~/.ssh/id_rsa_wifi_etl -N ""

# Exiba a chave pública (adicionar no Gitea como Deploy Key ou user key)
cat ~/.ssh/id_rsa_wifi_etl.pub
# Copie o conteúdo → Gitea Settings → Deploy Keys → Add Key

No Gitea (repositório):

  • Settings → Deploy Keys → Add Deploy Key
  • Cole a chave pública
  • Marque "Allow write access" (para permitir deploy via SSH)

4. Docker Network (opcional — o compose cria automáticamente)

docker network create wifi-etl-net

5. Banco de Dados (VM separada ou mesmo servidor)

Se o DB estiver na mesma VM (não recomendado p/ prod):

docker run -d \
  --name wifi-db \
  -e POSTGRES_PASSWORD=$DB_PASSWORD \
  -e POSTGRES_DB=$DB_NAME \
  -p 5432:5432 \
  postgres:15-alpine

Se DB for externo: pule — apenas configure DB_HOST no .env do ETL.


6. Variáveis de Ambiente no Servidor

No servidor, crie /opt/wifi-etl/.env:

cat > /opt/wifi-etl/.env << 'EOF'
DB_HOST=localhost         # ou IP do DB externo
DB_PORT=5432
DB_NAME=wifi_etl
DB_USER=postgres
DB_PASSWORD=sua_senha_aqui

RUIJIE_BASE_URL=https://cloud-eu.ruijienetworks.com
RUIJIE_APPID=open52d4899cdbe2
RUIJIE_SECRET=10493c81e8e94f56b8710d78ed2527c7
RUIJIE_ACCESS_TOKEN=
RUIJIE_GROUP_ID=9290679

WIFEED_BASE_URL=https://api.wifeed.com.br
WIFEED_CLIENT_ID=60e40ee2-f39f-4556-8a22-840a2e3fa686
WIFEED_CLIENT_SECRET=dRpd6FB2hjbyvcA

LOG_LEVEL=INFO
EOF

chmod 600 /opt/wifi-etl/.env

7. Deploy Inicial (manual)

Após primeiro push na main (CI/CD automático), ou manual:

cd /opt/wifi-etl

# Copie arquivos do repositório (ou o CI/CD faz isso)
# Você precisará de:
# - docker-compose.prod.yml
# - infra/init.sql (schema)

# 1) Crie schema no DB
# Se DB local:
docker exec -i wifi-db psql -U postgres -d wifi_etl < infra/init.sql

# Se DB externo:
psql -h $DB_HOST -U $DB_USER -d $DB_NAME -f infra/init.sql

# 2) Teste imagem local (antes do CI/CD)
docker build -f infra/Dockerfile -t wifi-etl:test .
docker run --rm \
  -e DB_HOST=... -e DB_PASSWORD=... \
  -e RUIJIE_APPID=... -e RUIJIE_SECRET=... \
  -e WIFEED_CLIENT_ID=... -e WIFEED_CLIENT_SECRET=... \
  wifi-etl:test

# 3) Se OK, o CI/CD fará deploy automático no próximo push na main.

8. Monitoramento

# Logs do container
docker logs wifi-etl-worker -f

# Estatísticas
docker stats wifi-etl-worker

# graceful restart
docker restart wifi-etl-worker

9. Backup do Banco

# Diário via cron no servidor do DB
0 2 * * * pg_dump -U postgres wifi_etl > /backup/wifi_etl_$(date +\%Y-\%m-\%d).sql

10. Troubleshooting

Problema Solução
permission denied ao conectar SSH Adicione chave pública ao ~/.ssh/authorized_keys do usuário deploy
Container sobe e para Verifique logs: docker logs wifi-etl-worker — falta .env ou erro de conexão DB
DBconnection refused Verifique DB_HOST, firewall, pg_hba.conf
Token Ruijie expirado Delete RUIJIE_ACCESS_TOKEN do .env — ETL renova automaticamente
Watermark não avança onlineTime deve ser > watermark anterior; verifique formato (epoch ms)

📋 Checklist Deploy

  • Docker instalado no servidor
  • Usuário deploy criado (ou use root)
  • SSH key pair gerado; public key adicionada ao Gitea Deploy Keys
  • Diretório /opt/wifi-etl criado
  • .env copiado para /opt/wifi-etl/ (ou use variáveis do CI/CD)
  • infra/init.sql executado no banco
  • Firewall: porta 5432 (DB) acessível do servidor ETL
  • Gitea Variables configuradas (DB, Ruijie, WiFeed)
  • Gitea Secret SSH_PRIVATE_KEY configurado

Após push em main, o workflow Gitea fará:

  1. Build → artifact
  2. SSH deploy → servidor
  3. Container reiniciado