agendapro/deploy.sh

92 lines
3.2 KiB
Bash

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