feat: agregar agente docker para containerización
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.
This commit is contained in:
Executable
+115
@@ -0,0 +1,115 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user