#!/bin/bash # deploy.sh — deploya um projeto ou todos (roda DENTRO do container) # Uso: # /home/deploy/scripts/deploy.sh → deploya todos # /home/deploy/scripts/deploy.sh meu-projeto → deploya só um PROJECTS_DIR="${PROJECTS_DIR:-/home/deploy/projects}" BASE_PORT="${BASE_PORT:-3000}" TARGET="${1:-}" deploy_project() { local project="$1" local port="$2" local project_dir="$PROJECTS_DIR/$project" echo "" echo ">>> Deployando: $project → porta $port" if [ ! -d "$project_dir" ]; then echo "✗ Pasta $project_dir não encontrada" return 1 fi cd "$project_dir" # Carrega o .env do projeto if [ -f "$project_dir/.env" ]; then echo " → .env encontrado, carregando..." set -a source "$project_dir/.env" set +a fi # Instala dependências echo " → npm install..." npm install --prefer-offline 2>&1 | tail -3 # Build echo " → npm run build..." npm run build if [ $? -ne 0 ]; then echo " ✗ Build falhou para $project" return 1 fi # Salva a porta usada echo "$port" > "$project_dir/.port" # PM2: reinicia se já existe, senão cria if pm2 describe "$project" > /dev/null 2>&1; then echo " → Reiniciando processo PM2..." pm2 restart "$project" --update-env else echo " → Criando processo PM2..." pm2 start dist/main.js \ --name "$project" \ -- --port "$port" fi # Gera/atualiza config nginx cat > "/etc/nginx/sites-dynamic/${project}.conf" </dev/null || echo "?") echo " ✓ /$project → localhost:$port" done echo "================================================"