Files
docker-nest-js/scripts/deploy.sh

117 lines
3.1 KiB
Bash

#!/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"
# Mantém .env existente
if [ -f "$project_dir/.env" ]; then
echo " → .env encontrado, mantendo..."
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"
else
echo " → Criando processo PM2..."
pm2 start dist/main.js \
--name "$project" \
--env production \
-- --port "$port"
fi
# Gera/atualiza config nginx
cat > "/etc/nginx/sites-dynamic/${project}.conf" <<EOF
location /${project}/ {
proxy_pass http://localhost:${port}/;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_cache_bypass \$http_upgrade;
}
EOF
echo "$project deployado em /$project"
}
# -------------------------------------------
# Lógica principal
# -------------------------------------------
if [ -n "$TARGET" ]; then
port_index=1
for d in "$PROJECTS_DIR"/*/; do
[ -d "$d" ] || continue
name=$(basename "$d")
if [ "$name" = "$TARGET" ]; then
break
fi
port_index=$((port_index + 1))
done
port=$((BASE_PORT + port_index))
deploy_project "$TARGET" "$port"
else
port_index=1
for project_dir in "$PROJECTS_DIR"/*/; do
[ -d "$project_dir" ] || continue
project=$(basename "$project_dir")
port=$((BASE_PORT + port_index))
deploy_project "$project" "$port"
port_index=$((port_index + 1))
done
fi
echo ""
echo "→ Recarregando Nginx..."
nginx -s reload
pm2 save
echo ""
echo "================================================"
echo " Deploy concluído!"
for project_dir in "$PROJECTS_DIR"/*/; do
[ -d "$project_dir" ] || continue
project=$(basename "$project_dir")
port=$(cat "$project_dir/.port" 2>/dev/null || echo "?")
echo " ✓ /$project → localhost:$port"
done
echo "================================================"