3.2 KiB
Juegoland: despliegue nativo
Debian 12 en 192.168.18.155, Node.js 24, PostgreSQL 15 y systemd, sin contenedores.
Acceso
Un único proceso ejecuta SvelteKit, API y Socket.IO en 0.0.0.0:3000. Acceso local: http://192.168.18.155:3000. Tu proxy Nginx existente debe apuntar a http://192.168.18.155:3000, conservando las rutas y Upgrade/Connection para WebSocket.
El origen público es https://juegoland.imaginacion.com. No hay proxy adicional en la VM: Nginx y el antiguo servicio mesa-web quedan deshabilitados. El ejemplo deploy/external-nginx.conf.example pertenece al proxy de la red; no se instala en esta VM.
Las cookies son Secure por el dominio HTTPS. Solo el origen HTTP local explícito permite cookies para pruebas en la LAN. PostgreSQL continúa en 127.0.0.1:5432. La configuración no confía en encabezados de IP enviados por clientes.
Actualizar
Desde PowerShell:
./deploy/deploy-native.ps1 -Release 20261004-04 -Activate
Usa una versión nueva en cada actualización. El script transfiere solo fuentes y recursos; no incluye datos locales ni secretos. Comprueba tipos, pruebas y compilación en Linux antes de activar. La activación guarda configuración y copia de la base antes de migrar, conserva credenciales, cambia current y reinicia mesa-game.
APT fuerza IPv4. npm usa la dirección IPv4 local persistida para el usuario mesa.
Servicios y datos
Servicio mesa-game: Node server/production.mjs, usuario mesa. Base mesa_abierta y rol mesa_app sin privilegios administrativos. Secretos de aplicación y copias en /etc/mesa-abierta/game.env y backup.env, 0640 root:mesa. No se imprimen ni se copian al repositorio. Las partidas y usuarios de desarrollo no se importan.
systemctl is-active mesa-game postgresql mesa-backup.timer
curl -4 --fail http://127.0.0.1:3000/api/health
journalctl -u mesa-game --since '10 minutes ago'
Prueba de producción
El script usa exclusivamente identidades y partidas sintéticas. Comprueba catálogo, aceptación, cookies, dos clientes WebSocket, chat, turno, resultado e inactividad. Después del reinicio comprueba persistencia y elimina solo sus propios registros.
cd /opt/mesa-abierta/current
runuser -u mesa -- node --env-file=/etc/mesa-abierta/game.env deploy/smoke-production.mjs
systemctl restart mesa-game
runuser -u mesa -- node --env-file=/etc/mesa-abierta/game.env deploy/smoke-production.mjs verify-restart
Para comprobar también el acceso local, añade SMOKE_ORIGIN=http://192.168.18.155:3000 mediante env antes de node en ambas ejecuciones.
Copias y recuperación
mesa-backup.timer: copia diaria a las 03:15 Europe/Madrid, con hasta cinco minutos de variación. Los archivos pg_dump están en /var/backups/mesa-abierta y se comprueban con pg_restore. Las copias permanecen en la VM; no se borran automáticamente.
Versiones previas y configuración se conservan en releases y config-. Para volver de una versión con servidor combinado a otra anterior con el mismo servidor, restaura current y reinicia mesa-game. Para volver a versiones 01–03, restaura también game.env y las unidades guardadas: utilizaban dos servicios y loopback. Cambiar current no revierte migraciones de datos.