Configurer un serveur de mise en scène

Il existe plusieurs astuces pour vous aider lors de la configuration d’un serveur de staging.

Qu’est-ce qu’un serveur de staging ?

Un serveur de staging est essentiellement un clone d’un site de production. Il réside également sur un serveur et fonctionne de manière identique. Il s’exécute dans un conteneur Docker, tout comme un site Discourse normal.

Il existe pour vous donner un endroit où essayer des choses risquées, ou pour tester des choses que vous ne pouvez pas facilement cacher à vos utilisateurs. Il est très utile pour tester des publicités en utilisant le lien Discourse Advertising Plugin (Ads), ou si vous voulez faire quelque chose de fantaisiste comme une importation ou une fusion de forum.

Ceci contraste avec un serveur de développement, qui s’exécute généralement dans un endroit facilement accessible (et isolé) afin qu’un développeur puisse modifier le code en toute sécurité.

De quoi ai-je besoin ?

  1. Tout ce dont vous avez besoin pour une installation standard auto-hébergée

  2. Si vous avez configuré des sauvegardes S3, votre vie sera beaucoup plus facile

    • sinon, vous aurez besoin d’un moyen de déplacer de gros fichiers vers et depuis un serveur via SSH

Étapes

Configurez votre serveur comme vous le souhaitez

Généralement sur un serveur Ubuntu virtuel hébergé sur Digital Ocean, mais vous pouvez utiliser ce avec quoi vous êtes à l’aise.

Installez Discourse

Via ce guide (ou peut-être via dashboard.literatecomputing.com). Je recommande d’utiliser des identifiants d’e-mail “bidon” (vous n’avez pas besoin et ne voulez pas que l’e-mail fonctionne).

discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub

Confirmez que votre installation fonctionne :

Créez un compte administrateur (si nécessaire)

Créez-vous un compte administrateur depuis la ligne de commande. Cela évite d’avoir à vous authentifier par e-mail.

./launcher enter app
rake admin:create

Ce n’est pas strictement nécessaire, sauf pour tester l’installation, car vous pouvez restaurer à partir d’une sauvegarde depuis la ligne de commande.

Modifiez app.yml et ajoutez quelques ajustements

  1. Vous pourriez vouloir faire une copie de l’app.yml original (j’appelle la mienne app.vanilla.yml) à laquelle vous pourrez revenir si vous faites des erreurs.

  2. En bas de la section env, ajoutez ces lignes :

      ## Paramètres spécifiques au serveur de staging
      DISCOURSE_AUTOMATIC_BACKUPS_ENABLED: false
      DISCOURSE_LOGIN_REQUIRED: true
      DISCOURSE_DISABLE_EMAILS: 'yes'
      DISCOURSE_S3_DISABLE_CLEANUP: true
      DISCOURSE_ALLOW_RESTORE: true
    
  3. Si vous avez configuré des sauvegardes S3 (ou similaires), ajoutez-les également (avec vos paramètres du site principal)

      ## Configuration S3
      DISCOURSE_S3_ACCESS_KEY_ID: 'votre_clé'
      DISCOURSE_S3_SECRET_ACCESS_KEY: 'votre_secret'
      DISCOURSE_BACKUP_LOCATION: 's3'
      DISCOURSE_S3_BACKUP_BUCKET: 'votre_emplacement_de_sauvegardes'
      DISCOURSE_S3_REGION: 'votre_région_s3'
      DISCOURSE_S3_DISABLE_CLEANUP: true
    

    et si vous faites également des téléchargements S3 :

      DISCOURSE_ENABLE_S3_UPLOADS: true
      DISCOURSE_S3_UPLOAD_BUCKET: 'votre_emplacement_de_téléchargements'
    
  4. Vous pourriez vouloir ajouter les mêmes plugins que ceux de votre site de production pendant que vous y êtes.

  5. Effectuez une reconstruction

    • ./launcher rebuild app

Gestion du serveur de staging

Vous avez maintenant un serveur de staging connecté à vos sauvegardes S3 (mais qui ne les écrasera pas), facile à restaurer, et qui ne peut en aucun cas envoyer d’e-mails à qui que ce soit. Parfait !

Vous pouvez restaurer une nouvelle sauvegarde sur le serveur de staging et vous amuser. Si vous n’aimez pas ce que vous avez, il vous suffit de le restaurer à nouveau.

L’arrêter ou l’allumer

Si vous laissez votre serveur de staging “allumé” pendant de longues périodes, vous risquez qu’il soit indexé par Google, et que vos utilisateurs s’y connectent accidentellement. Comme leurs identifiants sont un clone de votre site de production, c’est très possible.

Un moyen simple d’atténuer ces deux problèmes est simplement d’arrêter Discourse :

./launcher stop app

Et pour le rallumer afin de pouvoir l’utiliser :

./launcher restart app

Mises à jour

Vous devrez vous assurer de mettre à jour/reconstruire à la fois le serveur de staging et votre site de production en même temps si vous voulez vous assurer que les choses restent alignées du point de vue des plugins et du code. Il en va de même pour les modifications de app.yml.

Si vous n’utilisez pas S3, vous devrez déplacer manuellement les sauvegardes entre les serveurs. Et elles sont volumineuses !

Alimenter un serveur de test

Si vous voulez un serveur de staging, vous devriez le peupler avec vos données réelles de votre forum réel via une Restauration. Parfois, ce sont vos données spécifiques qui causent le problème, et tester votre forum avec un autre ensemble de données peut vous donner un faux sentiment de sécurité.

Si ce que vous voulez est un serveur de test pour voir à quoi ressemble Discourse, alors vous pourriez vouloir vérifier les choses avec de fausses données, et si c’est le cas, vous pouvez faire ceci :

./launcher enter app
ALLOW_DEV_POPULATE=1 bundle install
ALLOW_DEV_POPULATE=1 rake dev:populate

Cela alimentera votre forum avec de fausses données afin que vous puissiez voir à quoi ressemblent les choses avec les thèmes et plugins que vous souhaitez. Si vous n’avez pas encore lancé votre forum, cela vous donnera une idée de ce à quoi il est probable qu’il ressemble.

Gestion de l’authentification à deux facteurs

Bien que le nom d’utilisateur / mot de passe de votre compte principal fonctionne également très bien sur le site de staging, ce n’est pas aussi simple avec la 2FA. En cas de problème, désactivez la 2FA :

./launcher enter app
rake users:disable_2fa[<NOM_UTILISATEUR>]
32 « J'aime »

Nathan, excellente idée de rassembler ce guide.

Peut-être que je l’ai manqué, mais quelle étape désactive l’e-mail ici ?

5 « J'aime »

Bonne question. La saisie d’identifiants SMTP incorrects l’empêche absolument, mais il serait logique de désactiver également les e-mails avec :

DISCOURSE_DISABLE_EMAILS = yes

De plus, cela est activé automatiquement lors d’une restauration, donc ce n’est pas vraiment nécessaire.

8 « J'aime »

Ajouté des instructions pour désactiver l’application à l’OP.

2 « J'aime »

C’est exact, et il est souvent agréable de pouvoir obtenir un lien de connexion, donc je recommanderais

 DISCOURSE_DISABLE_EMAILS = 'non-staff'
6 « J'aime »

Que diriez-vous d’une section sur la création de faux utilisateurs ? Certains administrateurs peuvent ne pas vouloir d’informations personnelles identifiables sur les serveurs de staging. Qu’est-ce que les gens utilisent pour créer de faux utilisateurs à plus grande échelle ou se débarrasser des PII ?

J’ai pensé à utiliser une importation de production, puis à exécuter le travail d’anonymisation sur chacun, mais cela finirait par donner un site de staging très terne !

Puis-je suggérer que le fil de discussion soit transformé en Wiki ?

Quelques liens :

https://hackernoon.com/ruby-on-rails-and-the-complexity-of-fake-user-profiles-made-simple-mf4j31gv

Je l’ai transformé en wiki.

En général, je veux qu’un site de staging utilise les mêmes données que le site de production afin de pouvoir tester que les choses fonctionneront avec les données réelles. Mais peut-être que les gens veulent des données fictives pour voir ce que Discourse peut faire avant de commencer à l’utiliser ? (Oh, je suppose que ces liens contiennent des solutions plus sophistiquées.)

Je suppose que vous pourriez avoir un User.create dans une boucle avec une liste de noms provenant de quelque part.

2 « J'aime »

Ce n’est évidemment pas ma spécialité :slightly_smiling_face:, mais serait-ce une bonne occasion d’utiliser rake dev:populate ?

cd /var/www/discourse
ALLOW_DEV_POPULATE=1 bundle install
ALLOW_DEV_POPULATE=1 rake dev:populate

Je pense que cela fonctionnerait également sur un site de production qui est plutôt un environnement de staging/site de test.

4 « J'aime »

Apparemment, ce n’est pas un obstacle !

C’est une excellente suggestion :

Code de tâche : discourse/populate.rake at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse (github.com)

Actions spécifiques à l’utilisateur :

1 « J'aime »

Bien ! En effet, quelqu’un avait déjà pensé à ce problème !

EDIT : et pour le plaisir, j’ai essayé cela sur un site de test récemment installé ; j’ai collé vos tâches bundle et rake et cela a fait ceci :

root@test2-app:/var/www/discourse# ALLOW_DEV_POPULATE=1 rake dev:populate
OK
Je n'ai pas détecté de fichier `config/dev.yml` personnalisé, en créant un pour vous où vous pouvez modifier les valeurs par défaut.
Il y a 9 enregistrements de groupe. Création de 6 de plus.
......
Il y a 3 enregistrements d'utilisateur. Création de 27 de plus.
...........................
Il y a 4 enregistrements de catégorie. Création de 26 de plus.
..........................
discourse-solved activé sur la catégorie 'Recipes' (12).
Création de 30 enregistrements d'étiquettes d'exemple
..............................
Il y a 6 enregistrements de sujet. Création de 24 de plus.
........................
root@test2-app:/var/www/discourse# 

3 « J'aime »

Le gros problème avec cela est que votre ensemble de données ne représente plus vos données réelles.

Un serveur de staging doit être représentatif du réel, sinon vous ne pouvez pas tout tester avant de passer en production avec les modifications prévues.

J’ai été témoin de défaillances assez impressionnantes où des tests non représentatifs n’ont pas réussi à identifier des problèmes qui sont survenus plus tard dans l’environnement réel. Le plus souvent, ils se sont produits en raison de problèmes de qualité des données.

Les noms de famille à double trait d’union (avec et sans le trait d’union) et les caractères accentués, par exemple, ont causé d’énormes problèmes.

S’il s’agit d’un véritable serveur de staging, il doit imiter le réel précisément. La copie n’a pas besoin d’être visible par les utilisateurs normaux et la désactivation des e-mails non professionnels est tout à fait conseillée, mais sinon, cela ne fait qu’inviter les problèmes.

5 « J'aime »

Je suis d’accord. Ma question était motivée par un client qui craignait d’avoir de vraies identités de clients dans l’environnement de staging.

Idéalement, nous devrions avoir un script pour mélanger les noms et les adresses e-mail tout en laissant tout le reste inchangé.

1 « J'aime »

Cela ressemble à une conversation assez simple. S’ils n’ont pas de copie représentative, alors ils n’ont pas de site de staging.

Si c’est déployé et sécurisé de la même manière que le site en direct, quel est leur risque perçu ?

2 « J'aime »

Je suis avec Stephen. Le client est-il plus nerveux d’avoir des données réelles sur un site de staging, ou de ne pas avoir de site de staging qui teste réellement vos données réelles ?

Si vous ne testez pas avec vos données réelles de production, alors vous ne savez pas ce qui se passera lorsque vous utiliserez les données réelles.

Et cette discussion s’éloigne beaucoup du sujet initial. :slight_smile:

2 « J'aime »

Je pense que cela devrait être configuré pour supprimer les publications après 30 jours ou quelque chose comme ça. J’ai ajouté cela à l’OP. Il y a des moments où des données fictives sont utiles. Les plus paranoïaques d’entre nous (moi y compris) ont des raisons du monde réel de ne pas faire confiance à un serveur de staging s’il n’a pas été testé avec vos données réelles.

4 « J'aime »

Après avoir rencontré quelques problèmes après la mise en œuvre de la 2FA sur notre site, j’ai ajouté ceci :

1 « J'aime »

WoW – c’était génial ! Bada-bing-bada-boom !

Je me sens tellement productif après avoir importé ces données factices… tout d’un coup, mon forum de test s’est automatiquement rempli d’un tas d’utilisateurs et de publications et de tags et de catégories et de groupes… oh là là !

Merci beaucoup @nathank et @pfaffman et @merefield et @JammyDodger et @Stephen… oh là là !

Happy So Excited GIF

5 « J'aime »

J’aimerais lire des recommandations sur la façon de désactiver le sondage pop via la ligne de commande.

La meilleure façon est de définir une variable d’environnement DISCOURSE_pop3_polling_enabled=false

Vous devez mettre en majuscules le nom entier de la variable, mais je ne peux pas le faire sur mon téléphone.

2 « J'aime »

J’ai récemment migré mon forum de production vers S3 et CloudFront. J’avais déjà un serveur de staging opérationnel, mais il n’est plus synchronisé avec la production et S3 car je ne suis pas sûr si j’ai besoin d’un bucket séparé et d’une connexion CDN - je ne tiens pas particulièrement à engager des coûts AWS supplémentaires juste pour un serveur de staging. Est-il présumé que pointer les deux serveurs vers le même bucket S3 n’est pas recommandé ? Quelle est la bonne façon de faire cela ?

1 « J'aime »