8f7dbcf196
Nuevo agente para generar Dockerfiles y docker-compose. Incluye templates para Go, React/Vite, y stacks fullstack. Soporta desarrollo con hot reload y producción optimizada.
116 lines
3.0 KiB
Bash
Executable File
116 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Script de deploy para servidor remoto
|
|
# Uso: ./deploy.sh [production|staging]
|
|
|
|
set -e
|
|
|
|
# ============================================
|
|
# CONFIGURACIÓN
|
|
# ============================================
|
|
ENV=${1:-production}
|
|
REGISTRY="${REGISTRY:-ghcr.io}"
|
|
PROJECT="${PROJECT:-myapp}"
|
|
VERSION="${VERSION:-latest}"
|
|
|
|
# Servidor remoto
|
|
REMOTE_USER="${REMOTE_USER:-deploy}"
|
|
REMOTE_HOST="${REMOTE_HOST:-server.example.com}"
|
|
REMOTE_PATH="${REMOTE_PATH:-/opt/$PROJECT}"
|
|
|
|
# Colores
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
log() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
|
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; }
|
|
|
|
# ============================================
|
|
# VALIDACIONES
|
|
# ============================================
|
|
log "Validando configuración..."
|
|
|
|
if ! command -v docker &> /dev/null; then
|
|
error "Docker no está instalado"
|
|
fi
|
|
|
|
if [ -z "$REMOTE_HOST" ] || [ "$REMOTE_HOST" = "server.example.com" ]; then
|
|
error "Configura REMOTE_HOST antes de ejecutar"
|
|
fi
|
|
|
|
# ============================================
|
|
# BUILD
|
|
# ============================================
|
|
log "Building imágenes para $ENV..."
|
|
|
|
# Build con buildkit para mejor cache
|
|
export DOCKER_BUILDKIT=1
|
|
|
|
docker build -t $REGISTRY/$PROJECT-frontend:$VERSION ./frontend
|
|
docker build -t $REGISTRY/$PROJECT-backend:$VERSION ./backend
|
|
|
|
log "Imágenes construidas:"
|
|
docker images | grep $PROJECT
|
|
|
|
# ============================================
|
|
# PUSH A REGISTRY
|
|
# ============================================
|
|
log "Pushing imágenes a $REGISTRY..."
|
|
|
|
docker push $REGISTRY/$PROJECT-frontend:$VERSION
|
|
docker push $REGISTRY/$PROJECT-backend:$VERSION
|
|
|
|
log "Imágenes subidas correctamente"
|
|
|
|
# ============================================
|
|
# DEPLOY A SERVIDOR
|
|
# ============================================
|
|
log "Desplegando a $REMOTE_HOST..."
|
|
|
|
# Copiar docker-compose si no existe
|
|
ssh $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_PATH"
|
|
scp docker-compose.yml $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/
|
|
|
|
# Copiar .env si existe
|
|
if [ -f ".env.$ENV" ]; then
|
|
scp .env.$ENV $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/.env
|
|
fi
|
|
|
|
# Deploy remoto
|
|
ssh $REMOTE_USER@$REMOTE_HOST << EOF
|
|
cd $REMOTE_PATH
|
|
|
|
# Pull nuevas imágenes
|
|
docker compose pull
|
|
|
|
# Restart servicios
|
|
docker compose up -d --remove-orphans
|
|
|
|
# Limpiar imágenes antiguas
|
|
docker image prune -f
|
|
|
|
# Verificar estado
|
|
docker compose ps
|
|
EOF
|
|
|
|
# ============================================
|
|
# VERIFICACIÓN
|
|
# ============================================
|
|
log "Verificando deploy..."
|
|
|
|
sleep 5
|
|
|
|
# Healthcheck
|
|
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://$REMOTE_HOST/health || echo "000")
|
|
|
|
if [ "$HTTP_STATUS" = "200" ]; then
|
|
log "Deploy exitoso! Servidor respondiendo correctamente."
|
|
else
|
|
warn "Servidor respondió con código: $HTTP_STATUS"
|
|
warn "Verifica los logs: ssh $REMOTE_USER@$REMOTE_HOST 'docker compose -f $REMOTE_PATH/docker-compose.yml logs'"
|
|
fi
|
|
|
|
log "Deploy completado para $ENV"
|