Estoy usando Cloudflare R2 para subir archivos multimedia, pero creo que no funciona para hacer copias de seguridad de la base de datos. ¿Qué directorios de archivos necesito respaldar usando rclone?
Puede que el siguiente tema le resulte útil
Archivos/directorios de Discourse para respaldar en ProtonDrive (además de medios R2/S3)
Paso 1: ¿Qué significa upload://?
upload://
Comentario
Discourse solo almacena la referencia upload://<hash> en el contenido de las publicaciones (sin procesar/procesado). En el momento de la compilación o al renderizar, Discourse consulta sus tablas de base de datos (como uploads, post_uploads, etc.) para resolver estos hashes a URL o rutas reales según dónde se almacenen las cargas (local, CDN, S3/R2, etc.).
Paso 2: ¿Dónde aterriza eso dentro del contenedor?
/shared/uploads/default
Comentario
En la instalación estándar de Docker (usando launcher y app.yml), /shared dentro del contenedor se monta desde /var/discourse/shared/standalone del host. Todo lo que Discourse escribe de forma persistente —incluidas las cargas, los registros, las copias de seguridad, etc.— está bajo /shared.
Paso 3: La ruta del sistema de archivos del host
/var/discourse/shared/standalone/uploads/default
Comentario
Si no está utilizando cargas externas (S3/R2), esta es la ruta principal que debe sincronizar con ProtonDrive para conservar los medios de las publicaciones cargados. Si está utilizando S3/R2, la mayoría de las cargas no estarán aquí, pero algunos archivos (por ejemplo, variantes optimizadas, marcadores de posición) pueden permanecer. Decida si desea respaldar esto también.
Paso 4: El mapeo del volumen de Docker (app.yml)
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
Comentario
Todo en /shared dentro del contenedor se convierte en /var/discourse/shared/standalone en el host. Si respalda este árbol, obtendrá cargas, archivos de respaldo, registros y (opcionalmente) datos de PostgreSQL si se mantienen en disco (aunque los archivos de respaldo suelen ser suficientes para la recuperación).
Destinos concretos para respaldar (almacenamiento local)
Conjunto mínimo (si confía en las copias de seguridad en archivo .tar de Discourse):
/var/discourse/shared/standalone/backups/ # Copias de seguridad completas generadas por Discourse (archivos .tar.gz)
/var/discourse/shared/standalone/uploads/ # Solo si almacena las cargas localmente
Comentario
- La copia de seguridad en archivo se refiere al archivo .tar.gz creado por la función de copia de seguridad de Discourse. Contiene un volcado completo de la base de datos, la configuración del sitio, los temas y (opcionalmente, si se selecciona) todas las cargas locales. No contiene medios almacenados en S3/R2 externos; solo los registros de la base de datos que hacen referencia a ellos.
- Si sus cargas residen en S3/R2, es posible que solo necesite
/backups/localmente y un proceso separado para respaldar su bucket de almacenamiento de objetos.
Conjunto “Todo lo que pueda necesitar” (copia a nivel de sistema de archivos):
/var/discourse/shared/standalone/backups/ # Copias de seguridad completas de Discourse (archivos .tar)
/var/discourse/shared/standalone/uploads/ # Cargas/medios locales (si no es S3/R2)
/var/discourse/shared/standalone/log/rails/ # (Opcional) Registros de Rails — útil para análisis forenses
/var/discourse/shared/standalone/tmp/backups/ # (Opcional) Zona de preparación de copias de seguridad transitoria (generalmente vacía)
/var/discourse/shared/standalone/postgres_data/ # (Opcional) Directorio de datos sin procesar de PostgreSQL — generalmente no es necesario
/var/discourse/shared/containers/ # Sus archivos app.yml y cualquier archivo YML de contenedor (configuración)
/etc/letsencrypt/ # (Opcional) Certificados TLS si termina SSL en el host
Comentario
- Los datos sin procesar de PostgreSQL generalmente no son necesarios, ya que la copia de seguridad en archivo contiene un volcado lógico de la base de datos, que es más seguro para la restauración.
- /containers es pequeño pero crítico para la recuperación ante desastres: contiene su configuración y los mapeos de volúmenes.
- Los certificados TLS solo importan si está haciendo SSL fuera del contenedor.
Mapa rápido de una línea
upload://
↓
/shared/uploads/default (dentro de Docker)
/var/discourse/shared/standalone/uploads/default (en el host)
Comentario
Si usa S3/R2:
- Respalde su bucket S3/R2 por separado (por ejemplo, con Rclone).
- Aún así, considere respaldar
/backups/(archivos .tar, que incluyen base de datos y configuración, cargas del sitio, pero no medios externos) y/containers/.
TL;DR para el hilo de ProtonDrive
- ¿Cargas locales? Respalde:
- /var/discourse/shared/standalone/uploads/
- /var/discourse/shared/standalone/backups/ # (contiene copias de seguridad en archivo .tar.gz)
- ¿Cargas S3/R2? Respalde:
- /var/discourse/shared/standalone/backups/ # (copias de seguridad en archivo: base de datos/configuración/tabla de cargas)
- Su bucket S3/R2 con otra herramienta
- Opcionalmente: /containers/, /log/rails/, y postgres_data para una cobertura completa de recuperación ante desastres
Comentario
Copia de seguridad en archivo: El archivo .tar.gz creado por el sistema de copias de seguridad de Discourse, que contiene un volcado lógico de la base de datos, temas, configuraciones y (opcionalmente) cargas locales, pero nunca incluye medios externos de S3/R2.
Me gustaría destacar que cada una de las 3 veces que he cambiado de servidor, confiando en la copia de seguridad de tarball para conservar las subidas locales, el app.yml predeterminado ha sido diferente.
Por lo tanto, probablemente sea mejor copiar manualmente partes del antiguo app.yml para reemplazar partes del nuevo archivo.
me gustaría probar docker cp para sacar un archivo de copia de seguridad de un contenedor de discourse y ponerlo en el sistema anfitrión, si eso es necesario