# 🖥️ Setup do Servidor de Produção ## 1. Sistema Operacional Ubuntu 22.04+ ou Debian 12 recomendados. ```bash # 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 ```bash # 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): ```bash # 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) ```bash 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): ```bash 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`: ```bash 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: ```bash 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 ```bash # 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 ```bash # 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