77 lines
2.3 KiB
Bash
77 lines
2.3 KiB
Bash
#!/bin/bash
|
|
# start.sh — entrypoint do container
|
|
# Roda ao iniciar/resetar o container
|
|
|
|
PROJECTS_DIR="${PROJECTS_DIR:-/home/deploy/projects}"
|
|
BASE_PORT="${BASE_PORT:-3000}"
|
|
|
|
echo "================================================"
|
|
echo " NestJS Stack — Iniciando..."
|
|
echo "================================================"
|
|
|
|
# Garante que a pasta de projetos existe
|
|
mkdir -p "$PROJECTS_DIR"
|
|
mkdir -p /etc/nginx/sites-dynamic
|
|
|
|
# Limpa configs antigas do nginx (container pode ter sido resetado)
|
|
rm -f /etc/nginx/sites-dynamic/*.conf
|
|
|
|
# Inicia nginx
|
|
echo "→ Iniciando Nginx..."
|
|
nginx -t && nginx
|
|
echo "✓ Nginx rodando"
|
|
|
|
# Se houver projetos com build existente, sobe eles via PM2
|
|
echo "→ Verificando projetos existentes..."
|
|
port_index=1
|
|
|
|
for project_dir in "$PROJECTS_DIR"/*/; do
|
|
[ -d "$project_dir" ] || continue
|
|
project=$(basename "$project_dir")
|
|
port=$((BASE_PORT + port_index))
|
|
|
|
# Só sobe se já tiver build
|
|
if [ -f "$project_dir/dist/main.js" ]; then
|
|
echo " → Subindo $project na porta $port"
|
|
|
|
pm2 start "$project_dir/dist/main.js" \
|
|
--name "$project" \
|
|
--env production \
|
|
-- --port "$port" 2>/dev/null
|
|
|
|
# Gera config nginx para esse projeto
|
|
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 "$port" > "$project_dir/.port"
|
|
else
|
|
echo " ⚠ $project sem build — rode: docker exec nestjs-stack /home/deploy/scripts/deploy.sh $project"
|
|
fi
|
|
|
|
port_index=$((port_index + 1))
|
|
done
|
|
|
|
# Recarrega nginx com as configs dos projetos
|
|
nginx -s reload 2>/dev/null || true
|
|
echo "✓ Nginx atualizado com rotas dos projetos"
|
|
|
|
pm2 save 2>/dev/null || true
|
|
|
|
echo ""
|
|
echo "================================================"
|
|
echo " Stack pronta!"
|
|
echo " Acesse: http://\${DOMAIN:-localhost}/<projeto>"
|
|
echo "================================================"
|
|
|
|
# Mantém o container vivo e faz log do PM2
|
|
pm2 logs --raw
|