Actualización automática
Crow incluye un actualizador automático integrado que busca nuevas versiones, descarga los cambios y reinicia el gateway. No se requieren comandos manuales de SSH ni de git.
Cómo funciona
El actualizador automático se ejecuta como una tarea en segundo plano dentro del proceso del gateway:
- Fetch — ejecuta
git fetch origin mainpara buscar nuevos commits - Stash — si hay cambios locales (archivos modificados, trabajo sin commitear), los guarda automáticamente en un stash
- Pull — ejecuta
git pull --ff-only origin main(solo fast-forward, sin commits de merge) - Dependencias — ejecuta
npm installsipackage.jsonopackage-lock.jsoncambiaron - Migraciones — ejecuta
node scripts/init-db.jspara cualquier cambio de esquema - Restauración — aplica el stash para restaurar los cambios locales. Si hay conflictos, restaura un estado limpio y registra una advertencia
- Reinicio — cierra el servidor HTTP de forma ordenada y sale para que systemd reinicie el proceso
Configuración
| Ajuste | Predeterminado | Descripción |
|---|---|---|
| Actualización automática habilitada | Sí | Se activa en Settings > Updates |
| Intervalo de comprobación | 6 horas | Con qué frecuencia se buscan nuevas versiones |
Página de configuración
Ve a Settings > Updates en el Crow's Nest para:
- Habilitar o deshabilitar la actualización automática
- Ver la versión actual (hash del commit de git)
- Ver cuándo se ejecutó la última comprobación y qué encontró
- Disparar manualmente una comprobación de actualización
Árbol de trabajo sucio
Si tu instancia tiene modificaciones locales (algo común en máquinas de desarrollo o después de ediciones manuales de configuración), el actualizador automático las maneja con cuidado:
- Antes de hacer pull, ejecuta
git stash --include-untrackedpara guardar todos los cambios locales - Cuando la actualización termina, ejecuta
git stash poppara restaurarlos - Si la restauración tiene conflictos de merge, el actualizador:
- Ejecuta
git checkout -- .para volver a un estado limpio posterior a la actualización - Registra una advertencia con instrucciones para recuperar los cambios manualmente
- Tus cambios quedan preservados en
git stash listy pueden recuperarse congit stash pop
- Ejecuta
Esto significa que el gateway siempre se reinicia con código fuente válido, incluso si tus cambios locales entran en conflicto con la actualización.
Reinicio ordenado
Cuando el actualizador automático (o la instalación de un bundle) dispara un reinicio:
- Emite un evento
crow:shutdownpara cerrar el socket de escucha del servidor HTTP - Espera 1 segundo a que el socket se libere
- Sale con código 1 para que el
Restart=on-failurede systemd levante el servicio de nuevo
Esto evita el típico error EADDRINUSE, donde el proceso nuevo arranca antes de que el viejo haya liberado el puerto.
Actualización manual
Si prefieres actualizar manualmente:
cd ~/crow
git pull origin main
npm install
npm run init-db
sudo systemctl restart crow-gatewayO dispara una comprobación única desde la página de Settings sin habilitar las comprobaciones automáticas.
Reversión
Si una actualización causa problemas:
cd ~/crow
git log --oneline -5 # Encontrar el commit anterior
git checkout <commit-hash> # Revertir
sudo systemctl restart crow-gatewayEl actualizador automático solo usa pulls fast-forward, así que git reflog siempre conserva el estado anterior.
Registros
La actividad de actualización se registra en el stdout del gateway (visible con journalctl -u crow-gateway):
[auto-update] Enabled — checking every 6h
[auto-update] 3 new commit(s) available. Updating...
[auto-update] Dependencies changed — running npm install...
[auto-update] Running database migrations...
[auto-update] Local changes stashed and restored successfully.
[auto-update] Updated: c29e19c → 9d18049
[auto-update] Restarting gateway via systemd...Los resultados de las actualizaciones también se guardan en la base de datos y son visibles en Settings > Updates.