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:
Milton Gonzalez
2026-09-22 12:18:12 -05:00
parent 43fef6048e
commit fa4ddbe164
15 changed files with 249 additions and 12 deletions
+35
View File
@@ -209,6 +209,41 @@ curl -o /dev/null -w "%{http_code}\n" http://127.0.0.1:5196/
curl https://project.linkedcorp.net/api/auth/login -X POST -H 'Content-Type: application/json' -d '{...}'
```
### 12.5 Habilitar el botón "Actualizar" (auto-actualización, opcional)
Por defecto el panel Configuración → Actualizaciones solo informa. Para que el botón
"Actualizar" aplique el cambio solo (backup + git pull + migraciones + build + restart), hace
falta en el servidor:
```bash
# 1. sudo (si no esta instalado) y permiso acotado para el usuario deploy — SOLO reiniciar
# estos dos servicios puntuales, nada mas.
sudo apt-get install -y sudo # si el servidor no lo trae (ej. instalaciones minimas de Debian)
echo 'deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart <backend-service>, /usr/bin/systemctl restart <frontend-service>' \
| sudo tee /etc/sudoers.d/deploy-update-<dominio>
sudo visudo -c # valida sintaxis antes de confiar en el archivo
# 2. copiar el script fuera de source/ (donde vive el runtime, no el checkout de git)
mkdir -p /opt/apps/<dominio>/scripts
cp /opt/apps/<dominio>/source/scripts/apply-update.sh /opt/apps/<dominio>/scripts/
chmod +x /opt/apps/<dominio>/scripts/apply-update.sh
# 3. agregar al backend/.env (el de runtime, NO el de source/backend)
cat >> /opt/apps/<dominio>/backend/.env <<EOF
UPDATE_APP_DIR=/opt/apps/<dominio>
UPDATE_BACKEND_SERVICE=<backend-service>
UPDATE_FRONTEND_SERVICE=<frontend-service>
EOF
sudo systemctl restart <backend-service>
```
Importante: el script (`scripts/apply-update.sh`) hace `git reset --hard` sobre `source/`
mientras corre — por eso tiene que ejecutarse SIEMPRE desde la copia en
`$UPDATE_APP_DIR/scripts/`, nunca desde dentro de `source/scripts/` directamente. Cada vez que
el script cambie en un release, hay que repetir el paso 2 (copiarlo de nuevo) en un deploy
manual — el propio update automático no se autoactualiza a sí mismo.
### 13. Limpiar archivos `.md` del source
```bash