#!/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"