Installer Discourse sur CloudPanel

:warning: Cette méthode d’installation n’est pas officiellement approuvée. Utilisez-la à vos propres risques.

L’équipe de Discourse recommande uniquement l’installation via le guide d’installation officiel

:information_source: Il s’agit d’une installation non prise en charge, adaptée aux personnes ayant de l’expérience avec CloudPanel, étant des administrateurs système chevronnés, à l’aise avec Docker, les reverse proxies, et ayant déjà réalisé avec succès une installation standard.

Pourquoi CloudPanel

Pourquoi souhaiteriez-vous installer un forum Discourse sur un VPS ou un serveur dédié sous CloudPanel ?

Voici mes raisons :

Je préfère utiliser une interface graphique pour l’administration du serveur et du site. J’ai utilisé la plupart des panneaux de contrôle d’hébergement web à un moment ou à un autre.

Par rapport aux autres, CloudPanel est très léger et minimaliste et sans encombrement. Il possède toutes les fonctionnalités dont j’ai besoin, présentées de manière très simple et intuitive. Et c’est tout. Il n’a rien de superflu.

Je développe, héberge et gère de nombreux blogs Ghost, sites Wordpress, sites Drupal et d’autres types de sites, en plus des forums Discourse. Je n’ai vraiment besoin que d’un seul serveur où je peux héberger mes forums Discourse aux côtés de mes blogs Ghost et de mes sites Wordpress et Drupal. (Je ne veux pas payer et maintenir un serveur séparé pour chaque instance de Discourse.)

CloudPanel inclut (dès la sortie de la boîte) Nginx intégré et une interface simple pour configurer et gérer les Reverse Proxies, nécessaires pour exécuter une ou plusieurs instances de Discourse sur le même serveur ou avec d’autres types de sites web.

L’équipe de Discourse (et le personnel du forum Meta ici) ne fournit pas de support pour des environnements de serveur alternatifs comme Cpanel, Plesk ou (comme dans ce cas) CloudPanel, ni pour d’autres qui surgissent depuis la ligne de commande.

Alors j’ai pensé partager ma configuration et ma procédure au cas où d’autres personnes pourraient les trouver utiles.

[Si quelqu’un essaie cette méthode, faites-moi savoir comment cela se passe pour vous, ou si je peux améliorer ce tutoriel ! :heart_eyes: ]

Installer Docker

Dans Putty (ou un autre terminal), depuis le répertoire racine, exécutez :

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io

Créer un site Reverse Proxy dans CloudPanel

→ Nous cliquons sur le bouton + Add Site

Pour mon instance Discourse, j’utilise mon nom de domaine noobish.me. Donc, à partir de maintenant, partout où vous voyez cela dans le reste de ces instructions, remplacez noobish.me par votre véritable nom de domaine (par exemple, votresite.com).

→ Nous créons un nouveau « Reverse Proxy Site » dans CloudPanel pour le domaine où nous souhaitons héberger notre forum Discourse (bien sûr, l’enregistrement DNS A du domaine doit pointer vers la même adresse IP que notre CloudPanel).

Préparer le domaine et configurer SSL

Pour mon site, j’utilise les serveurs de noms de Cloudflare pour pointer le domaine. Dans Cloudflare, je configure SSL sur « Full » ou « Full (strict) ».

Je crée également une règle de page Cloudflare. Consultez ce post pour comprendre pourquoi.

J’utilise également un certificat SSL d’origine gratuit de Cloudflare pour mon domaine, que j’« Importe » dans CloudPanel dans les paramètres du site « SSL/TLS » pour ce site (en collant simplement à la fois le certificat et la clé privée que j’avais téléchargés pour ce nom de domaine depuis mon compte Cloudflare.)

Installer Discourse

De retour dans Putty (ou un autre terminal), depuis le répertoire racine (c d Entrée pour revenir à la racine) → Installez l’installation standard de Discourse en utilisant ces commandes…

git clone https://github.com/discourse/discourse_docker.git /var/discourse

Entrée

cd /var/discourse

Entrée

chmod 700 containers

Copier la configuration autonome

Maintenant, nous copions le fichier /var/discourse/standalone.yml vers /var/discourse/containers/ sous le nom app.yml avant de l’éditer selon nos paramètres de site.

cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml

Éditer le fichier app.yml

En plus de modifier le fichier app.yml selon nos paramètres de site spécifiques, nous devons changer 3 autres choses dans ce fichier avant de l’enregistrer…

Sous la section templates:, nous devons ajouter :

  - "templates/web.socketed.template.yml"

Comme j’utilise Cloudflare, sous la section templates:, j’ajoute également :

  - "templates/cloudflare.template.yml"

Sous la section expose:, nous devons commenter :

  #- "80:80"   # http
  #- "443:443" # https

Sous la section env:, nous devons ajouter :

   DISCOURSE_FORCE_HTTPS: true
Pour référence, vous pouvez cliquer ici pour voir le contenu de mon app.yml fonctionnel sur noobish.me où j'utilise à la fois Cloudflare et Mailgun...
## 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

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/web.socketed.template.yml"
  - "templates/cloudflare.template.yml"

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 bootstrap en fonction de la RAM détectée, ou vous pouvez outrepasser
  db_shared_buffers: "4096MB"

  ## 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

  DISCOURSE_FORCE_HTTPS: true

  ## 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 bootstrap en fonction des CPU détectés, ou vous pouvez outrepasser
  UNICORN_WORKERS: 8

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

  ## 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'e-mails 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: 'admin@noobish.me'

  ## 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.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: postmaster@noobish.me
  DISCOURSE_SMTP_PASSWORD:  pYdRLyQW
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optionnel, par défaut true)
  #DISCOURSE_SMTP_DOMAIN: noobish.me    # (requis par certains fournisseurs)
  DISCOURSE_NOTIFICATION_EMAIL: noreply@noobish.me    # (adresse pour envoyer les notifications)

  ## L'adresse CDN http ou https pour cette instance Discourse (configurée pour extraire)
  ## voir https://meta.discourse.org/t/14857 pour les détails
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## La clé d'adresse IP Maxmind pour la recherche d'adresse IP
  ## voir https://meta.discourse.org/t/-/137387/23 pour les 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 les détails
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Toutes commandes personnalisées à exécuter après la construction
run:
  - exec: echo "Début des commandes personnalisées"
  ## Si vous souhaitez définir l'adresse e-mail 'De' pour votre première inscription, décommentez et modifiez :
  ## Après avoir reçu le premier e-mail 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"

Ensuite, nous enregistrons et quittons le fichier app.yml

CTRL-X

y

Entrée

Ensuite, nous définissons les permissions pour le fichier app.yml

chmod o-rwx containers/app.yml

puis…

Amorcer l’application

cd /var/discourse
./launcher bootstrap app

Cela prendra un temps considérable. À la fin du processus d’amorçage, on vous demandera de :

./launcher start app

Éditer le fichier Vhost

Maintenant, nous retournons dans notre CloudPanel et collons le code ci-dessous dans l’« Éditeur Vhost » pour notre site Discourse (en écrasant ce qui s’y trouve déjà). Bien sûr, remplacez votresite.com par votre véritable nom de domaine.

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  {{ssl_certificate_key}}
  {{ssl_certificate}}
  server_name yoursite.com;
  {{root}}

  {{nginx_access_log}}
  {{nginx_error_log}}

  if ($scheme != "https") {
    rewrite ^ https://$host$uri permanent;
  }

  location ~ /.well-known {
    auth_basic off;
    allow all;
  }

  {{settings}}

  add_header Cache-Control no-transform;

  location / {
                proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
                proxy_set_header Host $http_host;
                proxy_http_version 1.1;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;

  }
}

Redémarrer Nginx

Ensuite, nous devons redémarrer Nginx, ce que nous pouvons faire en cliquant sur un bouton dans la zone d’administration de CloudPanel…

Félicitations !

Maintenant, dans notre navigateur, nous pouvons aller à l’URL de notre site et lancer l’assistant de configuration de Discourse…

Coexister pacifiquement

Maintenant, je peux auto-héberger et gérer mon site Discourse aux côtés de mes sites Ghost, Wordpress, Drupal et autres types de sites en utilisant un panneau de gestion propre et léger, avec un besoin minimal à l’avenir d’utiliser le terminal/ligne de commande.


Pour installer des instances supplémentaires de Discourse…

3 « J'aime »

Vous devriez supprimer ces étapes et créer app.yml sans générer cette erreur. C’est déroutant.

(Si vous allez remplacer tout le fichier, pourquoi copier l’exemple ?) La meilleure chose à faire est de dire ce qui doit être modifié par rapport à l’exemple existant. Il semble qu’il s’agisse du modèle de socket et de la force https.

Cela vous donne deux copies de postgres, ce qui utilise plus de RAM qu’un seul postgres. Cela fonctionne, mais ce n’est pas une bonne pratique.

Il y a un certain nombre de choses qui font que ce n’est pas un bon exemple à suivre et il sera très difficile de le supporter. Je suis heureux que vous ayez trouvé une solution pour vous, mais je ne pense pas que ce soit une bonne voie à suivre pour les gens.

3 « J'aime »

Merci @pfaffman

Vous avez raison. Cela fait le travail, mais la procédure est trop désordonnée. Elle est dans le mauvais ordre. J’apprécie vos suggestions et je vais corriger cela.

Pourriez-vous clarifier pourquoi vous pensez cela ?

Parce que c’est compliqué et que c’est une bonne idée seulement pour les personnes qui peuvent le comprendre par elles-mêmes. C’est assez coûteux, et si le but est juste d’exécuter deux discours, deux machines virtuelles séparées sont une solution moins chère et plus facile dans la plupart des cas.

2 « J'aime »

Merci encore @pfaffman – J’ai maintenant simplifié la procédure et supprimé la section sur l’ajout d’un deuxième site Discourse sur le même serveur.

1 « J'aime »

J’ai reçu ce message

sudo apt update
sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io
usage: gpg [options] --dearmor [file]
curl: (23) Failed writing body

Pourquoi ?

Salut Antonio. Bienvenue.

Cela ressemble à un problème de docker et non à un problème lié à Discourse. Vous feriez probablement mieux de chercher avec votre système d’exploitation et de mettre à jour docker-ce que de demander ici.

Essayez-vous d’utiliser Discourse ? Ou CloudPanel ?

1 « J'aime »

J’ai suivi le guide ici. J’ai exécuté la première commande, pour l’installation de Docker, et le serveur a répondu ceci
la commande est :

1 « J'aime »

Il ne devrait pas y avoir d’antislashs à la fin de chacune de ces lignes. L’antislash échappe au saut de ligne, ce qui signifie que le shell traite la ligne suivante comme une continuation de la même ligne.

Dans ce cas, cela se traduira par une tentative d’exécution de ceci comme une seule commande, d’où l’erreur :
sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable\"

Il suffit de supprimer ces antislashs à la fin des lignes pour résoudre ce problème :

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io
2 « J'aime »

Merci, ça fonctionne maintenant correctement

2 « J'aime »

Merci @Simon_Manning – j’ai supprimé les barres obliques inverses dans l’extrait de code du didacticiel du message principal.

2 « J'aime »

Désolé, j’ai maintenant cette erreur : ÉCHEC

Pups::ExecError : /usr/local/bin/ruby -e 'if ENV[\"DISCOURSE_SMTP_ADDRESS\"] == \"smtp.example.com\"; puts \"Aborting! Mail is not configured!\"; exit 1; end' a échoué avec le retour #<Process::Status: pid 112 exit 1>
Emplacement de l'échec : /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec a échoué avec les paramètres « /usr/local/bin/ruby -e 'if ENV[\\\"DISCOURSE_SMTP_ADDRESS\\\"] == \\\"smtp.example.com\\\"; puts \\\"Aborting! Mail is not configured!\\\"; exit 1; end' »
bootstrap a échoué avec le code de sortie 1
** ÉCHEC DU BOOTSTRAP ** veuillez faire défiler vers le haut et rechercher les messages d'erreur précédents, il peut y en avoir plus d'un.
./discourse-doctor peut aider à diagnostiquer le problème.
214c73c4474ed59e7b6fb7f42143ce126d2b453022b08770da3af31ca2fdaaba

Je ne connais pas CloudPanel, mais les messages d’erreur semblent s’expliquer d’eux-mêmes :

'if ENV["DISCOURSE_SMTP_ADDRESS"] == "smtp.example.com"; puts "Aborting! Mail is not configured!"; exit 1; end'
'if ENV[\"DISCOURSE_SMTP_ADDRESS\"] == \"smtp.example.com\"; puts \"Aborting! Mail is not configured!\"; exit 1; end'\"

Il semble que votre messagerie n’ait pas été configurée lors de ./discourse-setup ou à l’intérieur de app.yml (vous pouvez la modifier manuellement à tout moment). :thinking:

2 « J'aime »

Excusez-moi tous, je suis professeur au lycée Fermi et j’essaie d’installer Discourse Community pour notre école. Puisque nous utilisons des panneaux cloud, j’ai suivi ce guide mais apparemment il manque quelque chose. Est-il possible d’obtenir de l’aide et un guide plus détaillé à suivre ? Mille mercis

1 « J'aime »

Je pense qu’une installation avancée n’est peut-être pas ce que vous recherchez si vous n’avez pas beaucoup de connaissances en administration système. Un autre point important à considérer est qu’une telle installation tombera sous unsupported-install, ce qui rend moins probable d’obtenir de l’aide ici si vous rencontrez des problèmes.

Si vous avez le budget et en fonction de la taille de votre communauté, il pourrait être préférable d’héberger Discourse sur un autre serveur et de suivre l’installation standard.

1 « J'aime »

Désolé, et à quoi servirait un service comme celui-ci ? À mon avis, le guide n’est peut-être pas très détaillé, il est fait pour les administrateurs système, il suffirait de simplement indiquer les différentes étapes. D’où je viens, on dit : personne ne naît déjà éduqué. Merci pour votre aide et votre temps.

1 « J'aime »

C’est exactement ça. C’est pourquoi l’installation standard a été recommandée.

Et c’est, @denvergeeks, la raison pour laquelle je ne pensais pas que créer un guide comme celui-ci était une bonne idée en premier lieu. C’est difficile à écrire, difficile à maintenir, et vous êtes la seule personne qui peut le vérifier.

4 « J'aime »

Je suis désolé mais je ne suis pas d’accord. J’utilise déjà le panneau cloud avec divers domaines, de plus la communauté Discourse serait sur un sous-domaine et alors la prémisse de l’auteur est très claire (le guide s’adresse à ceux qui utilisent Cloud Panel avec différents services installés sur VPS). Il suffit d’un peu d’effort pour mieux détailler le tout. Après tout, le partage des connaissances est la base des communautés, sinon j’aurais acheté un logiciel déjà installé et prêt à l’emploi. Quoi qu’il en soit, je ne veux déranger personne, si une aide est possible alors merci, sinon je ne vous dérangerai plus.

1 « J'aime »

@denvergeeks La configuration de l’e-mail est essentielle au bon fonctionnement et bien qu’il existe un lien vers l’installation standard, la façon dont le guide est actuellement écrit contourne la configuration de l’e-mail ainsi que diverses autres informations qui pourraient être importantes pour certaines configurations.

Je me demande s’il serait utile de remplacer les sections Installer Discourse à Démarrer l'application par quelque chose de plus proche de :

Installer et configurer Discourse

Suivez l’installation standard jusqu’aux étapes 1 à 6

Reconstruire Discourse :

./launcher rebuild app

Ensuite, dans la section Félicitations !, ajoutez une ligne après la capture d’écran pour dire quelque chose comme « Continuez avec le reste de la documentation d’installation standard ». Essentiellement, retravaillez le guide pour fournir des étapes supplémentaires qui complètent l’installation standard au lieu de fournir des instructions d’installation alternatives.

Je pense que les informations que vous avez fournies sur CloudPanel sont très utiles et que les instructions sont claires. Le côté Discourse pourrait simplement bénéficier d’une moins grande divergence par rapport à l’installation standard pour la rendre plus sûre, ainsi que du tag unsupported-install pour indiquer clairement (ou plus clairement) que nous entrons en territoire inconnu.

2 « J'aime »

[quote=“Antonio Cirillo, post:18, topic:266422, username:Antonio_Cirillo”]
Après tout, le partage des connaissances est la base des communautés, sinon j’aurais acheté un logiciel déjà installé et prêt à l’emploi. Quoi qu’il en soit, je ne veux déranger personne, si c’est possible d’obtenir de l’aide alors merci, sinon je ne vous dérangerai plus.
[/quote]La discussion s’éloigne un peu du sujet d’origine, mais soyez assuré que nous sommes heureux de vous aider. :slight_smile:

Pour résumer :

Si vous avez des connaissances informatiques de base, vous pouvez suivre l’installation standard. Vous aurez également besoin d’un nom de domaine et de configurer un service d’envoi d’e-mails tel que Mailgun (tutoriel ici : Configure Mailgun for email when using Digital Ocean for DNS).

Notez que nous n’aidons généralement pas sur des questions qui sortent du cadre de ce forum. Par exemple, la question « Comment enregistrer un nom de domaine ? » ne conviendrait pas ici.

Si vous n’avez pas de connaissances informatiques de base et en fonction de votre budget, vous pouvez demander un support payant sur Marketplace.

Enfin, vous pouvez également consulter les plans payants gérés par Discourse, où à peu près tout sera géré par nous et vous aurez accès à notre équipe de support.

Sachez également que nous offrons des réductions à des fins éducatives, puisque vous mentionnez que c’est pour votre école :

Y a-t-il des réductions pour les établissements d’enseignement ou les organisations à but non lucratif ?

Oui ! Si vous êtes légalement reconnu comme un établissement d’enseignement, nous offrons une réduction de 85 %. Si vous êtes légalement reconnu comme une organisation à but non lucratif exonérée d’impôts fédéraux, nous offrons une réduction de 50 %. Ces réductions s’appliquent uniquement à nos plans de base, pro et business, ne peuvent pas être combinées avec d’autres réductions et doivent être payées par carte de débit/crédit mensuellement ou annuellement. Contactez-nous après avoir commencé votre essai et nous ajouterons la réduction à votre compte.

4 « J'aime »