92 lines
3.2 KiB
Bash
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 ""
|