Adiciona estrutura inicial do projeto NestJS com Docker, incluindo Dockerfile, docker-compose, scripts de deploy e configuração do Nginx.
This commit is contained in:
115
scripts/deploy.sh
Normal file
115
scripts/deploy.sh
Normal file
@@ -0,0 +1,115 @@
|
||||
#!/bin/bash
|
||||
# deploy.sh — deploya um projeto ou todos
|
||||
# Uso dentro do container:
|
||||
# /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"
|
||||
|
||||
# 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
|
||||
# Deploya projeto específico
|
||||
# Descobre qual porta estava reservada ou pega a próxima livre
|
||||
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
|
||||
# Deploya todos os projetos
|
||||
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
|
||||
|
||||
# Recarrega nginx
|
||||
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 "================================================"
|
||||
Reference in New Issue
Block a user