Atualiza scripts e configurações do projeto para melhorar o gerenciamento de projetos e a estrutura do repositório

This commit is contained in:
2026-04-18 14:45:51 -05:00
parent 9cc146348f
commit 163b89aca5
11 changed files with 304 additions and 93 deletions

View File

@@ -1,6 +1,6 @@
#!/bin/bash
# deploy.sh — deploya um projeto ou todos
# Uso dentro do container:
# 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
@@ -23,6 +23,11 @@ deploy_project() {
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
@@ -72,8 +77,6 @@ EOF
# -------------------------------------------
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
@@ -86,7 +89,6 @@ if [ -n "$TARGET" ]; then
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
@@ -97,7 +99,6 @@ else
done
fi
# Recarrega nginx
echo ""
echo "→ Recarregando Nginx..."
nginx -s reload

14
scripts/hot-deploy.sh Normal file
View File

@@ -0,0 +1,14 @@
#!/bin/bash
# host-deploy.sh — rode isso NO HOST para deployar um projeto
# Uso: ./host-deploy.sh meu-projeto
# Ou: ./host-deploy.sh (deploya todos)
TARGET="${1:-}"
if [ -n "$TARGET" ]; then
echo ">>> Deployando $TARGET via container..."
docker exec nestjs-stack /home/deploy/scripts/deploy.sh "$TARGET"
else
echo ">>> Deployando todos os projetos via container..."
docker exec nestjs-stack /home/deploy/scripts/deploy.sh
fi

55
scripts/hot-remove.sh Normal file
View File

@@ -0,0 +1,55 @@
#!/bin/bash
# host-remove.sh — remove um projeto completamente
# Uso: ./host-remove.sh meu-projeto
# Uso: ./host-remove.sh meu-projeto --keep-files (mantém os arquivos no host)
TARGET="${1:-}"
KEEP_FILES="${2:-}"
PROJECTS_DIR="/home/deploy/projects"
if [ -z "$TARGET" ]; then
echo "❌ Informe o nome do projeto."
echo " Uso: ./host-remove.sh meu-projeto"
echo " Uso: ./host-remove.sh meu-projeto --keep-files"
exit 1
fi
echo "================================================"
echo " Removendo projeto: $TARGET"
echo "================================================"
# 1. Para e remove do PM2
echo "→ Removendo do PM2..."
docker exec nestjs-stack pm2 delete "$TARGET" 2>/dev/null && echo " ✓ PM2 removido" || echo " ⚠ Não estava no PM2"
# 2. Remove config do nginx
echo "→ Removendo config do Nginx..."
docker exec nestjs-stack rm -f "/etc/nginx/sites-dynamic/${TARGET}.conf" && echo " ✓ Config nginx removida"
# 3. Recarrega nginx
echo "→ Recarregando Nginx..."
docker exec nestjs-stack nginx -s reload && echo " ✓ Nginx recarregado"
# 4. Salva estado do PM2
docker exec nestjs-stack pm2 save
# 5. Remove arquivos do host (opcional)
if [ "$KEEP_FILES" = "--keep-files" ]; then
echo " → Arquivos mantidos em $PROJECTS_DIR/$TARGET"
else
if [ -d "$PROJECTS_DIR/$TARGET" ]; then
echo "→ Removendo arquivos do projeto..."
rm -rf "$PROJECTS_DIR/$TARGET"
echo " ✓ Pasta $PROJECTS_DIR/$TARGET removida"
else
echo " ⚠ Pasta $PROJECTS_DIR/$TARGET não encontrada"
fi
fi
echo ""
echo "================================================"
echo " ✓ Projeto $TARGET removido com sucesso!"
if [ "$KEEP_FILES" = "--keep-files" ]; then
echo " Arquivos mantidos em $PROJECTS_DIR/$TARGET"
fi
echo "================================================"

View File

@@ -1,4 +1,7 @@
#!/bin/bash
# start.sh — entrypoint do container
# NÃO apaga projetos nem configs existentes — só sobe o que falta
PROJECTS_DIR="${PROJECTS_DIR:-/home/deploy/projects}"
BASE_PORT="${BASE_PORT:-3000}"
@@ -25,12 +28,11 @@ for project_dir in "$PROJECTS_DIR"/*/; do
if [ -f "$project_dir/dist/main.js" ]; then
echo " → Subindo $project na porta $port"
# Salva porta
echo "$port" > "$project_dir/.port"
# Recria config nginx SE não existir
# Recria config nginx SOMENTE se não existir
if [ ! -f "/etc/nginx/sites-dynamic/${project}.conf" ]; then
echo "Recriando config nginx para $project"
echo "Criando config nginx para $project"
cat > "/etc/nginx/sites-dynamic/${project}.conf" <<EOF
location /${project}/ {
proxy_pass http://localhost:${port}/;
@@ -45,14 +47,14 @@ location /${project}/ {
EOF
fi
# Sobe no PM2 se não estiver rodando
if ! pm2 describe "$project" > /dev/null 2>&1; then
# Sobe no PM2 se não estiver rodando, senão reinicia
if pm2 describe "$project" > /dev/null 2>&1; then
pm2 restart "$project"
else
pm2 start "$project_dir/dist/main.js" \
--name "$project" \
--env production \
-- --port "$port"
else
pm2 restart "$project"
fi
else
echo "$project sem build — rode: ./host-deploy.sh $project"
@@ -62,7 +64,7 @@ EOF
done
nginx -s reload 2>/dev/null || true
echo "✓ Nginx atualizado"
echo "✓ Nginx atualizado com rotas dos projetos"
pm2 save 2>/dev/null || true
@@ -72,4 +74,4 @@ echo " Stack pronta!"
echo " Acesse: http://${DOMAIN:-localhost}/<projeto>"
echo "================================================"
pm2 logs --raw
pm2 logs --raw