Usando una imagen de Docker construida con un launcher en docker-compose

Pero en este caso, el paso de bootstrap debe realizarse en la máquina de producción, lo que, si no me equivoco, anula el propósito de subir una imagen base a un registro de contenedores (ya que esto se haría con la intención de no tener que ejecutar bootstrap en producción, excepto quizás para ejecutar un paso de migración de la base de datos o algo similar).

Esto es lo que hago en sitios que no son Discourse que alojo: normalmente uso Flyway para ejecutar migraciones en la base de datos, junto con otras tareas como vaciar la caché de Redis, pero sin ejecutar otros procesos intensivos, especialmente aquellos que dependen de servicios externos, como la actualización de certificados HTTPS (lo haría en un cronjob, excepto la primera vez, lo cual está bien) o cambios en la base de código (esto sería estático en la imagen, como paquetes, bibliotecas y otras cosas). Parece que Discourse usa Rake, lo cual está bien, pero también hace otras cosas como instalar gemas, generar activos, actualizar la base de datos de MaxMind y quizás otros servicios (lo cual podría romper el paso de reconstrucción si, por ejemplo, el servicio está caído o si cambian la API, lo cual es raro pero podría suceder).

No estoy diciendo que Discourse deba hacerlo así, por supuesto, pero generar una imagen en un entorno de CI y simplemente ejecutar un paso de migración de la base de datos en servidores de staging/producción, junto con la definición de las variables de entorno, es lo que esperaría, y es fácilmente alcanzable con otros softwares como WordPress, MediaWiki, Rocket.Chat, etc. Discourse es el mejor software para foros, en mi opinión, y pueden tener buenas razones para hacerlo de la manera que lo hacen, pero por ahora solo usaría la instalación estándar (o la instalación multicontenedor) para evitar dolores de cabeza y simplemente esperar que nada salga mal con las reconstrucciones.

Parece que el bootstrap aún debería realizarse en un entorno de producción y no en un entorno de CI para generar una imagen base que se use tanto en staging como en producción. Además, no ser una instalación estándar es una gran bandera roja, que puede convertirse en un dolor de cabeza en el futuro a medida que el software reciba actualizaciones.