Gibt es einen Vorteil bei einer Docker-Installation?

Ich weiß, dass die Dokumentation und viele Threads hier vorschlagen, dass Docker der einzige (gute) Weg ist, aber ich wollte den Grund dafür wissen. Ich habe eine Amazon Lightsail Debian-Box für 3,50 $/Monat bekommen und Discourse in 20 Minuten zum Laufen gebracht. Ich habe rbenv verwendet, um Ruby 3.2.2 zu installieren, und der Rest war einfach. Ich habe festgestellt, dass Discourse nicht den Rails-Konventionen folgt, z. B. warum gibt es ./config/discourse.conf und GlobalSetting anstelle von config/environments/production.rb, das diese Werte angibt – ist das, was die Docker-Images am Ende erstellen (auch sidekiq.yml hat keine Produktionsumgebungswerte).

Gibt es einen Vorteil, dies unter Docker auszuführen? Ich frage mich, ob ich etwas übersehe…

Die ganz kurze Version ist, dass wir Ihnen hier keine Hilfe anbieten können, wenn Sie nicht die Standardinstallation verwenden. Es gibt zu viele Dinge, die schiefgehen können, wenn Sie von diesem Weg abweichen.

4 „Gefällt mir“

Verstanden, ja, verschiedene Betriebssysteme und so weiter. Jemand fragte bereits, wie ich das gemacht habe – ich poste es hier für den Fall.

Man benötigt Ruby 3.2.x (über rbenv, damit man nicht vom Betriebssystem abhängig ist), Node v16.19.x/npm 8.19.x und PostgreSQL (wahrscheinlich jede Version über 11).

  1. Ich habe eine .ruby-version-Datei erstellt, die die Ruby-Version angibt, die ich installiert habe (3.2.2).
  2. Habe bundle ausgeführt und alle Gems ließen sich problemlos erstellen.
  3. Innerhalb von PostgreSQL selbst musste die Datenbank eingerichtet werden:
CREATE DATABASE discourse;
CREATE USER discourse WITH password 'fA....';
GRANT ALL PRIVILEGES ON DATABASE discourse TO discourse;
\c discourse
GRANT ALL ON SCHEMA public TO discourse;

Ich war überrascht, dass database.yml keine production-Variablen akzeptiert (das scheint sehr gegen die Rails-Konvention zu sein). Alle DB-Einstellungen befanden sich in config/discourse.conf zusammen mit den SMTP-Werten. Diese habe ich ausgefüllt.

Dann wurden die Datenbankmigrationen ausgeführt:

bundle exec rails db:migrate

Alles funktionierte gut und die Migrationen waren erfolgreich.

  1. In config/sidekiq.yml habe ich nach dem development-Abschnitt Folgendes hinzugefügt:
production:
  :concurrency: 2
  :queues:
    - [critical, 2]
    - [default, 1]
    - [low]
    - [ultra_low]
  1. Dann bearbeiten Sie lib/tasks/assets.rake etwa auf Zeile 151 und fügen Sie hinzu:
harmony: true,

damit es so aussieht:

  uglified, map =
    Uglifier.new(
      comments: :none,
      harmony: true,
      source_map: {
        filename: File.basename(from),
        output_filename: File.basename(to),
      },
    ).comp

Und installieren Sie die folgenden npm-Pakete:

npm install terser
npm install -g uglify-js@"<3"

Bauen Sie dann die Assets:

RAILS_ENV=production bundle exec rake assets:precompile

Und voilà! Jetzt sollte dies funktionieren:

 bundle exec sidekiq -e production -C config/sidekiq.yml
 bundle exec puma --config config/puma.rb -e production

Dies startet sidekiq und den puma-Webserver.

(Viel billiger und mehr Kontrolle, d.h. ich habe bereits Ruby 3.2.2 am Laufen). Die meiste Zeit wurde damit verbracht, die Eigenheiten zu umgehen (wie die Suche nach production-Werten, da sie nicht dort waren, wo sie sein sollten). Aber ansonsten war es ziemlich schnell!

2 „Gefällt mir“

Das ist ziemlich beeindruckend. Das Problem, wie erwähnt, ist jedoch, dass Sie, wenn Sie auf ein Problem stoßen, das Ihre Website zum Absturz bringt. Sie sind potenziell auf eine sehr begrenzte Anzahl von Community-Mitgliedern beschränkt, die Ihnen möglicherweise bei der Behebung von Problemen helfen können. Das größte Risiko/der größte Nachteil ist also eine potenziell lange bis katastrophale Ausfallzeit, die eine vollständige Neuinstallation erfordern kann.

Je länger eine Website ausfällt, desto mehr Reputationsverlust und Mitgliederverlust kann Ihre Website erleiden.

Wenn Sie nur experimentieren und nicht wirklich auf eine stabile Produktionswebsite angewiesen sind. Dann riskieren Sie nicht viel, außer Zeit.

1 „Gefällt mir“