wifi-etl/deploy.sh
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

89 lines
2.5 KiB
Bash

#!/bin/bash
# WiFi ETL — Deploy Script (Production)
# Uso: ./deploy.sh [prod|staging]
# Exemplo: ./deploy.sh prod
set -e
ENV_FILE=".env"
IMAGE_NAME="wifi-etl"
CONTAINER_NAME="wifi-etl-worker"
NETWORK_NAME="wifi-etl-net"
# Carrega .env
if [ -f "$ENV_FILE" ]; then
export $(grep -v '^#' "$ENV_FILE" | xargs)
else
echo "❌ Arquivo $ENV_FILE não encontrado."
exit 1
fi
TARGET=${1:-prod}
if [ "$TARGET" != "prod" ] && [ "$TARGET" != "staging" ]; then
echo "Uso: $0 [prod|staging]"
exit 1
fi
echo "=== Deploy para $TARGET ==="
# --- 1) Build local ---
echo "→ Buildando imagem Docker..."
docker build -f infra/Dockerfile -t ${IMAGE_NAME}:latest .
# --- 2) Push para registry (opcional) ---
if [ -n "$REGISTRY" ]; then
echo "→ Tagging & push para $REGISTRY..."
docker tag ${IMAGE_NAME}:latest ${REGISTRY}/${IMAGE_NAME}:latest
docker push ${REGISTRY}/${IMAGE_NAME}:latest
fi
# --- 3) Envia imagem ao servidor ---
echo "→ Enviando imagem ao servidor $SSH_HOST..."
docker save ${IMAGE_NAME}:latest -o /tmp/wifi-etl-image.tar
scp -i "$SSH_PRIVATE_KEY" \
-o StrictHostKeyChecking=no \
/tmp/wifi-etl-image.tar ${SSH_USER}@${SSH_HOST}:/tmp/
# --- 4) Deploy remoto ---
ssh -i "$SSH_PRIVATE_KEY" \
-o StrictHostKeyChecking=no \
${SSH_USER}@${SSH_HOST} << EOF
set -e
echo " → Carregando imagem no servidor..."
docker load -i /tmp/wifi-etl-image.tar
echo " → Criando network..."
docker network create ${NETWORK_NAME} 2>/dev/null || true
echo " → Parando container anterior..."
docker stop ${CONTAINER_NAME} 2>/dev/null || true
docker rm ${CONTAINER_NAME} 2>/dev/null || true
echo " → Iniciando novo container..."
docker run -d \
--name ${CONTAINER_NAME} \
--network ${NETWORK_NAME} \
-e DB_HOST="${DB_HOST}" \
-e DB_PORT="${DB_PORT:-5432}" \
-e DB_NAME="${DB_NAME:-wifi_etl}" \
-e DB_USER="${DB_USER:-postgres}" \
-e DB_PASSWORD="${DB_PASSWORD}" \
-e RUIJIE_BASE_URL="${RUIJIE_BASE_URL}" \
-e RUIJIE_APPID="${RUIJIE_APPID}" \
-e RUIJIE_SECRET="${RUIJIE_SECRET}" \
-e RUIJIE_ACCESS_TOKEN="${RUIJIE_ACCESS_TOKEN}" \
-e RUIJIE_GROUP_ID="${RUIJIE_GROUP_ID:-9290679}" \
-e WIFEED_BASE_URL="${WIFEED_BASE_URL}" \
-e WIFEED_CLIENT_ID="${WIFEED_CLIENT_ID}" \
-e WIFEED_CLIENT_SECRET="${WIFEED_CLIENT_SECRET}" \
-e LOG_LEVEL="${LOG_LEVEL:-INFO}" \
${IMAGE_NAME}:latest
echo "✅ Deploy OK — Container: \$(docker ps -qf name=${CONTAINER_NAME})"
EOF
rm -f /tmp/wifi-etl-image.tar
echo "✅ Deploy concluído em $TARGET"