#!/bin/bash # ================================================================ # AgendaPRO — Deploy Script para Docker Swarm via SSH # Uso: ./deploy.sh [user@host] [dominio-app] [dominio-admin] # Ex: ./deploy.sh root@vps.meusite.com app.agendapro.com.br admin.agendapro.com.br # ================================================================ set -e SSH_TARGET=${1:-"root@your-server.com"} APP_DOMAIN=${2:-"app.agendapro.com.br"} ADMIN_DOMAIN=${3:-"admin.agendapro.com.br"} STACK_NAME="agendapro" echo "🚀 AgendaPRO — Deploy para Docker Swarm" echo "==========================================" echo " Servidor: $SSH_TARGET" echo " App URL: https://$APP_DOMAIN" echo " Admin URL: https://$ADMIN_DOMAIN" echo "==========================================" # 1. Build das imagens echo "" echo "📦 [1/6] Construindo imagens Docker..." docker build -t agendapro-app:latest . docker build -t agendapro-admin:latest ./admin # 2. Salvar imagens para transferência echo "" echo "💾 [2/6] Exportando imagens..." docker save agendapro-app:latest | gzip > /tmp/agendapro-app.tar.gz docker save agendapro-admin:latest | gzip > /tmp/agendapro-admin.tar.gz # 3. Transferir via SSH echo "" echo "📤 [3/6] Transferindo para o servidor..." scp /tmp/agendapro-app.tar.gz $SSH_TARGET:/tmp/ scp /tmp/agendapro-admin.tar.gz $SSH_TARGET:/tmp/ scp docker-compose.yml $SSH_TARGET:/opt/agendapro/ scp database/init.sql $SSH_TARGET:/opt/agendapro/database/ # 4. Carregar imagens no servidor echo "" echo "📥 [4/6] Carregando imagens no servidor..." ssh $SSH_TARGET "docker load < /tmp/agendapro-app.tar.gz && docker load < /tmp/agendapro-admin.tar.gz" # 5. Criar secrets (se não existirem) echo "" echo "🔐 [5/6] Verificando Docker Secrets..." ssh $SSH_TARGET " docker swarm init 2>/dev/null || true docker network create --driver overlay webproxy 2>/dev/null || true if ! docker secret inspect db_password > /dev/null 2>&1; then echo \$(openssl rand -base64 32) | docker secret create db_password - echo ' ✓ Secret db_password criado' fi if ! docker secret inspect jwt_secret > /dev/null 2>&1; then echo \$(openssl rand -base64 64) | docker secret create jwt_secret - echo ' ✓ Secret jwt_secret criado' fi if ! docker secret inspect admin_secret > /dev/null 2>&1; then echo \$(openssl rand -base64 64) | docker secret create admin_secret - echo ' ✓ Secret admin_secret criado' fi " # 6. Deploy da stack echo "" echo "🚀 [6/6] Fazendo deploy da stack..." ssh $SSH_TARGET " cd /opt/agendapro # Substituir domínios no compose sed -i 's/app.agendapro.com.br/$APP_DOMAIN/g' docker-compose.yml sed -i 's/admin.agendapro.com.br/$ADMIN_DOMAIN/g' docker-compose.yml docker stack deploy -c docker-compose.yml $STACK_NAME " echo "" echo "✅ Deploy concluído com sucesso!" echo "" echo " 🌐 AgendaPRO App: https://$APP_DOMAIN" echo " 🔧 Admin Panel: https://$ADMIN_DOMAIN" echo " 📊 Traefik Dashboard: https://traefik.$APP_DOMAIN" echo "" echo " Comandos úteis:" echo " ssh $SSH_TARGET 'docker service ls'" echo " ssh $SSH_TARGET 'docker service logs ${STACK_NAME}_agendapro'" echo " ssh $SSH_TARGET 'docker service logs ${STACK_NAME}_admin'" echo ""