Acabo de realizar la actualización a PostgreSQL 18 tanto para una instalación estándar como para una configuración de doble contenedor, sin ningún problema. Gracias de nuevo a @chrisr y al equipo por las instrucciones tan sencillas.
Para una configuración de doble contenedor detrás de Cloudflare CDN con cubos de subidas/copias de seguridad R2, los pasos que utilicé fueron los siguientes:
Paso 1: Limpieza de disco
# eliminar todos los datos de docker no utilizados
docker system prune -a -f
# limpiar registros antiguos y caché de apt
journalctl --vacuum-time=2d
apt-get clean
apt-get autoremove -y
# verificar el tamaño de la base de datos
du -sh /var/discourse/shared/data/postgres_data*
# verificar el nuevo espacio libre disponible
df -h -x tmpfs -x devtmpfs
Paso 2: Mantenimiento y copia de seguridad
- Editar una página de mantenimiento de Cloudflare para indicar un mantenimiento de sistema de actualización de 15-20 minutos (puede que no tome tanto tiempo, pero es mejor estar a salvo!) y establecer un temporizador de recarga de unos 30 segundos. Activar una ruta de worker de Cloudflare para mostrar la página de mantenimiento.
- Iniciar una copia de seguridad desde la línea de comandos:
cd /var/discourse
./launcher enter web_only
discourse backup
exit
- Iniciar sesión en el panel de Cloudflare R2 y verificar la carpeta de copias de seguridad para confirmar que el archivo se subió correctamente
Paso 3: Apagado seguro
- Detener primero el contenedor web para cerrar cualquier conexión activa, y luego detener el contenedor de base de datos:
cd /var/discourse
./launcher stop web_only
./launcher stop data
- Verificar que PostgreSQL se haya detenido correctamente:
tail -n 20 shared/data/log/var-log/postgres/current
Paso 4: Reconstrucciones de actualización
Ejecutar los siguientes comandos en este orden:
./launcher rebuild data # volcar, migrar y restaurar postgresql 18
./launcher rebuild data # reconstruir el contenedor de base de datos
./launcher rebuild web_only # reconstruir la aplicación web
Paso 5: Optimización y limpieza
- Generar las estadísticas de tablas de pg18 que faltan, de lo contrario el foro será más lento de lo normal:
docker exec -u postgres data /usr/lib/postgresql/18/bin/vacuumdb -d discourse --analyze-in-stages
- Probar el foro para asegurarse de que todo funcione; la página de mantenimiento no debería estar cargando ahora si se configuró un temporizador de recarga.
- Eliminar la ruta del worker de Cloudflare a la página de mantenimiento (¡no queremos alcanzar el límite diario de 100,000!)
- Eliminar los datos antiguos de pg18 para recuperar ese espacio en disco:
rm -fr /var/discourse/shared/data/postgres_data_old/
¡Listo!
![]()
