Guide d'installation détaillé + panneau de contrôle | Guide d'installation super détaillé de discourse + panneau de contrôle

Je suis un débutant en création de sites web. Par passion, je souhaite créer une communauté d’échange technique et je prévois de déployer Discourse. Je partage ce tutoriel dans l’espoir qu’il aidera ceux qui ont besoin d’installer Discourse, en leur évitant les pièges. Il y a peu de tutoriels en chinois pour Discourse, et certains sont obsolètes. J’ai passé plusieurs jours à faire des recherches en utilisant des logiciels de traduction.

Ce dont vous avez besoin pour créer votre propre Discourse :

Un serveur cloud léger Aliyun à Hong Kong. Les serveurs nationaux téléchargent les plugins GitHub à la vitesse d’un escargot. Je recommande donc un cloud léger Aliyun à Hong Kong, ou un autre serveur léger. Les serveurs légers sont moins chers et conviennent aux débutants. La configuration nécessite plus de 2 Go de RAM, sinon l’installation échouera. Si vous devez installer sur un serveur national, vous pouvez utiliser un serveur à Hong Kong avec paiement à l’usage, puis utiliser la fonction de création d’image de la plateforme pour cloner sur le serveur national. Cela vous fera gagner du temps en évitant les problèmes.

Un nom de domaine court et facile à retenir, résolu vers l’IP du serveur. Je recommande les extensions .com et .net. Les autres extensions manquent de reconnaissance. Vous pouvez rechercher des noms de domaine sur Recherche de noms de domaine en masse et utiliser la recherche par règles pour trouver des noms courts.

Système : Ubuntu 20.04, couramment utilisé.

Après avoir activé un nouveau serveur, ouvrez d’abord tous les ports du pare-feu (une fois le débogage terminé, fermez les ports inutiles selon vos besoins pour éviter les attaques de pirates). Définissez le mot de passe root dans le panneau de contrôle, puis connectez-vous directement au serveur via SSH depuis le navigateur, ou téléchargez un logiciel SSH comme XTerminal.

Collez ensuite les trois commandes suivantes et appuyez sur Entrée pour les exécuter. Lorsque des options s’affichent, appuyez sur “yes” pour mettre à jour la source du système et installer le logiciel git.

apt update
apt upgrade -y
apt install git

Collez ensuite les trois commandes suivantes et appuyez sur Entrée pour les exécuter en tant qu’administrateur. Cette étape sudo -s si elle n’est pas effectuée avec soin, peut entraîner des messages d’échec de création inexplicables lors de l’installation, causant l’échec de l’installation, car les permissions sont insuffisantes.

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containers

Après le téléchargement, exécutez l’assistant d’installation.

./discourse-setup

Ensuite, suivez les instructions pour saisir le domaine à lier. La première installation prend beaucoup de temps. Il est conseillé de remplir n’importe quoi pour les autres domaines que le domaine principal, puis de reconstruire une fois que cela a réussi. Vous pouvez utiliser la capture d’écran et la traduction d’images WeChat si vous ne comprenez pas. Pour les e-mails, vous pouvez utiliser le service de messagerie Aliyun.

Ensuite, un message vous demandera si vous souhaitez continuer l’installation ou l’annuler en appuyant sur Ctrl+C. Il est conseillé de continuer l’installation.

Une fois l’installation terminée, accédez au domaine lié. Si la page d’inscription s’affiche, cela signifie que Discourse est installé avec succès.

Ensuite, installez un panneau de contrôle Linux. Cette étape est principalement destinée à l’installation d’autres programmes de site web et à une gestion facile pour les débutants. J’ai comparé ce panneau à Baota et il est beaucoup plus simple, plus épuré, sans beaucoup de publicités, et l’installation ne prend que quelques secondes, contrairement à Baota qui nécessite une longue compilation de l’environnement.

Exécutez le script suivant :

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

Pendant l’installation, un message vous indiquera que Docker est déjà installé, puis vous demandera de vous connecter à l’arrière-plan.

Suivez les instructions, trouvez l’arrière-plan et connectez-vous. Dans la gestion des conteneurs, vous verrez l’application, qui est Discourse. Vous pouvez la démarrer ou l’arrêter ici.

Accédez ensuite aux fichiers et modifiez app.yml. Les modifications principales sont commentées en chinois.

## 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"
  ## Uncomment the next line to enable the IPv6 listener
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Uncomment these two lines if you wish to add Lets Encrypt (https)
  - "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"   # http
  - "443:443" # https

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: "128MB"
  ## Modifier la taille maximale de téléchargement des pièces jointes
  upload_size: 300m
  ## 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: zh_CN

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

  ## TODO: The domain name this Discourse instance will respond to
  ## Required. Discourse will not work with a bare IP number.
  ## Modifier le domaine principal
  DISCOURSE_HOSTNAME: bbs.izdh.net

  ## 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'
  ## Modifier l'e-mail de l'administrateur
  DISCOURSE_DEVELOPER_EMAILS: 'xxxx@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!
  ## Modifier le serveur de messagerie sortant
  DISCOURSE_SMTP_ADDRESS: smtpdm.aliyun.com
  ## Modifier le port du serveur de messagerie sortant
  DISCOURSE_SMTP_PORT: 80
  ## Modifier le nom d'utilisateur du compte de messagerie sortant automatique
  DISCOURSE_SMTP_USER_NAME: xxxx@xxx.net
  ## Modifier le mot de passe du serveur de messagerie sortant
  DISCOURSE_SMTP_PASSWORD: "dj6bCRxoHt25NcD6"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)
  DISCOURSE_SMTP_DOMAIN: smtpdm.aliyun.com
  ## Modifier le nom d'utilisateur du compte de messagerie sortant automatique
  DISCOURSE_NOTIFICATION_EMAIL: xxxx@xxx.net
  DISCOURSE_SMTP_ENABLE_START_TLS: false
  ## If you added the Lets Encrypt template, uncomment below to get a free SSL certificate
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.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

## 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
## Installer 2 plugins
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved	 
          - git clone https://github.com/discourse/discourse-reactions

## Any custom commands to run after building
run:
  - exec: echo "Beginning of custom commands"
  ## 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"

Après avoir modifié et enregistré, revenez au terminal, utilisez la commande ou arrêtez le conteneur en arrière-plan, puis reconstruisez. Cependant, il semble que sans installer ce panneau, vous n’avez pas besoin d’arrêter le conteneur. Reconstruire directement sans arrêter le conteneur après avoir installé ce panneau entraînera une erreur.

./launcher stop app
./launcher bootstrap app`

Attendez que la reconstruction soit terminée, puis exécutez la commande de démarrage du conteneur.

./launcher start app

En accédant à Discourse, il vous sera demandé d’envoyer un e-mail pour activer. Si vous ne le recevez pas, vous pouvez utiliser la commande suivante pour créer un compte administrateur et sauter directement cette étape. Ensuite, définissez la langue sur chinois dans les paramètres à gauche. Il y a également un endroit pour tester l’envoi d’e-mails, qui vous indiquera la raison de l’erreur. Essayez plusieurs fois et cela devrait fonctionner.

./launcher enter app
rake admin:create

Si vous avez besoin de créer d’autres sites web, référez-vous directement au tutoriel officiel. C’est assez simple, je ne vais pas entrer dans les détails. Vous pouvez également créer un nouvel environnement sur le site web, puis modifier les permissions du site web à 777 pour installer divers programmes.

Le principal problème résolu est de pouvoir exécuter plusieurs sites web sur un seul serveur, ce qui permet d’économiser sur les coûts d’achat de serveurs et est plus adapté aux débutants.

Plus tard, lors des tests d’envoi d’e-mails, j’ai rencontré un problème :

Ces paramètres du conteneur, modifiés dans app.yml, ne semblent pas avoir d’effet lors de la reconstruction. Il faut les modifier dans les variables d’environnement du conteneur. Cependant, cela ne prend que 5 à 6 secondes pour prendre effet. Je ne suis pas encore sûr de l’impact sur l’installation des plugins.

La coexistence avec d’autres sites web semble nécessiter de créer d’abord un proxy inverse, puis de modifier le port 443 du conteneur par défaut en 10443, puis de configurer le certificat pour pouvoir y accéder normalement.

Proxy inverse

Configuration du certificat

2 « J'aime »

En réalité, le dossier dans lequel vous clonez discourse_docker n’a pas d’importance, car il sera automatiquement installé dans /var/discourse…

En vérité, l’emplacement auquel on clone le dépôt discourse_docker est sans importance, car il sera invariablement installé automatiquement dans le répertoire /var/discourse…

En théorie, c’est peu probable. La procédure normale consiste à modifier le fichier app.yml puis à reconstruire.

En théorie, cela semble assez improbable. La procédure appropriée consisterait à modifier le fichier app.yml puis à reconstruire l’application.

1 « J'aime »

:sweat_smile: Mais la modification du fichier de configuration s’est avérée infructueuse, car la reconstruction n’a pas pris effet. Cependant, la modification des variables d’environnement du conteneur a fonctionné à merveille en quelques secondes, m’épargnant la peine de reconstruire. L’impact sur les plugins reste incertain pour le moment.

Auparavant, j’avais négligé d’entrer ‘sudo -s’, ce qui a entraîné une avalanche de messages d’erreur. J’étais complètement déconcerté quant à la source du problème.

Je dis, mon vieux, sauriez-vous comment un nom d’utilisateur chinois pourrait utiliser l’API ? L’en-tête, vous voyez, ne doit pas contenir de caractères chinois.

Ah, y a-t-il ce problème ? Veuillez partager les journaux.

Ah, je dis, est-ce vraiment le problème ? Peut-être pourriez-vous partager les entrées du journal avec moi.

Le message disait que c’était possible, mais peu importe comment j’essayais, je n’y arrivais tout simplement pas… :sweat_smile:

Si possible, nous pourrions peut-être essayer ceci. Dieu seul sait quel encodage votre requête a utilisé.

1 « J'aime »

C’est incroyable de tomber sur un message en chinois sur ce forum ! :sob:

Cher auteur du fil, puis-je vous demander si vous seriez prêt à partager vos expériences dans le développement de forums ? Vos idées seraient très appréciées.

1 « J'aime »

:sweat_smile: Je suis aussi un novice, et je pense que le contenu doit être l’objectif principal, la technologie jouant un rôle secondaire. Actuellement, je suis plutôt perplexe quant à la manière d’utiliser Qiniu Cloud pour le stockage de contenu, et je ne suis pas non plus sûr des méthodes les plus efficaces pour attirer du trafic vers ma plateforme.

Par la suite, un bug a été découvert. La taille de téléchargement upload_size: 300m n’était pas efficace pour la taille des pièces jointes, et la cause première n’a pas pu être identifiée. J’ai donc dû renoncer à installer le panneau de contrôle.

J’utilise Amazon S3 pour mes besoins de stockage.

Cependant, il est à noter qu’Alibaba OSS est désormais compatible avec S3. Vous pourriez envisager de l’essayer.

En effet, une fois l’infrastructure mise en place, l’attention se porte sur le remplissage du contenu.

Il semble qu’il faille le modifier selon la méthode qu’il suggère.

Je me souviens que lorsque j’ai apporté des modifications à l’époque, j’ai également ajusté les paramètres et refactorisé. J’ai utilisé Tencent Cloud, et chaque refactorisation nécessitait une connexion proxy. C’était un véritable cauchemar à régler.

@Lhc_fl @zengyunsi Y a-t-il un moyen de mettre en œuvre la protection du champ nom d’utilisateur du forum ? Les paramètres personnalisés n’incluent que le filtrage des mots sensibles et les champs utilisateur autorisés.

Prise en charge des noms d’utilisateur Unicode chinois : Discourse 支持中文用户名 - Discourse - iSharkFly

Prise en charge des noms d’utilisateur Unicode chinois : Discourse prend en charge les noms d’utilisateur chinois - Discourse - iSharkFly

Cependant, qu’entend-on par protection du champ du nom d’utilisateur, et la modification du nom d’utilisateur doit-elle être approuvée ?

Si c’est le cas, Discourse n’a pas de fonctionnalité native pour cela. Je vous suggère d’envisager le développement d’un plugin personnalisé pour répondre à cette exigence.

Alternativement, vous pourriez envisager de procéder à des examens périodiques de tous les noms d’utilisateur sur la plateforme afin d’identifier tout problème potentiel.

@go_ahead De plus, je vous recommande de poser votre question en anglais ou dans une combinaison d’anglais et de chinois dans un fil de discussion séparé. Cette approche est préférable, car les discussions hors sujet dans la section méta sont généralement sujettes à la séparation des fils de discussion.

L’utilisation exclusive du chinois peut s’avérer difficile pour nos modérateurs ne parlant pas chinois, car ils pourraient avoir du mal à comprendre le sujet de notre discussion.

J’ai l’impression d’avoir trouvé cette fonctionnalité ; je crois que c’est celle-ci.

1 « J'aime »

Hélas, ma maîtrise de la langue anglaise est lamentablement inadéquate, et je manque d’expérience pour communiquer avec eux. Je m’efforcerai d’être plus attentif à cette question à l’avenir. Je vous suis très reconnaissant de vos conseils !

Selon ma compréhension, les modérateurs classent généralement les sujets contenant du contenu chinois sous l’étiquette chinese-translation.

En général, le problème n’est pas particulièrement important, et on peut également fournir un résumé en anglais sous son message.

En réalité, ce n’est pas trop problématique, car les modérateurs peuvent utiliser un logiciel de traduction pour en comprendre le sens général. Le problème est sans grande conséquence.

1 « J'aime »

🇨🇳 Discourse Official Install Guide | Discourse 云平台安装 Ce contenu est probablement toujours utilisable.

Cependant, nous utilisons des serveurs dédiés, en commençant par des conteneurs Docker, donc nous n’avons peut-être pas utilisé la configuration de la console.

Le guide d’installation officiel de Discourse référencé dans le texte chinois est probablement toujours applicable. Cependant, il convient de noter que notre implémentation utilise des serveurs bare metal, en commençant par des conteneurs Docker. À ce titre, nous n’avons peut-être pas utilisé les configurations liées à la console mentionnées dans le guide.

Cette approche, en commençant par des conteneurs Docker sur des serveurs purs, diverge potentiellement du processus d’installation standard, en particulier en ce qui concerne la configuration et la gestion de la console. Il est crucial de garder cette distinction à l’esprit lorsque vous suivez le guide officiel, car certaines étapes peuvent devoir être adaptées ou omises pour convenir à notre méthode de déploiement spécifique.

:sweat_smile: Il s’agit de l’API, il n’est pas possible de l’appeler en chinois.

:sweat_smile: Je crains que l’API ne prenne pas en charge la saisie en chinois.

Il semble que le problème vienne de ce panneau particulier… Il est peut-être préférable de revenir à la méthode d’origine et d’effectuer une installation propre. Je suis enclin à utiliser Qiniu Cloud à cette fin.