Ceci est une configuration avancée. Ne suivez pas ces instructions à moins d’être expérimenté en administration de serveurs Linux et Docker. Vous devez également prêter une attention particulière aux commits sur
discourse_dockerpour vous assurer de remarquer s’il y a une mise à jour de version pour postgres ou redis.
Conversion de votre configuration actuelle
J’ai réussi à migrer vers deux conteneurs. Si quelqu’un d’autre a besoin d’instructions, voici comment cela a fonctionné pour moi.
Le processus comprend la sauvegarde, la configuration de conteneurs web et de données séparés, et la restauration des données.
-
Sauvegardez votre instance Discourse et téléchargez la sauvegarde. Vous pouvez suivre le guide simple ou la sauvegarde et restauration manuelles ultérieures.
-
Arrêtez le conteneur autonome actuel
./launcher stop app -
Copiez
web_only.ymletdata.ymldepuissamples/verscontainers/, renommez-les comme vous le souhaitez, par exempleweb_rocks.ymletdata2.yml. -
Si vous les renommez, veuillez prêter attention aux entrées
volumes:dansdata.ymletweb_only.yml
Si vous avez renomméweb_only.ymlenweb_rocks.yml, vous devez modifier l’entrée dansWeb_rocks.ymlcomme suit :
volumes:
- volume:
host: /var/discourse/shared/web_rocks
guest: /shared
- volume:
host: /var/discourse/shared/web_rocks/log/var-log
guest: /var/log
Faites une modification similaire dans data.yml également.
Configuration du conteneur de données
Commencez avec data.yml et définissez un mot de passe pour la base de données. Ensuite :
- accédez au dossier racine du conteneur
/var/discourse - exécutez
./launcher bootstrap data2(data2 ou quel que soit le nouveau nom que vous lui avez donné) - exécutez
./launcher start data2(en utilisant à nouveau le nouveau nom) - si tout se passe bien, vous pouvez vous connecter au conteneur via :
./launcher enter data2(en utilisant à nouveau le nouveau nom) - Quittez le conteneur avec
exit.
Configuration du conteneur web
Modifions web_only.yml.
Premièrement, changez le modèle et exposez les ports comme le fait votre app.yml.
Deuxièmement, assurez-vous de lier au bon conteneur de données. Si vous avez renommé data.yml en ‘something_else’, mettez-le pour ‘name’.
# Utilisez la clé 'links' pour lier les conteneurs ensemble, c'est-à-dire utilisez le drapeau Docker --link.
links:
- link:
name: data
alias: data
Bien que nous ne souhaitions plus exposer ssh ou tout autre port, vous devrez toujours exposer les ports 80 et 443 pour l’accès web. Cela dépend si vous avez un nginx en frontal et comment vous connectez le conteneur avec lui.
Quelque part là-dedans, vous trouverez ce bloc :
DISCOURSE_DB_USERNAME: discourse
DISCOURSE_DB_PASSWORD: mypassword
DISCOURSE_DB_HOST: data
DISCOURSE_REDIS_HOST: data
- Entrez le mot de passe que vous avez défini dans le conteneur de données.
- Entrez l’alias du conteneur de données que vous venez d’écrire. Pour
DB_HOSTet pourREDIS_HOST. Il doit correspondre au bloc links que nous avons mentionné. - Vous n’avez probablement pas changé le
DB_USERNAME.
Vous trouverez les valeurs pour DISCOURSE_DEVELOPER_EMAILS et DISCOURSE_HOSTNAME et bien d’autres. Vous avez déjà ces valeurs dans votre app.yml. Copiez-les à partir de là.
Dans la section des hooks, n’oubliez pas de définir tous les plugins supplémentaires que vous utilisez déjà dans app.yml
Maintenant, vous devriez être prêt à le bootstrap :
./launcher bootstrap web_only (encore une fois avec votre nouveau/propre nom)
Une fois bootstrappé, vous pouvez démarrer web_only (utilisez votre nouveau nom) :
./launcher start web_only
Une fois que Discourse est prêt, connectez-vous et restaurez votre site.
Après cela, tout a fonctionné à nouveau pour moi et mon installation discourse fonctionnait à nouveau, mais maintenant dans deux conteneurs séparés.
Comment mettre à jour lors de l’utilisation de conteneurs web et de données séparés
Si vous ne vous souciez pas des quelques minutes d’indisponibilité – ou lorsque les données doivent être mises à jour. Les changements à postgres et redis sont rares, et laisser le conteneur de données en cours d’exécution est ce qui permet de construire un nouveau conteneur web_only pendant que l’ancien fonctionne.
./launcher stop web_only && ./launcher rebuild data && ./launcher rebuild web_only
Cela fonctionne pour une mise à niveau mineure de Postgres et/ou une mise à niveau de redis.
Si vous vous souciez de chaque minute d’indisponibilité et que les données n’ont pas besoin d’être mises à jour (ce qui est le cas la plupart du temps) :
mise à jour uniquement de web_only :
./launcher bootstrap web_only && ./launcher destroy web_only && ./launcher start web_only
Il suffit de reconstruire web_only et de sauter data sauf en cas de mise à jour de postgres ou de redis. Celles-ci se produisent de l’ordre d’une fois par an et vous verrez une annonce comme PostgreSQL 15 update lorsque cela se produit, bien que les mises à jour de redis et les mises à jour mineures de postgres ne soient pas annoncées de manière aussi évidente.
La reconstruction de data nécessite un temps d’arrêt (pour la même raison que la version à conteneur unique – vous ne pouvez pas mettre à jour postgres pendant qu’un autre processus accède aux mêmes fichiers de base de données. De plus, lorsque vous construisez un nouveau conteneur de données, vous devez détruire et démarrer le conteneur web_only car il tentera de se connecter à l’ancien conteneur.
Vous n’avez pas souvent besoin de reconstruire le conteneur de données (c’est pourquoi cette méthode permet d’économiser du temps d’arrêt). Vous devez faire attention à quand il y a une mise à jour dans postgres ou redis ; le frontal ne le saura pas ; c’est une configuration avancée qui nécessite plus d’attention qu’un conteneur unique.
Gestion d’une installation à deux conteneurs
@pfaffman créera un sujet à ce sujet un jour, mais en attendant, il y a ceci : Managing a Two-Container Installation - Documentation - Literate Computing Support

