Atualiza o docker-compose.yml para adicionar volumes persistentes e modifica o start.sh para melhorar a configuração do Nginx e gerenciamento de projetos.

This commit is contained in:
2026-04-18 12:25:39 -05:00
parent 5f715e1a61
commit 9cc146348f
2 changed files with 23 additions and 22 deletions

View File

@@ -11,6 +11,8 @@ services:
- "3451:80" - "3451:80"
volumes: volumes:
- /home/deploy/projects:/home/deploy/projects - /home/deploy/projects:/home/deploy/projects
- /home/deploy/nginx-dynamic:/etc/nginx/sites-dynamic # ← persiste configs nginx
- /home/deploy/pm2:/root/.pm2 # ← persiste estado do PM2
environment: environment:
- PROJECTS_DIR=/home/deploy/projects - PROJECTS_DIR=/home/deploy/projects
- BASE_PORT=3000 - BASE_PORT=3000

View File

@@ -1,7 +1,4 @@
#!/bin/bash #!/bin/bash
# start.sh — entrypoint do container
# Roda ao iniciar/resetar o container
PROJECTS_DIR="${PROJECTS_DIR:-/home/deploy/projects}" PROJECTS_DIR="${PROJECTS_DIR:-/home/deploy/projects}"
BASE_PORT="${BASE_PORT:-3000}" BASE_PORT="${BASE_PORT:-3000}"
@@ -9,19 +6,14 @@ echo "================================================"
echo " NestJS Stack — Iniciando..." echo " NestJS Stack — Iniciando..."
echo "================================================" echo "================================================"
# Garante que a pasta de projetos existe
mkdir -p "$PROJECTS_DIR" mkdir -p "$PROJECTS_DIR"
mkdir -p /etc/nginx/sites-dynamic 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 # Inicia nginx
echo "→ Iniciando Nginx..." echo "→ Iniciando Nginx..."
nginx -t && nginx nginx -t && nginx
echo "✓ Nginx rodando" echo "✓ Nginx rodando"
# Se houver projetos com build existente, sobe eles via PM2
echo "→ Verificando projetos existentes..." echo "→ Verificando projetos existentes..."
port_index=1 port_index=1
@@ -30,17 +22,16 @@ for project_dir in "$PROJECTS_DIR"/*/; do
project=$(basename "$project_dir") project=$(basename "$project_dir")
port=$((BASE_PORT + port_index)) port=$((BASE_PORT + port_index))
# Só sobe se já tiver build
if [ -f "$project_dir/dist/main.js" ]; then if [ -f "$project_dir/dist/main.js" ]; then
echo " → Subindo $project na porta $port" echo " → Subindo $project na porta $port"
pm2 start "$project_dir/dist/main.js" \ # Salva porta
--name "$project" \ echo "$port" > "$project_dir/.port"
--env production \
-- --port "$port" 2>/dev/null
# Gera config nginx para esse projeto # Recria config nginx SE não existir
cat > "/etc/nginx/sites-dynamic/${project}.conf" <<EOF if [ ! -f "/etc/nginx/sites-dynamic/${project}.conf" ]; then
echo " → Recriando config nginx para $project"
cat > "/etc/nginx/sites-dynamic/${project}.conf" <<EOF
location /${project}/ { location /${project}/ {
proxy_pass http://localhost:${port}/; proxy_pass http://localhost:${port}/;
proxy_http_version 1.1; proxy_http_version 1.1;
@@ -52,25 +43,33 @@ location /${project}/ {
proxy_cache_bypass \$http_upgrade; proxy_cache_bypass \$http_upgrade;
} }
EOF EOF
echo "$port" > "$project_dir/.port" fi
# Sobe no PM2 se não estiver rodando
if ! pm2 describe "$project" > /dev/null 2>&1; then
pm2 start "$project_dir/dist/main.js" \
--name "$project" \
--env production \
-- --port "$port"
else
pm2 restart "$project"
fi
else else
echo "$project sem build — rode: docker exec nestjs-stack /home/deploy/scripts/deploy.sh $project" echo "$project sem build — rode: ./host-deploy.sh $project"
fi fi
port_index=$((port_index + 1)) port_index=$((port_index + 1))
done done
# Recarrega nginx com as configs dos projetos
nginx -s reload 2>/dev/null || true nginx -s reload 2>/dev/null || true
echo "✓ Nginx atualizado com rotas dos projetos" echo "✓ Nginx atualizado"
pm2 save 2>/dev/null || true pm2 save 2>/dev/null || true
echo "" echo ""
echo "================================================" echo "================================================"
echo " Stack pronta!" echo " Stack pronta!"
echo " Acesse: http://\${DOMAIN:-localhost}/<projeto>" echo " Acesse: http://${DOMAIN:-localhost}/<projeto>"
echo "================================================" echo "================================================"
# Mantém o container vivo e faz log do PM2 pm2 logs --raw
pm2 logs --raw