DOCS: Atualiza README e crontab com instruções e variáveis de ambiente
Some checks failed
Deploy WiFi-ETL Prod / deploy (push) Failing after 0s
Some checks failed
Deploy WiFi-ETL Prod / deploy (push) Failing after 0s
This commit is contained in:
parent
8788db407d
commit
f277c318b4
67
README.md
67
README.md
@ -1,8 +1,5 @@
|
|||||||
# 📡 WiFi ETL Pipeline
|
# 📡 WiFi ETL Pipeline
|
||||||
|
|
||||||
🚧 **Em construção** 🚧
|
|
||||||
Este projeto está em desenvolvimento. Este primeiro commit contém a estrutura base do pipeline ETL.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🧠 Visão Geral
|
## 🧠 Visão Geral
|
||||||
@ -107,9 +104,7 @@ Crie um `.env` baseado no exemplo:
|
|||||||
```bash
|
```bash
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
```
|
```
|
||||||
|
Preencha com suas credenciais (NUNCA commitar o `.env`)
|
||||||
Preencha com suas credenciais (WiFeed já inclusa no `.env`):
|
|
||||||
|
|
||||||
```env
|
```env
|
||||||
# PostgreSQL
|
# PostgreSQL
|
||||||
DB_HOST=localhost
|
DB_HOST=localhost
|
||||||
@ -121,14 +116,14 @@ DB_PASSWORD=sua_senha
|
|||||||
# Ruijie (AP)
|
# Ruijie (AP)
|
||||||
RUIJIE_BASE_URL=https://cloud-eu.ruijienetworks.com
|
RUIJIE_BASE_URL=https://cloud-eu.ruijienetworks.com
|
||||||
RUIJIE_APPID=seu_appid
|
RUIJIE_APPID=seu_appid
|
||||||
RUIJIE_SECRET=seu_secret
|
RUIJIE_SECRET=**********
|
||||||
RUIJIE_ACCESS_TOKEN=
|
RUIJIE_ACCESS_TOKEN=**********************************
|
||||||
RUIJIE_GROUP_ID=9290679
|
RUIJIE_GROUP_ID=9290679
|
||||||
|
|
||||||
# WiFeed (autenticação usuários)
|
# WiFeed (autenticação usuários)
|
||||||
WIFEED_BASE_URL=https://api.wifeed.com.br
|
WIFEED_BASE_URL=https://api.wifeed.com.br
|
||||||
WIFEED_CLIENT_ID=60e40ee2-f39f-4556-8a22-840a2e3fa686
|
WIFEED_CLIENT_ID=**********-*****-****-****-************
|
||||||
WIFEED_CLIENT_SECRET=dRpd6FB2hjbyvcA
|
WIFEED_CLIENT_SECRET=****************
|
||||||
|
|
||||||
LOG_LEVEL=INFO
|
LOG_LEVEL=INFO
|
||||||
```
|
```
|
||||||
@ -156,11 +151,11 @@ docker run -d --name wifi-db \
|
|||||||
docker exec -i wifi-db psql -U postgres -d wifi_etl < infra/init.sql
|
docker exec -i wifi-db psql -U postgres -d wifi_etl < infra/init.sql
|
||||||
|
|
||||||
# e) Rode o ETL (uma vez)
|
# e) Rode o ETL (uma vez)
|
||||||
python app/main.py
|
python -m app.main
|
||||||
|
|
||||||
# f) (Opcional) Agende localmente
|
# f) (Opcional) Agende localmente
|
||||||
# crontab -e
|
# crontab -e
|
||||||
# */5 * * * * cd /caminho/wifi-etl && /usr/bin/python3 main.py >> /var/log/wifi-etl.log 2>&1
|
# */5 * * * * cd /caminho/wifi-etl && PYTHONPATH=. python -m app.main >> /var/log/wifi-etl.log 2>&1
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -180,26 +175,27 @@ docker-compose exec etl python /app/main.py
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 5. **Deploy Automático (CI/CD)**
|
#### 5. Deploy Automático (CI/CD)
|
||||||
|
|
||||||
Ao fazer `git push` na branch `main`, o workflow **`.gitea/workflows/deploy.yml`** dispara automaticamente:
|
Ao fazer `git push` na branch `main`, o workflow executa no runner da VM de produção:
|
||||||
|
|
||||||
1. **Builda** imagem Docker (`wifi-etl:<commit-sha>`)
|
1. Atualiza o código em `/opt/wifi-etl`
|
||||||
2. **Salva** como artifact (backup)
|
2. Copia o `.env` seguro
|
||||||
3. **Deploy via SSH** no servidor de produção configurado
|
3. Rebuilda o container (`docker-compose`)
|
||||||
|
4. Sobe o serviço automaticamente
|
||||||
|
|
||||||
#### Configurar Secrets no Gitea
|
> ⚠️ O deploy roda diretamente na VM (self-hosted runner)
|
||||||
|
|
||||||
Acesse **Settings → Secrets** do repositório e adicione:
|
|
||||||
|
|
||||||
| Nome | Descrição |
|
### ⏱️ Agendamento (Cron)
|
||||||
|---|---|
|
|
||||||
| `SSH_PRIVATE_KEY` | Chave privada SSH para acesso ao servidor |
|
O ETL é executado a cada 5 minutos via cron dentro do container:
|
||||||
| `SSH_HOST` | IP/hostname do servidor prod (ex: `etl.prod.example.com`) |
|
|
||||||
| `SSH_USER` | Usuário SSH (ex: `deploy`) |
|
```bash
|
||||||
| `REGISTRY` | (opcional) Registry Docker (ex: `ghcr.io/seu-user`) |
|
*/5 * * * * PYTHONPATH=/app /usr/local/bin/python -m app.main >> /var/log/wifi-etl.log 2>&1
|
||||||
| `REGISTRY_USERNAME` | (opcional) Username do registry |
|
|
||||||
| `REGISTRY_PASSWORD` | (opcional) Token/Password do registry |
|
```
|
||||||
|
⚠️ Importante: o PYTHONPATH=/app é necessário para o cron encontrar os módulos Python.
|
||||||
|
|
||||||
#### Variáveis de Ambiente no Servidor
|
#### Variáveis de Ambiente no Servidor
|
||||||
|
|
||||||
@ -216,6 +212,7 @@ mkdir -p /opt/wifi-etl
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
### 6. Consultas Úteis
|
### 6. Consultas Úteis
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
@ -243,6 +240,21 @@ WHERE online_time::date = CURRENT_DATE - 1;
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 📈 Observabilidade
|
||||||
|
|
||||||
|
Logs do ETL podem ser consultados via:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker exec wifi_etl_worker tail -f /var/log/wifi-etl.log
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Para ver status do container:
|
||||||
|
``` bash
|
||||||
|
docker ps
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## 📊 Modelo de Dados
|
## 📊 Modelo de Dados
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -302,6 +314,7 @@ watermarks
|
|||||||
- [x] Docker + cron
|
- [x] Docker + cron
|
||||||
- [x] CI/CD (push → deploy)
|
- [x] CI/CD (push → deploy)
|
||||||
- [ ] Retry com backoff nas APIs
|
- [ ] Retry com backoff nas APIs
|
||||||
|
- [ ] Automação de envio de erros para equipe
|
||||||
- [ ] Testes unitários (pytest)
|
- [ ] Testes unitários (pytest)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@ -3,4 +3,4 @@
|
|||||||
# Fuso horário: UTC (ajustar se necessário)
|
# Fuso horário: UTC (ajustar se necessário)
|
||||||
|
|
||||||
# A cada 5 minutos: executa o ETL
|
# A cada 5 minutos: executa o ETL
|
||||||
*/5 * * * * /usr/local/bin/python -m app.main >> /var/log/wifi-etl.log 2>&1
|
*/5 * * * * PYTHONPATH=/app /usr/local/bin/python -m app.main >> /var/log/wifi-etl.log 2>&1
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user