Problèmes Dockerfile Multisite

J’ai essayé de l’appliquer en lisant les guides. Voici comment le fichier app.yml s’est présenté. Il peut y avoir des erreurs. J’utilise simplement Docker. Mon objectif est le suivant : pouvoir ouvrir 2 sites sur le serveur virtuel. 1. nom du site : dursuncan.com, 2. nom du site : forum.tekno-byte.com
Comment dois-je modifier le fichier app.yml ?

   # ./launcher rebuild app

    WARNING: We are about to start downloading the Discourse base image
    This process may take anywhere between a few minutes to an hour, depending on your network speed

    Please be patient

    2.0.20210415-1332: Pulling from discourse/base
    Digest: sha256:b3b1eb6d859d683f26ad2a02e0efabcd502a63ab07b8211e4c425aa7ba7dd3a4
    Status: Downloaded newer image for discourse/base:2.0.20210415-1332
    docker.io/discourse/base:2.0.20210415-1332
    Ensuring launcher is up to date
    Fetching origin
    Launcher is up-to-date
    Stopping old container
    + /usr/bin/docker stop -t 60 app
    app
    cd /pups && git pull && git checkout v1.0.3 && /pups/bin/pups --stdin
    docker: Error response from daemon: could not get container for postgres: No such container: postgres.
    See 'docker run --help'.
    cat: cids/app_bootstrap.cid: No such file or directory
    "docker rm" requires at least 1 argument.
    See 'docker rm --help'.

    Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]

    Remove one or more containers
    rm: cannot remove 'cids/app_bootstrap.cid': No such file or directory
    ** 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.
    ## this is the all-in-one, standalone Discourse Docker container template
    ##
    ## After making changes to this file, you MUST rebuild
    ## /var/discourse/launcher rebuild app
    ##
    ## BE *VERY* CAREFUL WHEN EDITING!
    ## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
    ## visit http://www.yamllint.com/ to validate this file as needed

    templates:
      - "templates/postgres.template.yml"
      - "templates/redis.template.yml"
      - "templates/web.template.yml"
      - "templates/web.ratelimited.template.yml"
      - "templates/cron.template.yml"
    ## Uncomment these two lines if you wish to add Lets Encrypt (https)
      - "templates/sshd.template.yml"  
      - "templates/web.ssl.template.yml"
      - "templates/web.letsencrypt.ssl.template.yml"

    ## which TCP/IP ports should this container expose?
    ## If you want Discourse to share a port with another webserver like Apache or nginx,
    ## see https://meta.discourse.org/t/17247 for details
    expose:
    #  - "80"
       - "80:80"
       - "2222:22"
       - "443:443"
    #  - "80:80"   # http
    #  - "443:443" # https

    links:
       - link:
           name: postgres
           alias: postgres

    #docker_args:
    #   - "--net chain"

    params:
      db_default_text_search_config: "pg_catalog.english"

      ## Set db_shared_buffers to a max of 25% of the total memory.
      ## will be set automatically by bootstrap based on detected RAM, or you can override
      #db_shared_buffers: "256MB"

      ## can improve sorting performance, but adds memory usage per-connection
      #db_work_mem: "40MB"

      ## Which Git revision should this container use? (default: tests-passed)
      #version: tests-passed

    env:
      LC_ALL: en_US.UTF-8
      LANG: en_US.UTF-8
      LANGUAGE: en_US.UTF-8
      # DISCOURSE_DEFAULT_LOCALE: en

      ## How many concurrent web requests are supported? Depends on memory and CPU cores.
      ## will be set automatically by bootstrap based on detected CPUs, or you can override
      #UNICORN_WORKERS: 3

      ## TODO: The domain name this Discourse instance will respond to
      ## Required. Discourse will not work with a bare IP number.
      DISCOURSE_HOSTNAME: 'dursuncan.com'
      # VIRTUAL_HOST: 'dursuncan.com,www.dursuncan.com'
      # LETSENCRYPT_HOST: 'dursuncan.com,www.dursuncan.com'
      # LETSENCRYPT_EMAIL: 'merhaba@dursuncan.com'

      ## Uncomment if you want the container to be started with the same
      ## hostname (-h option) as specified above (default "$hostname-$config")
      # DOCKER_USE_HOSTNAME: true

      ## TODO: List of comma delimited emails that will be made admin and developer
      ## on initial signup example 'user1@example.com,user2@example.com'
      DISCOURSE_DEVELOPER_EMAILS: 'poyrazdursuncan@gmail.com'

      ## TODO: The SMTP mail server used to validate new accounts and send notifications
      # SMTP ADDRESS, username, and password are required
      # WARNING the char '#' in SMTP password can cause problems!
      DISCOURSE_SMTP_ADDRESS: smtp.eu.mailgun.org
      DISCOURSE_SMTP_PORT: 587
      DISCOURSE_SMTP_USER_NAME: postmaster@mg.dursuncan.com
      DISCOURSE_SMTP_PASSWORD: '***'
      DISCOURSE_SMTP_ENABLE_START_TLS: true
      DISCOURSE_SMTP_DOMAIN: dursuncan.com
      #DISCOURSE_NOTIFICATION_EMAIL: noreply@discourse.example.com    # (address to send notifications from)

      ## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate
      LETSENCRYPT_ACCOUNT_EMAIL: 'merhaba@dursuncan.com'

      ## The http or https CDN address for this Discourse instance (configured to pull)
      ## see https://meta.discourse.org/t/14857 for details
      #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
      
      ## The maxmind geolocation IP address key for IP address lookup
      ## see https://meta.discourse.org/t/-/137387/23 for details
      #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

      DISCOURSE_DB_HOST: some-host
      DISCOURSE_DB_NAME: "{{config}}_discourse"

    labels:
      monitor: "true"
      app_name: "{{config}}_discourse"

    ## The Docker container is stateless; all data is stored in /shared
    volumes:
      - volume:
          host: /var/discourse/shared/standalone
          guest: /shared
      - volume:
          host: /var/discourse/shared/standalone/log/var-log
          guest: /var/log

    ## Plugins go here
    ## see https://meta.discourse.org/t/19157 for details
    hooks:          
      after_postgres:
         - exec: sudo -u postgres createdb b_discourse || exit 0
         - exec:
              stdin: |
                grant all privileges on database b_discourse to discourse;
              cmd: sudo -u postgres psql b_discourse
              raise_on_fail: false

         - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<< "alter schema public owner to discourse;"'
         - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<< "create extension if not exists hstore;"'
         - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<< "create extension if not exists pg_trgm;"'

      after_code:
        - exec:
            cd: $home/plugins
            cmd:
              - mkdir -p plugins
              - git clone https://github.com/discourse/docker_manager.git
      before_bundle_exec:
        - file:
            path: $home/config/multisite.yml
            contents: |
             secondsite:
               adapter: postgresql
               database: b_discourse
               pool: 25
               timeout: 5000
               db_id: 2
               host_names:
                 - b.discourse.example.com

      after_bundle_exec:
        - exec: cd /var/discourse && sudo -E -u discourse bundle exec rake multisite:migrate

    ## Any custom commands to run after building
    run:
      - exec:
            cd: var/discourse
            hook: my_hook
            cmd:
              - echo 1
      ## If you want to set the 'From' email address for your first registration, uncomment and change:
      ## After getting the first signup email, re-comment the line. It only needs to run once.
      #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
      - exec: echo "End of custom commands"
1 « J'aime »

Vous avez besoin de deux tels conteneurs et d’un proxy inverse devant. Copiez app.yml vers app2.yml et modifiez-le. Exécuter d’autres sites Web sur la même machine que Discourse ou peut-être Configuration multisite avec Let’s Encrypt et sans proxy inverse s’ils peuvent partager les mêmes plugins et le même serveur de messagerie.

4 « J'aime »

J’ai utilisé la première méthode sur des serveurs LEMP. Est-il possible d’appliquer cette méthode via Docker ? L’installation d’un serveur Nginx en dehors de Docker a-t-elle un impact sur les performances ?

1 « J'aime »

Oui. Vous aurez une image Docker pour chaque forum.

Le proxy inverse externe peut également être un conteneur Docker.

Peu.

1 « J'aime »

J’ai installé Nginx. J’ai configuré mes paramètres. J’ai édité le fichier app.yml. Le processus de reconstruction échoue. Quel pourrait être le problème ?

./launcher rebuild app
Assurance que le lanceur est à jour
Récupération de origin
Le lanceur est à jour
cd /pups && git pull && git checkout v1.0.3 && /pups/bin/pups --stdin
docker: format de référence invalide : le nom du référentiel doit être en minuscules.
Voir 'docker run --help'.
cat: cids/app_bootstrap.cid: Aucun fichier ou dossier de ce type
"docker rm" nécessite au moins 1 argument.
Voir 'docker rm --help'.

Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]

Supprimer un ou plusieurs conteneurs
rm: impossible de supprimer 'cids/app_bootstrap.cid': Aucun fichier ou dossier de ce type
** ÉCHEC DU BOOTSTRAP ** Veuillez remonter et chercher les messages d'erreur précédents, il peut y en avoir plus d'un.
./discourse-doctor peut aider à diagnostiquer le problème.
root@dursun:/var/discourse# docker image rm 8e23824acd3c
Erreur : Image introuvable : 8e23824acd3c

app.yml

## Ceci est le modèle de conteneur Docker Discourse tout-en-un, autonome
##
## Après avoir apporté des modifications à ce fichier, vous DEVEZ reconstruire
## /var/discourse/launcher rebuild app
##
## SOYEZ *TRÈS* PRUDENT EN ÉDITANT !
## LES FICHIERS YAML SONT EXTRÊMEMENT SENSIBLES AUX ERREURS D'ESPACE OU D'ALIGNEMENT !
## Visitez http://www.yamllint.com/ pour valider ce fichier si nécessaire

# Modèles de base utilisés ; peut être réduit pour inclure moins de fonctionnalités par modèle de conteneur :
  #- "templates/sshd.template.yml"
  #- "templates/web.socketed.template.yml"
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/web.socketed.template.yml"

## Quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## voir https://meta.discourse.org/t/17247 pour plus de détails
# Quels ports exposer ?
# expose : commenter toute la section en mettant un # devant chaque ligne
# - "80:80"   # http
# - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Définir db_shared_buffers à un maximum de 25 % de la mémoire totale.
  ## Sera défini automatiquement par le bootstrap en fonction de la RAM détectée, ou vous pouvez le remplacer
  #db_shared_buffers: "256MB"

  ## Peut améliorer les performances de tri, mais ajoute l'utilisation de la mémoire par connexion
  #db_work_mem: "40MB"

  ## Quelle révision Git ce conteneur doit-il utiliser ? (par défaut : tests-passed)
  #version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Combien de requêtes web simultanées sont prises en charge ? Dépend de la mémoire et des cœurs CPU.
  ## Sera défini automatiquement par le bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
  #UNICORN_WORKERS: 3

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra
  ## Requis. Discourse ne fonctionnera pas avec une adresse IP brute.
  DISCOURSE_HOSTNAME: 'dursuncan.com'

  ## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
  ## nom d'hôte (option -h) que spécifié ci-dessus (par défaut "$hostname-$config")
  # DOCKER_USE_HOSTNAME: true

  ## TODO : Liste d'emails séparés par des virgules qui seront administrateurs et développeurs
  ## lors de l'inscription initiale, exemple 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'poyrazdursuncan@gmail.com'

  ## TODO : Le serveur de messagerie SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
  # L'adresse SMTP, le nom d'utilisateur et le mot de passe sont requis
  # ATTENTION : le caractère '#' dans le mot de passe SMTP peut causer des problèmes !
  DISCOURSE_SMTP_ADDRESS: smtp.eu.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: postmaster@mg.dursuncan.com
  DISCOURSE_SMTP_PASSWORD: '---------'
  DISCOURSE_SMTP_ENABLE_START_TLS: true
  DISCOURSE_SMTP_DOMAIN: dursuncan.com
  #DISCOURSE_NOTIFICATION_EMAIL: noreply@discourse.example.com    # (adresse d'envoi des notifications)

  ## Si vous avez ajouté le modèle Lets Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
  LETSENCRYPT_ACCOUNT_EMAIL: 'merhaba@dursuncan.com'

  ## L'adresse CDN http ou https pour cette instance Discourse (configurée pour récupérer)
  ## voir https://meta.discourse.org/t/14857 pour plus de détails
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## La clé d'adresse IP Maxmind pour la recherche d'adresses IP
  ## voir https://meta.discourse.org/t/-/137387/23 pour plus de détails
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Les plugins vont ici
## voir https://meta.discourse.org/t/19157 pour plus de détails

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Toute commande personnalisée à exécuter après la construction
run:
  - exec: echo "Début des commandes personnalisées"
  ## Si vous souhaitez définir l'adresse email 'De' pour votre première inscription, décommentez et modifiez :
  ## Après avoir reçu le premier email d'inscription, re-commentez la ligne. Elle ne doit être exécutée qu'une seule fois.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fin des commandes personnalisées"
1 « J'aime »