Umzug auf neuen Server: Probleme

Ich ziehe meine Discourse-Installation auf einen neuen Server um. DNS usw. ist bereits eingerichtet, gültige SSL-Zertifikate sind auf dem Server vorhanden. Ich habe den Ordner /var/discourse von Server A auf Server B kopiert und versuche, ihn neu aufzubauen, habe aber einige Probleme.

Ich habe mir die Installationshinweise angesehen, die empfehlen: „Der Standardwert von 1 GB RAM funktioniert für kleine Discourse-Communities einwandfrei. Für größere Communities empfehlen wir 2 GB RAM.

Ich bin mir nicht sicher, ob dies die Ursache Ihres Problems ist, aber ich glaube, dass nach der Umstellung auf einen Server mit anderen Spezifikationen empfohlen wird, ./discourse-setup erneut auszuführen, damit einige Dinge entsprechend den neuen Spezifikationen konfiguriert werden können (Swap, Shared Buffers, Unicorn Workers…).
Experten werden mich korrigieren, wenn ich falsch liege :face_with_peeking_eye:

Interessant, das wäre unerwartet, aber ich werde es versuchen und sehen.

Okay – Update:

Das Ausführen des Setups hat nichts geändert. Es hat mich einfach nach dem Host gefragt und einige kleinere Einstellungen vorgenommen. Bisher immer noch kein Erfolg. Derselbe Fehler beim Neuerstellen. Ich habe auch versucht, den Doktor auszuführen, aber ohne Erfolg.

Das Setup hat sich darüber beschwert, dass der Host am angegebenen Port nicht erreichbar ist, was nicht stimmt.

Ich diene über einen Nginx-Proxy:


  location / {
    error_page 502 =502 /errors/discourse-offline.html;
    proxy_intercept_errors on;
    proxy_headers_hash_max_size 1024;
    proxy_headers_hash_bucket_size 128;
    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 https;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

Das muss möglicherweise noch angepasst werden, aber wenn es beim Erstellen fehlschlägt, sollte es noch kein Problem mit dem Webserver sein.

Ich bin kein Experte, aber gibt es widersprüchliche Nginx-Sachen oder veraltete Weiterleitungen in Ihrer app.yml?

Ich meine, der discourse-Ordner ist eine direkte Kopie dessen, was früher funktioniert hat. Ich erkenne an, dass es sich um einen anderen Server, andere Ressourcen, andere Docker-Versionen usw. handelt. Ich gehe davon aus, dass die meisten davon in den Docker-Container abstrahiert werden sollten, wobei der einzige wirkliche Unterschied zwischen den beiden Umgebungen Docker und Ressourcen/Speicher ist.

Selbst wenn Nginx nicht funktioniert, sollte der Build des Containers funktionieren. Ich versuche nur, darüber nachzudenken, aber die Portkonflikte bei 80 oder 443 sollten ein späteres Problem sein, wenn das nicht richtig konfiguriert ist. Dies erlaubt mir nicht einmal, die Container zu starten.

Die Konfiguration, die ich für Nginx habe, sieht aus wie ein Discourse-Beispiel, also werde ich versuchen, eine neue, aktualisierte Version zu finden, um zu sehen, ob sich dadurch etwas ändert.

Ach ja, zur Referenz, ich benutze Ubuntu, 24.10, Oracular Oriole.

Linux forumhost 6.11.0-19-generic #19-Ubuntu SMP PREEMPT_DYNAMIC Wed Feb 12 21:43:43 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

Sie sollten wirklich eine LTS-Version wie 24.10 verwenden, sonst müssen Sie das bald wieder tun.

Gibt es einen anderen PostgreSQL auf dem Server?

Haben Sie PostgreSQL per rsync übertragen oder beginnen Sie mit einer Neuinstallation? Wenn es eine Neuinstallation ist, löschen Sie vielleicht /shared/standalone/postgres_* und beginnen Sie erneut. Stellen Sie dann die Datenbank wieder her.

Ich möchte die Daten behalten. Derzeit habe ich die gesamten Daten in /var/discourse kopiert, was alle Daten enthält. Postgres, Redis und so weiter.

Führen Sie Discourse wie empfohlen in Docker aus oder direkt auf dem Server?

Ich empfehle dringend, dem offiziellen Tutorial der Community zur Migration von Servern zu folgen, anstatt den Ordner /var/discourse direkt zu kopieren.

Ja, Docker-Muster. Daher die Probleme beim Neuerstellen der Container-Kommentare.

Haben Sie eine Referenz für dieses Dokument? Ich dachte, das hätte letztes Mal funktioniert, daher bin ich überrascht, wie viel Mühe es mir dieses Mal bereitet.

Die Installation einer neuen Discourse-Instanz auf Ihrem neuen Server, gefolgt von der Wiederherstellung Ihres Backups, stellt sicher, dass alles reibungslos funktioniert. Ich habe diese Methode befolgt und mich an die offiziellen Richtlinien gehalten, um Server mindestens fünfmal zu migrieren, ohne auf Probleme zu stoßen.

Siehe Eine Discourse-Site mit rsync auf einen anderen VPS verschieben

Aber wenn Sie die Datenbank nicht kopieren, sondern auf dem alten Server ein Backup erstellen und es auf dem neuen wiederherstellen, müssen Sie nicht zwei Kopien davon haben.

Ich glaube, es gibt noch etwas anderes.

Schritt 1. nginx stoppen, um Portkonflikte zu vermeiden (eventuell wird nginx den Socket weiterleiten, aber wir halten es einfach)
Schritt 2. git clone GitHub - discourse/discourse_docker: A Docker image for Discourse /var/discourse
Schritt 3. cd /var/discourse & chmod 700 containers
Schritt 4. ./discourse-setup
Schritt 5. Build-Fehler

...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
I, [2025-03-10T14:17:49.762301 #1]  INFO -- : Building
Environment: production
Die Einstellung 'staticAddonTrees' wird in der nächsten Version von Embroider standardmäßig auf true gesetzt und kann nicht deaktiviert werden. Um sich darauf vorzubereiten, sollten Sie 'staticAddonTrees: true' in Ihrer Embroider-Konfiguration festlegen.
Die Einstellung 'staticAddonTestSupportTrees' wird in der nächsten Version von Embroider standardmäßig auf true gesetzt und kann nicht deaktiviert werden. Um sich darauf vorzubereiten, sollten Sie 'staticAddonTestSupportTrees: true' in Ihrer Embroider-Konfiguration festlegen.
building... 
undefined
 ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL  Command was killed with SIGKILL (Forced termination): ember build -prod

I, [2025-03-10T14:17:49.768097 #1]  INFO -- : Terminating async processes
I, [2025-03-10T14:17:49.768368 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main pid: 59
126:signal-handler (1741616269) Received SIGTERM scheduling shutdown...
I, [2025-03-10T14:17:49.769541 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 126
2025-03-10 14:17:49.774 UTC [59] LOG:  received fast shutdown request
2025-03-10 14:17:49.779 UTC [59] LOG:  aborting any active transactions
2025-03-10 14:17:49.812 UTC [59] LOG:  background worker "logical replication launcher" (PID 73) exited with exit code 1
126:M 10 Mar 2025 14:17:49.812 # User requested shutdown...
126:M 10 Mar 2025 14:17:49.812 * Saving the final RDB snapshot before exiting.
2025-03-10 14:17:49.817 UTC [68] LOG:  shutting down
126:M 10 Mar 2025 14:17:49.819 * DB saved on disk
2025-03-10 14:17:49.820 UTC [68] LOG:  checkpoint starting: shutdown immediate
126:M 10 Mar 2025 14:17:49.820 # Redis is now ready to exit, bye bye...
2025-03-10 14:17:50.013 UTC [68] LOG:  checkpoint complete: wrote 2461 buffers (1.9%); 0 WAL file(s) added, 0 removed, 1 recycled; write=0.082 s, sync=0.098 s, total=0.196 s; sync files=2470, longest=0.002 s, average=0.001 s; distance=17659 kB, estimate=17659 kB
2025-03-10 14:17:50.038 UTC [59] LOG:  database system is shut down

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake assets:precompile:build' failed with return #<Process::Status: pid 801 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "tag"=>"build", "hook"=>"assets_precompile_build", "cmd"=>["su discourse -c 'bundle exec rake assets:precompile:build'"]}
bootstrap failed with exit code 1
** 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.
ed8a47c0a48fcf3eed3a152f69b7f5730fadb166e331ffff1361c7ee54bb7a81

Dies ist von einer brandneuen Installation, ohne jeglichen Zustand, nur der Versuch, Discourse auf dem Server einzurichten.

Was sagt
free -h
? Haben Sie Swap?

Ich habe das neulich ein paar Mal bekommen. Später am Tag habe ich es erneut versucht und es hat funktioniert.

Das war’s. Ich habe schließlich eine Swap-Datei erstellt und sie aktiviert, und das hat alle meine Probleme behoben!

Ich habe schließlich eine Neuinstallation und eine Backup-Wiederherstellung durchgeführt, um alles zum Laufen zu bringen, aber jetzt funktioniert alles. Ich schätze die Hilfe.