feat: version 2.2.0 -- boton real de actualizacion (auto-update)
POST /api/updater/apply dispara scripts/apply-update.sh (backup + git pull + migraciones + build + restart) en un proceso separado. Apagado por defecto: solo se activa si el servidor define UPDATE_APP_DIR/UPDATE_BACKEND_SERVICE/UPDATE_FRONTEND_SERVICE en su backend/.env. Sin esa config, el panel se comporta igual que antes. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Executable
+58
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env bash
|
||||
# Ejecuta el update real: lo dispara el backend (POST /api/updater/apply) via un proceso
|
||||
# separado y detached, nunca corre inline en el request HTTP (el propio backend se reinicia
|
||||
# al final).
|
||||
#
|
||||
# IMPORTANTE: este script se ejecuta desde una copia FUERA de source/ (normalmente
|
||||
# $APP_DIR/scripts/apply-update.sh) — nunca desde dentro de source/, porque el propio script
|
||||
# hace `git reset --hard` sobre source/ mientras corre. Si se ejecutara desde ahi, se
|
||||
# sobreescribiria a si mismo a mitad de ejecucion (comportamiento indefinido en bash).
|
||||
#
|
||||
# Variables requeridas en el entorno (via EnvironmentFile del backend, ya cargadas por el
|
||||
# proceso Node que invoca este script):
|
||||
# APP_DIR ej. /opt/apps/project.exilaser.net
|
||||
# BACKEND_SERVICE ej. project-exilaser-backend
|
||||
# FRONTEND_SERVICE ej. project-exilaser-frontend
|
||||
# DB_HOST / DB_USER / DB_PASSWORD / DB_NAME (ya vienen del .env del backend)
|
||||
set -euo pipefail
|
||||
|
||||
: "${APP_DIR:?falta APP_DIR}"
|
||||
: "${BACKEND_SERVICE:?falta BACKEND_SERVICE}"
|
||||
: "${FRONTEND_SERVICE:?falta FRONTEND_SERVICE}"
|
||||
|
||||
LOG="$APP_DIR/logs/update.log"
|
||||
mkdir -p "$APP_DIR/logs" "$APP_DIR/backups"
|
||||
exec >>"$LOG" 2>&1
|
||||
|
||||
echo ""
|
||||
echo "=== update start $(date -Iseconds) ==="
|
||||
|
||||
echo "-- backup de base de datos --"
|
||||
mysqldump --single-transaction -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" \
|
||||
> "$APP_DIR/backups/pre_update_$(date +%Y%m%d_%H%M%S).sql"
|
||||
|
||||
echo "-- git fetch + reset --"
|
||||
cd "$APP_DIR/source"
|
||||
git fetch origin main
|
||||
git reset --hard origin/main
|
||||
NEW_VERSION="$(cat VERSION)"
|
||||
echo "version objetivo: $NEW_VERSION"
|
||||
|
||||
echo "-- backend: npm install + migraciones --"
|
||||
cd "$APP_DIR/source/backend"
|
||||
npm install --omit=dev
|
||||
node src/scripts/migrate-db.js
|
||||
|
||||
echo "-- frontend: npm install + build --"
|
||||
cd "$APP_DIR/source/frontend"
|
||||
npm install
|
||||
npm run build
|
||||
|
||||
echo "-- publicando build de frontend --"
|
||||
rm -rf "$APP_DIR/frontend/dist"
|
||||
cp -r dist "$APP_DIR/frontend/dist"
|
||||
|
||||
echo "-- reiniciando servicios --"
|
||||
sudo systemctl restart "$BACKEND_SERVICE" "$FRONTEND_SERVICE"
|
||||
|
||||
echo "=== update done $(date -Iseconds) -- v$NEW_VERSION ==="
|
||||
Reference in New Issue
Block a user