You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
senzapaura_es/despliegue/LEEME.md

74 lines
3.9 KiB

# Despliegue de web y administración
El código se publica conjuntamente; las claves y los medios quedan fuera de cada release.
## Estructura
```text
/var/www/senzapaura/
.env # sitio: DATABASE_URL, ORIGIN=https://senzapaura.es, claves
.env.panel # misma DATABASE_URL; ORIGIN=https://admin.senzapaura.es
current -> releases/<version>
releases/<version>/ # build, build-panel, node_modules, migraciones y scripts
media/audio/ # originales y descargas MP3 privadas
media/escucha/ # escucha completa privada
media/ondas/ # ondas compartidas
media/imagenes/ # imágenes cargadas desde el panel
```
Las dos unidades fijan rutas absolutas de medios, `HOST=127.0.0.1` y puertos
3000/3001. El panel reserva 260 MiB por petición para un archivo de hasta 256 MiB
más el formulario. Nginx permite 260m en el dominio administrativo.
## Instalación y actualización
1. Preparar Node.js compatible con el proyecto, PostgreSQL, ffmpeg y ffprobe.
Crear el usuario de servicio y los dos archivos de entorno con permisos 600.
Ambos deben usar la misma base. El script comprueba la coincidencia sin mostrar claves.
2. En desarrollo, ejecutar `bash despliegue/desplegar.sh usuario@servidor`.
Comprueba tipos, formato, tests y ambos builds con código de salida correcto.
Sube las dependencias a una release nueva y copia medios sin sobrescribir.
3. Las migraciones se ejecutan en el destino con su `.env`. Las de esta entrega
son `0024_intenciones_pago.sql` y `0025_guardas_publicacion.sql`.
4. La primera vez, ejecutar en el servidor
`sudo bash /var/www/senzapaura/current/despliegue/instalar.sh`.
Instala ambas unidades y el ejemplo Nginx. Configurar DNS y TLS de los dos dominios.
5. Las actualizaciones posteriores cambian `current` y reinician ambos servicios.
Si falla el arranque o la comprobación HTTP, se restaura el enlace anterior.
Las releases antiguas se conservan. La base no se revierte automáticamente.
## Migrar una instalación anterior
Conservar la instalación y su copia de seguridad. Preparar los entornos y dejar que
el primer despliegue cree `current`; después instalar las nuevas unidades. Los
antiguos `build` y `node_modules` de la raíz no se borran. Si se usaba otro sistema
de arranque, adaptar sus directorios de trabajo a `current` y sus rutas de medios
a las compartidas antes de reiniciarlo.
La subida nunca reemplaza un audio existente con la misma clave. Para cambiar
material ya publicado, preparar una operación editorial explícita. Las imágenes
nuevas tienen nombres únicos y se pueden asignar desde el panel.
Las nuevas guardas no rellenan créditos ausentes. En el catálogo legado deben
asignarse los intérpretes reales; a partir de la migración, las escrituras que
rompen los requisitos de publicación se rechazan al confirmar la transacción.
Las importaciones deben agrupar canción, créditos y audio en una transacción.
## Proxy y recuperación
`/escucha` y `/descargas` siempre pasan a Node para autorizar la petición y resolver
Range. No añadir aliases que publiquen `media/audio` o `media/escucha`.
El webhook `/api/stripe/webhook` atraviesa el modo de espera y comprueba la firma.
La activación usa `flock` para impedir despliegues concurrentes. El cambio de enlace
es atómico, pero el reinicio puede producir una breve interrupción del servicio.
Antes de cambios destructivos de esquema debe diseñarse una migración compatible
con la versión anterior o un procedimiento específico de recuperación.
`npm run db:recuperar-audios` informa de manifiestos de procesado. Con
`-- --limpiar` elimina solo restos de más de 24 horas, comprobando primero sus
referencias en PostgreSQL. Un final registrado nunca se elimina por esta vía.
Las pruebas locales verifican código y migraciones; no equivalen a un ensayo real
de instalación, TLS y restauración del servidor de producción.

Powered by TurnKey Linux.