Hola, publico aquí después de intentar todo y quedarme atascado con mi actualización.
Estaba actualizando el foro después de muchos meses. Ejecuté una copia de seguridad como de costumbre y la descargué.
Aparentemente, en este proceso de actualización, hay una migración de PG 13 a 15.
Todo se ejecutaba sin problemas hasta que la actualización falló y se interrumpió debido a la falta de espacio en disco.
Fui a mi droplet de Digitalocean, lo detuve, expandí el disco y lo volví a encender.
Ejecuté algunos comandos regulares para liberar espacio en disco (eliminando registros antiguos, ./launcher cleanup, etc.)
Así que comencé la reconstrucción, y luego me encontré con el primer muro:
root@discourse-ubuntu-s-2vcpu-4gb-fra1-01:/var/discourse# ./launcher rebuild app
ADVERTENCIA: La versión de Docker 20.10.1 está obsoleta, se recomienda actualizar a la versión 24.0.7 o posterior.
Arquitectura x86_64 detectada.
ADVERTENCIA: el archivo containers/app.yml es de lectura pública en todo el mundo
Actualización:
Sigo intentando cosas. En este punto, solo quiero volver a una compilación que admita PG13 para poder restaurar mi copia de seguridad, pero sigo bloqueado intentando eso.
El hash de confirmación antes de la actualización era v3.3.0.beta6 +294, estoy intentando reconstruir ese a través de YML pero sigue diciendo esto al construir:
root@discourse-ubuntu-s-2vcpu-4gb-fra1-01:/var/discourse# ./launcher rebuild app
ADVERTENCIA: La versión de Docker 20.10.1 está obsoleta, se recomienda actualizar a 24.0.7 o más reciente.
arquitectura x86_64 detectada.
ADVERTENCIA: Estamos a punto de comenzar a descargar la imagen base de Discourse
Este proceso puede tardar entre unos minutos y una hora, dependiendo de la velocidad de su red
Por favor, sea paciente
2.0.20250226-0128: Extrayendo de discourse/base
af302e5c37e9: Extracción completa
ed49ab5c933d: Extracción completa
4d13d450f300: Extracción completa
a67afd5cca97: Extracción completa
d22a5b6769a6: Extracción completa
83c133b53b22: Extracción completa
fec147508f0c: Extracción completa
21850d8b3ba1: Extracción completa
02e250b6bcc4: Extracción completa
71ba5ea7da00: Extracción completa
ddcfbf6d2647: Extracción completa
9c3e54d34536: Extracción completa
29ce98d2d62d: Extracción completa
4c9694455fd5: Extracción completa
58a8ebcc6563: Extracción completa
9c8966f1f999: Extracción completa
b3dde96c4217: Extracción completa
f934de9e2e8d: Extracción completa
834e25f513a1: Extracción completa
85d3cf606a95: Extracción completa
94331a6982ee: Extracción completa
14936beb0e9f: Extracción completa
3ef05b122d47: Extracción completa
6c2dff13a1e7: Extracción completa
7682543ad38b: Extracción completa
f16f8d5c5a04: Extracción completa
06d7037d56ef: Extracción completa
bc6c17ae1969: Extracción completa
d19f089ead0e: Extracción completa
Digest: sha256:6f18aa2cd22bba0deb91d69194e577d4f96130ad555ae8ec646a8792cbfe37db
Estado: Descargada una imagen más reciente para discourse/base:2.0.20250226-0128
docker.io/discourse/base:2.0.20250226-0128
ADVERTENCIA: el archivo containers/app.yml tiene permisos de lectura para todo el mundo. Puede proteger este archivo ejecutando: chmod o-rwx containers/app.yml
Verificando que el lanzador esté actualizado
Obteniendo el origen
El lanzador está actualizado
2.0.20250226-0128: Extrayendo de discourse/base
Digest: sha256:6f18aa2cd22bba0deb91d69194e577d4f96130ad555ae8ec646a8792cbfe37db
Estado: La imagen está actualizada para discourse/base:2.0.20250226-0128
docker.io/discourse/base:2.0.20250226-0128
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-06-11T09:54:52.350929 #1] INFO -- : Leyendo desde stdin
I, [2025-06-11T09:54:52.357807 #1] INFO -- :
E: Problema al ejecutar scripts DPkg::Post-Invoke 'rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true'
E: Subproceso devolvió un código de error
I, [2025-06-11T09:54:53.837808 #1] INFO -- : Leyendo listas de paquetes...
Construyendo árbol de dependencias...
Leyendo la información de estado...
Los siguientes paquetes se instalaron automáticamente y ya no son necesarios:
libcommon-sense-perl libio-pty-perl libipc-run-perl libjson-perl
libjson-xs-perl libllvm19 libtypes-serialiser-perl libz3-4
postgresql-client-common postgresql-common postgresql-common-dev ssl-cert
Use 'apt autoremove' para eliminarlos.
Se ELIMINARÁN los siguientes paquetes:
postgresql-15* postgresql-15-pgvector* postgresql-client-15*
0 actualizados, 0 nuevos instalados, 3 para eliminar y 0 sin actualizar.
Después de esta operación, se liberarán 60.9 MB de espacio en disco.
(Leyendo la base de datos ... 33951 archivos y directorios instalados actualmente.)
Eliminando postgresql-15-pgvector (0.8.0-1.pgdg120+1) ...
Eliminando postgresql-15 (15.12-1.pgdg120+1) ...
invoke-rc.d: no se pudo determinar el nivel de ejecución actual
update-alternatives: advertencia: forzando la reinstalación de la alternativa /usr/share/postgresql/15/man/man1/psql.1.gz porque el grupo de enlaces psql.1.gz está roto
Eliminando postgresql-client-15 (15.12-1.pgdg120+1) ...
Procesando activadores para postgresql-common (274.pgdg120+1) ...
Construyendo diccionarios de PostgreSQL a partir de paquetes myspell/hunspell instalados...
Eliminando archivos de diccionario obsoletos:
(Leyendo la base de datos ... 31913 archivos y directorios instalados actualmente.)
Purgando archivos de configuración para postgresql-15 (15.12-1.pgdg120+1) ...
Eliminando el clúster principal...
FALLÓ
--------------------
Pups::ExecError: DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector falló con el retorno #
ocess::Status: pid 7 exit 100
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params "DEBIAN_FRONTEND=noninteractive apt-get purge -y postgresql-15 postgresql-client-15 postgresql-contrib-15 postgresql-15-pgvector"
bootstrap failed with exit code 100
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
a609309cf458b146e5650d21103bf084e9bf66843e46e627827f50b6f8c03376
Si hiciste una copia de seguridad como dijiste que harías, lo más fácil es iniciar una nueva instancia, seguir Mover un sitio de Discourse a otro VPS con rsync (pero no copies los archivos de la base de datos), y luego restaurar tu copia de seguridad.
¡Hola Jay! Muchas gracias por responder. Acabo de empezar a hacerlo, el droplet se está configurando ahora mismo.
Pregunta rápida: Descargué mi archivo de copia de seguridad antes de iniciar la actualización, este es el archivo: forumname-2025-06-11-060249-v20240807024301.tar.gz (4,6 GB comprimido)La versión del foro era v3.3.0.beta6 +294 con PG13.
Estaba planeando inicializar el nuevo droplet forzando esta versión en el app.yml, como:
## esta es la plantilla de contenedor Docker todo en uno y autónoma de Discourse
##
## Después de hacer cambios en este archivo, DEBE reconstruir
## /var/discourse/launcher rebuild app
##
## ¡TENGA MUCHO CUIDADO AL EDITAR!
## ¡LOS ARCHIVOS YAML SON SÚPER SÚPER SENSIBLES A ERRORES DE ESPACIO BLANCO O ALINEACIÓN!
## visite http://www.yamllint.com/ para validar este archivo según sea necesario
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Descomente estas dos líneas si desea agregar Lets Encrypt (https)
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
## ¿qué puertos TCP/IP debe exponer este contenedor?
## Si desea que Discourse comparta un puerto con otro servidor web como Apache o nginx,
## consulte https://meta.discourse.org/t/17247 para obtener detalles
expose:
- "80:80" # http
- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Establezca db_shared_buffers en un máximo del 25% de la memoria total.
## será establecido automáticamente por bootstrap según la RAM detectada, o puede anularlo
db_shared_buffers: "1024MB"
## puede mejorar el rendimiento de la clasificación, pero agrega uso de memoria por conexión
#db_work_mem: "40MB"
## ¿Qué revisión de Git debe usar este contenedor? (predeterminado: tests-passed)
version: v3.3.0.beta6
Y luego, con el nuevo foro en funcionamiento, importar la copia de seguridad desde allí.
¿Tiene sentido esto? ¿O me estoy perdiendo algún parámetro o paso importante?
Gracias de nuevo, Jay, por responder. Realmente aprecio tu tiempo ayudándome a superar esta pesadilla.
Estoy intentando hacerlo de esa manera (forzando la versión en el YML) pero aparentemente discourse_docker no está contento (todavía) con ese cambio:
FAILED
--------------------
Pups::ExecError: grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The "before-server" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 ) failed with return #<Process::Status: pid 2788 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in spawn'
exec failed with the params {"cmd"=>["cp $home/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf", "rm /etc/nginx/sites-enabled/default", "mkdir -p /var/nginx/cache", "grep -q 'outlets/before-server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The \\\"before-server\\\" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )", "grep -q 'outlets/server' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The \\\"server\\\" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )", "grep -q 'outlets/discourse' /etc/nginx/conf.d/discourse.conf || ( >&2 echo 'The \\\"discourse\\\" Nginx outlet is missing. This version of discourse_docker is not compatible with the chosen Discourse version.' ; exit 1 )", "mkdir -p /etc/nginx/conf.d/outlets/before-server", "touch /etc/nginx/conf.d/outlets/before-server/20-redirect-http-to-https.conf", "touch /etc/nginx/conf.d/outlets/before-server/30-ratelimited.conf", "mkdir -p /etc/nginx/conf.d/outlets/server", "touch /etc/nginx/conf.d/outlets/server/10-http.conf", "touch /etc/nginx/conf.d/outlets/server/20-https.conf", "touch /etc/nginx/conf.d/outlets/server/30-offline-page.conf", "mkdir -p /etc/nginx/conf.d/outlets/discourse", "touch /etc/nginx/conf.d/outlets/discourse/20-https.conf", "touch /etc/nginx/conf.d/outlets/discourse/30-ratelimited.conf"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
d511b0ec31ac912c99c682611c35bbb446dde1488e1762aa07ccd24690c63164
2/2
Antes de actualizar, tomé una captura de pantalla de la versión actual por si acaso, ¿hay alguna forma de forzar discourse_docker a una versión anterior compatible?
Estoy buscando en Google y aquí en meta, pero todavía nada sobre cómo hacerlo.
[cita=“pfaffman, post:7, topic:369694”]
Simplemente haz una instalación normal de la última versión de todo y restaura la base de datos.
[/cita]
Entendido, lo intentaré ahora mismo.
Sin embargo, una pregunta rápida: Si la copia de seguridad es de una versión tan antigua de Discord que usaba PG13, ¿tendrás problemas para importar la copia de seguridad a la última versión de Discord con PG15?
Disculpa @pfaffman, escribí un mensaje anterior pensando que el problema se había resuelto, pero luego hubo un giro inesperado.
Después de mucho tiempo importando, vi que el foro estaba en línea nuevamente, listando todas las publicaciones y demás.
En la terminal, el registro era:
[...]
-- execute("DELETE FROM site_settings WHERE name='warn_reviving_old_topic_age'")
-\\u003e 0.0002s
== 20250609115711 RemoveComposerTipsSiteSettings: migrated (0.0012s) ==========
Reconectando a la base de datos...
Recargando la configuración del sitio...
Desactivando los correos electrónicos salientes para usuarios que no son personal...
Desactivando el modo de solo lectura...
Limpiando el caché de categorías...
Recargando traducciones...
Reasignando cargas...
Restaurando cargas, esto puede tomar un tiempo...
Migrando cargas a S3 para 'default'...
Subiendo archivos a S3...
- Listando archivos locales
=> 5 archivos
- Listando archivos S3
............................................................................................................................................................................ => 171490 archivos
- Sincronizando archivos a S3
.....
Actualizando las URLs en la base de datos...
Estuve allí por un tiempo y pensé que era solo mi conexión de terminal. Sin embargo, unos minutos más tarde, continuó terminando en fallo:
490 archivos
- Sincronizando archivos a S3
.....
Actualizando las URLs en la base de datos...
Eliminando imágenes optimizadas antiguas...
Marcando todas las publicaciones que contienen lightboxes para volver a hornear (rebake)...
76198 publicaciones fueron marcadas para un nuevo horneado
EXCEPTION: 903 publicaciones no se han reasignado a la nueva URL de carga de S3. La migración a S3 falló para la base de datos 'default'.
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:81:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:383:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/file_store/s3_store.rb:354:in `copy_from'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:69:in `restore_uploads'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:49:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:167:in `restore_uploads'
/var/www/discourse/lib/backup_restore/restorer.rb:71:in `run'
script/discourse:191:in `restore'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor.rb:538:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/base.rb:584:in `start'
script/discourse:345:in `
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in `kernel_load'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:452:in `exec'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/command.rb:28:in `run'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor.rb:538:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:35:in `dispatch'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/base.rb:584:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:29:in `start'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:28:in `block in
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:20:in `
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `
Trying to rollback...
Revertiendo...
Limpiando cosas...
Eliminando funciones del esquema discourse_functions...
Eliminando el directorio temporal '/var/www/discourse/tmp/restores/default/2025-06-11-121115'...
Reanudando sidekiq...
Marcando la restauración como finalizada...
Notificando a 'system' el final de la restauración...
¡Terminado!
[FAILED]
Restauración realizada.
```De repente, el foro que fue "restaurado" en línea, todas las publicaciones desaparecieron, dejando solo un par de temas activos.
Dado que el registro dice "76198 publicaciones fueron marcadas para un re-horneado (rebake)", pensé que era solo que ahora tenían que ser re-horneadas, así que fui a Sidekiq pero no hay nada pendiente para procesar :(


Inicié sesión en la consola de Rails y, al parecer, solo hay 10 publicaciones, no todas las que se debían importar
/var/www/discourse# rails c
Cargando entorno de producción (Rails 7.2.2.1)
discourse(prod)> Post.count
=> 10
discourse(prod)> Post.where(“baked_version IS NULL”).count
=> 0
Suspiro. ¿Estás usando el mismo nombre de host? (¿Quizás sí?)
Ese es tu problema ahora.
¿Configuraste S3 en la base de datos o en el archivo yml? Supongo que es lo primero. Lo más fácil sería restaurar solo la base de datos, pero es difícil de explicar (extraer el archivo sql y luego nombrarlo con lo mismo que el archivo tar.gz)
Puedes intentar esto
discourse restore --pause <backup_filename>
Eso hará una pausa antes de intentar restaurar las cosas de S3. Luego, si supieras qué hacer, podrías solucionar el problema con las subidas errantes.
Otra cosa sería establecer DISCOURSE_USE_S3 en false en tu app.yml. Es posible que también necesites configurar las otras cosas de S3, como las que dicen usar subidas de S3 y/o los buckets de S3.
[cita=“pfaffman, post:12, topic:369694”]
Suspiro. ¿Estás usando el mismo nombre de host? (¿Quizás sí?)
[/cita]
Sí, pero ahora que lo mencionas.
El foro tiene 10 años ya.
Configuré S3 en su día por un tiempo, pero luego lo eliminé, así que esos posts con imágenes de S3 son bastante antiguos.
¿Hay alguna forma de identificarlos e ignorarlos/eliminarlos, para que la importación pueda funcionar sin fricción?
Otro cosa sería configurar DISCOURSE_USE_S3 a falso en tu app.yml. Es posible que también debas configurar las otras cosas de S3 como las que dicen que uses las cargas de S3 y/o los buckets (contenedores) de S3.
También intentaré esto, porque al final, no nos importan esos archivos o posts de S3, es solo que aún no sé cómo gestionarlo para ignorarlos
Por cierto, si sigues atascado y desesperado y tienes presupuesto, puedes contactarme por correo electrónico o mensaje privado o preguntar en Marketplace.
¡Deberías habérmelo dicho desde el principio! Con gusto habría pagado en primer lugar. jeje
Ya está en funcionamiento.
Después de probar un montón de cosas, terminé haciendo algo contraintuitivo, pero que ahora funciona:
Configurar S3 en la nueva instancia correctamente (a través del panel de administración)
Ejecuté la importación con la [cosa –pause pero en el segundo paso, simplemente detuve el proceso. Esperaba que el foro no funcionara o tuviera problemas con las imágenes, pero está funcionando y las imágenes antiguas se cargan sin problemas.
Todavía estoy probando cosas, tal vez encuentre algo roto más tarde, pero por ahora, después de 12 horas de solución de problemas, lo consideraré una victoria por ahora.