Ein Staging-Server einrichten

Es gibt mehrere Tricks, die bei der Einrichtung eines Staging-Servers hilfreich sein können.

Was ist ein Staging-Server?

Ein Staging-Server ist im Wesentlichen eine Kopie einer Produktionsseite. Er befindet sich ebenfalls auf einem Server und funktioniert identisch. Er läuft in einem Docker-Container, genau wie eine normale Discourse-Site.

Er dient dazu, Ihnen einen Ort zu bieten, an dem Sie riskante Dinge ausprobieren können, oder Dinge testen können, die Sie nicht einfach vor Ihren Benutzern verbergen können. Er ist sehr nützlich für das Testen von Anzeigen mit dem https://meta.discourse.org/t/official-advertising-ad-plugin-for-discourse/33734 oder wenn Sie etwas Ausgefallenes wie einen Forenimport oder eine Zusammenführung durchführen möchten.

Dies steht im Gegensatz zu einem Entwicklungsserver, der normalerweise an einem leicht zugänglichen (und isolierten) Ort läuft, damit ein Entwickler sicher am Code basteln kann.

Was brauche ich?

  1. Alles, was Sie für eine Standard-Self-Hosted-Installation benötigen.

  2. Wenn Sie S3-Backups eingerichtet haben, wird Ihr Leben erheblich einfacher.

    • Andernfalls benötigen Sie eine Möglichkeit, große Dateien über SSH in und aus einem Server zu verschieben.

Schritte

Richten Sie Ihren Server nach Wunsch ein

Typischerweise auf einem virtuellen Ubuntu-Server, der auf Digital Ocean gehostet wird, aber Sie können verwenden, womit Sie sich am wohlsten fühlen.

Discourse installieren

Über diese Anleitung (oder vielleicht über dashboard.literatecomputing.com). Ich empfehle die Verwendung von “Junk”-E-Mail-Anmeldeinformationen (Sie brauchen und wollen nicht, dass E-Mails funktionieren).

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

Bestätigen Sie, dass Ihre Installation funktioniert:

Richten Sie ein Admin-Konto ein (falls erforderlich)

Richten Sie sich ein Admin-Konto über die Kommandozeile ein. Dies überspringt die Notwendigkeit der Authentifizierung per E-Mail.

./launcher enter app
rake admin:create

Dies ist nicht unbedingt erforderlich, außer zum Testen der Installation, da Sie die Wiederherstellung aus einem Backup über die Kommandozeile durchführen können.

Bearbeiten Sie app.yml und nehmen Sie einige Anpassungen vor

  1. Möglicherweise möchten Sie eine Kopie der ursprünglichen app.yml erstellen (ich nenne meine app.vanilla.yml), zu der Sie zurückkehren können, wenn Sie etwas vermasseln.

  2. Fügen Sie am Ende des Abschnitts env diese Zeilen hinzu:

      ## Staging-server-spezifische Einstellungen
      DISCOURSE_AUTOMATIC_BACKUPS_ENABLED: false
      DISCOURSE_LOGIN_REQUIRED: true
      DISCOURSE_DISABLE_EMAILS: 'yes'
      DISCOURSE_S3_DISABLE_CLEANUP: true
      DISCOURSE_ALLOW_RESTORE: true
    
  3. Wenn Sie S3 (oder ähnliche) Backups konfiguriert haben, fügen Sie auch diese hinzu (mit Ihren Einstellungen von der Hauptseite).

      ## S3-Konfiguration
      DISCOURSE_S3_ACCESS_KEY_ID: 'your_key'
      DISCOURSE_S3_SECRET_ACCESS_KEY: 'your_secret'
      DISCOURSE_BACKUP_LOCATION: 's3'
      DISCOURSE_S3_BACKUP_BUCKET: 'your_backups_location'
      DISCOURSE_S3_REGION: 'your_s3_region'
      DISCOURSE_S3_DISABLE_CLEANUP: true
    

    und wenn Sie auch S3-Uploads durchführen:

      DISCOURSE_ENABLE_S3_UPLOADS: true
      DISCOURSE_S3_UPLOAD_BUCKET: 'your_uploads_location'
    
  4. Möglicherweise möchten Sie die gleichen Plugins hinzufügen, die Sie auch auf Ihrer Produktionsseite haben.

  5. Führen Sie einen Rebuild durch

    • ./launcher rebuild app

Verwaltung des Staging-Servers

Sie haben jetzt einen Staging-Server, der mit Ihren S3-Backups verbunden ist (aber diese nicht überschreibt), einfach wiederhergestellt werden kann und unter keinen Umständen E-Mails an niemanden senden kann. Perfekt!

Sie können ein frisches Backup auf dem Staging-Server wiederherstellen und loslegen. Wenn Ihnen nicht gefällt, was Sie haben, stellen Sie es einfach wieder her.

Ausschalten oder Einschalten

Wenn Sie Ihren Staging-Server längere Zeit “eingeschaltet” lassen, riskieren Sie, dass er von Google indiziert wird und Ihre Benutzer sich versehentlich dort anmelden. Da ihre Anmeldedaten eine Kopie Ihrer Produktionsseite sind, ist dies sehr gut möglich.

Eine einfache Möglichkeit, diese beiden Dinge zu mildern, ist das einfache Ausschalten von Discourse:

./launcher stop app

Und um ihn wieder einzuschalten, damit Sie ihn nutzen können:

./launcher restart app

Updates

Sie müssen sicherstellen, dass Sie sowohl den Staging-Server als auch Ihre Produktionsseite gleichzeitig aktualisieren/rebuilden, wenn Sie sicherstellen möchten, dass die Dinge aus Plugin- und Code-Sicht aufeinander abgestimmt bleiben. Das Gleiche gilt für Änderungen an app.yml.

Wenn Sie kein S3 verwenden, müssen Sie Backups manuell zwischen den Servern verschieben. Und sie sind groß!

Befüllen eines Testservers

Wenn Sie einen Staging-Server wünschen, sollten Sie ihn mit Ihren tatsächlichen Daten von Ihrem tatsächlichen Forum über eine Restore befüllen. Manchmal sind es Ihre spezifischen Daten, die das Problem verursachen, und das Testen Ihres Forums mit anderen Daten kann Ihnen ein falsches Gefühl der Sicherheit geben.

Wenn Sie jedoch einen Testserver wünschen, um zu sehen, wie Discourse ist, sollten Sie die Dinge mit einigen gefälschten Daten überprüfen, und wenn Sie das tun, können Sie Folgendes tun:

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

Dies wird Ihr Forum mit einigen gefälschten Daten befüllen, damit Sie sehen können, wie die Dinge mit den von Ihnen gewünschten Themes und Plugins aussehen. Wenn Sie Ihr Forum noch nicht gestartet haben, erhalten Sie hier einen Eindruck davon, wie die Dinge wahrscheinlich aussehen werden.

Verwaltung der Zwei-Faktor-Authentifizierung

Während Ihr Konto-Benutzername / Passwort von Ihrer Hauptseite auch auf der Staging-Seite funktionieren sollte, ist dies bei 2FA nicht so schön. Wenn Sie ein Problem haben, schalten Sie 2FA aus:

./launcher enter app
rake users:disable_2fa[<USERNAME>]
32 „Gefällt mir“

Nathan, eine tolle Idee, diesen Leitfaden zusammenzustellen.

Vielleicht habe ich es übersehen, aber welcher Schritt hier deaktiviert E-Mails?

5 „Gefällt mir“

Gute Frage. Die Eingabe ungültiger SMTP-Anmeldeinformationen verhindert dies absolut, aber es wäre sinnvoll, auch E-Mails mit Folgendem zu deaktivieren:

DISCOURSE_DISABLE_EMAILS = yes

Außerdem wird dies bei einer Wiederherstellung automatisch aktiviert, sodass es nicht wirklich notwendig ist.

8 „Gefällt mir“

Einige Anweisungen zum Ausschalten der App wurden zum OP hinzugefügt.

2 „Gefällt mir“

Richtig, und es ist oft schön, einen Login-Link zu erhalten, daher würde ich empfehlen:

 DISCOURSE_DISABLE_EMAILS = 'non-staff'
6 „Gefällt mir“

Wie wäre es mit einem Abschnitt über die Erstellung von gefälschten Benutzern? Einige Administratoren möchten möglicherweise keine persönlich identifizierbaren Informationen auf Staging-Servern haben. Was verwenden die Leute, um gefälschte Benutzer in größerem Maßstab zu erstellen oder PII zu entfernen?

Ich dachte daran, einen Produktionsimport zu verwenden und dann den Anon-Job für jeden auszuführen, aber das würde zu einer sehr langweiligen Staging-Site führen!

Kann ich vorschlagen, dass der OP in ein Wiki umgewandelt wird?

Einige Links:

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

Ich habe es zu einem Wiki gemacht.

Im Allgemeinen möchte ich, dass eine Staging-Site dieselben Daten wie die Produktions-Site verwendet, damit Sie testen können, ob Dinge mit den tatsächlichen Daten funktionieren. Aber vielleicht möchten Leute gefälschte Daten, um zu sehen, was Discourse tun kann, bevor sie es benutzen? (Oh, ich schätze, diese Links haben einige ausgefeiltere Lösungen.)

Ich schätze, Sie könnten eine User.create-Schleife mit einer Liste von Namen von irgendwoher haben.

2 „Gefällt mir“

Offensichtlich nicht meine Stärke :slightly_smiling_face:, aber wäre dies eine gute Gelegenheit, rake dev:populate zu verwenden?

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

Ich denke, das würde auch auf einer Produktionsseite funktionieren, die eher eine Staging-Umgebung/Testseite ist.

4 „Gefällt mir“

Das ist anscheinend kein Hindernis!

Das ist ein toller Vorschlag:

Task-Code: discourse/populate.rake at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse (github.com)

Benutzerspezifische Aktionen:

1 „Gefällt mir“

Schön! Tatsächlich hat sich schon jemand mit diesem Problem beschäftigt!

EDIT: Und zum Spaß habe ich das auf einer kürzlich installierten Testseite ausprobiert; ich habe Ihre bundle- und rake-Aufgaben eingefügt und es hat Folgendes getan:

root@test2-app:/var/www/discourse# ALLOW_DEV_POPULATE=1 rake dev:populate
OK
Ich habe keine benutzerdefinierte `config/dev.yml`-Datei erkannt, ich erstelle eine für Sie, in der Sie Standardwerte ändern können.
Es gibt 9 Gruppen-Datensätze. Erstelle 6 weitere.
......
Es gibt 3 Benutzer-Datensätze. Erstelle 27 weitere.
...........................
Es gibt 4 Kategorie-Datensätze. Erstelle 26 weitere.
..........................
discourse-solved auf der Kategorie 'Rezepte' (12) aktiviert.
Erstelle 30 Beispiel-Tag-Datensätze
..............................
Es gibt 6 Themen-Datensätze. Erstelle 24 weitere.
........................
root@test2-app:/var/www/discourse# 

3 „Gefällt mir“

Das große Problem dabei ist, dass Ihr Datensatz Ihre Live-Daten nicht mehr repräsentiert.

Ein Staging-Server muss repräsentativ für die Live-Umgebung sein, sonst können Sie nicht alles testen, bevor Sie mit den geplanten Änderungen in die Produktion gehen.

Ich habe einige ziemlich beeindruckende Fehler miterlebt, bei denen nicht repräsentative Tests Probleme nicht identifizieren konnten, die später in der Live-Umgebung auftraten. Meistens traten sie aufgrund von Problemen mit der Datenqualität auf.

Doppelt gebundene Nachnamen (mit und ohne Bindestrich) und Akzentzeichen beispielsweise verursachten enorme Probleme.

Wenn es sich um einen echten Staging-Server handelt, muss er die Live-Umgebung genau nachahmen. Die Kopie muss für normale Benutzer nicht sichtbar sein und das Deaktivieren von E-Mails für Nicht-Mitarbeiter ist ratsam, aber ansonsten lädt man nur Probleme ein.

5 „Gefällt mir“

Ich stimme zu. Meine Frage wurde von einem Kunden aufgeworfen, der Bedenken hatte, echte Kundenidentitäten in der Staging-Umgebung zu haben.

Optimalerweise sollten wir ein Skript haben, das Namen und E-Mail-Adressen durcheinanderbringt und alles andere gleich lässt.

1 „Gefällt mir“

Es klingt nach einem ziemlich einfachen Gespräch. Wenn sie keine repräsentative Kopie haben, dann haben sie keine Staging-Umgebung.

Wenn es auf die gleiche Weise wie die Live-Umgebung bereitgestellt und gesichert wird, welches Risiko sehen sie dann?

2 „Gefällt mir“

Ich bin bei Stephen. Ist der Kunde nervöser, wenn er echte Daten auf einer Staging-Site hat, oder wenn er keine Staging-Site hat, die seine tatsächlichen Daten testet?

Wenn Sie nicht mit Ihren tatsächlichen Live-Daten aus der Produktion testen, wissen Sie nicht, was passieren wird, wenn Sie die Live-Daten verwenden.

Und diese Diskussion weicht weit vom ursprünglichen Thema ab. :slight_smile:

2 „Gefällt mir“

Ich denke, dies sollte so eingerichtet werden, dass Beiträge nach 30 Tagen oder so gelöscht werden. Ich habe dies zum OP hinzugefügt. Es gibt Zeiten, in denen gefälschte Daten praktisch sind. Die paranoidesten unter uns (mich eingeschlossen) haben reale Gründe, einem Staging-Server nicht zu vertrauen, wenn er nicht mit Ihren tatsächlichen Daten getestet wurde.

4 „Gefällt mir“

Nachdem es nach der Implementierung von 2FA auf unserer Website einige Probleme gab, habe ich Folgendes hinzugefügt:

1 „Gefällt mir“

Wow – das war so toll! Bada-bing-bada-boom!

Ich fühle mich so produktiv, nachdem ich diese Dummy-Daten importiert habe … plötzlich war mein Testforum automatisch mit einer Menge Benutzern und Beiträgen und Tags und Kategorien und Gruppen gefüllt … oh mein Gott!

Vielen Dank @nathank und @pfaffman und @merefield und @JammyDodger und @Stephen … oh mein Gott!

Happy So Excited GIF

5 „Gefällt mir“

Ich würde gerne Empfehlungen lesen, wie man Pop-Polling über die Befehlszeile deaktiviert.

Der beste Weg ist, eine Umgebungsvariable DISCOURSE_pop3_polling_enabled=false festzulegen.

Sie müssen den gesamten Variablennamen in Großbuchstaben schreiben, aber das kann ich auf meinem Handy nicht tun.

2 „Gefällt mir“

Ich habe mein Produktionsforum kürzlich auf S3 und CloudFront migriert. Ich hatte bereits einen Staging-Server am Laufen, aber dieser ist jetzt nicht mehr mit der Produktion und S3 synchron, da ich mir nicht sicher bin, ob ich einen separaten Bucket und eine separate CDN-Verbindung benötige – ich möchte keine zusätzlichen AWS-Kosten nur für einen Staging-Server verursachen. Es wird vermutlich nicht empfohlen, beide Server auf denselben S3-Bucket zu verweisen? Was ist der richtige Weg, dies zu tun?

1 „Gefällt mir“