Führen Sie Discourse als Docker-Swarm-Service aus

Ich versuche, Discourse als Docker Swarm Service bereitzustellen.
Habe die offizielle Launcher-Methode verwendet, um Discourse in einem Einzelcontainer-Setup bereitzustellen.
Habe die benötigten Dateien von /var/www/discourse innerhalb des Standalone-Containers an einen Speicherort auf den Host-Servern kopiert, um sie im Swarm-Service zu verwenden.
Habe einen bestehenden Postgre-Server verwendet
Habe einen dedizierten Redis-Container für Discourse erstellt
Discourse kann nicht gestartet werden und beendet sich mit:
uninitialized constant Discourse::SiteSetting (NameError)
Der Container verbindet sich problemlos mit PostgreSQL und Redis.
DISCOURSE_HOSTNAME ist in der Umgebung korrekt auf discourse.xyz gesetzt.
Könnte dies an fehlenden Abhängigkeiten oder einer fehlerhaften Asset-Kompilierung liegen?
Benötigt Discourse Änderungen, um in einer Swarm-Umgebung korrekt zu funktionieren?

version: '3.7'

services:
  app:
    image: discourse-app:latest
    user: "1000:1000"
    working_dir: /var/www/discourse
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
      labels:
        - "traefik.enable=true"
        - "traefik.backend=discourse"
        - "traefik.docker.network=service"
        - "traefik.frontend.rule=Host:discourse.xyz"
        - "traefik.port=80"
    command:
      - "/bin/bash"
      - "-c"
      - |
        bundle config set deployment true 
        bundle config set without 'test development' 
        RAILS_ENV=production bundle install 
        RAILS_ENV=production bundle exec rake db:migrate 
        RAILS_ENV=production bundle exec rails server -b 0.0.0.0
    environment:
      DISCOURSE_DB_HOST: "postgrest1"
      DISCOURSE_DB_PORT: "5432"
      DISCOURSE_DB_USERNAME: "postgres"
      DISCOURSE_DB_PASSWORD: "****"
      DISCOURSE_DB_NAME: "discourse"
      DISCOURSE_REDIS_HOST: "redis-discourse"
      DISCOURSE_REDIS_PORT: "6379"
      DISCOURSE_REDIS_PASSWORD: "****"
      DISCOURSE_HOSTNAME: "discourse.xyz"
      DISCOURSE_DEVELOPER_EMAILS: "abc@xyz.com"
      DISCOURSE_SMTP_ADDRESS: "xyz"
      DISCOURSE_SMTP_PORT: "25"
      DISCOURSE_NOTIFICATION_EMAIL: "donotreply@xyz.com"
    networks:
      - service
    ports:
      - "8080:80"
      - "8443:443"
    volumes:
      - type: bind
        source: /discourse/discourse_files/discourse
        target: /var/www/discourse
        bind:
          propagation: rprivate

      - type: bind
        source: /discourse/shared/standalone
        target: /shared
        bind:
          propagation: rprivate

      - type: bind
        source: /discourse/shared/standalone/log/rails
        target: /data/modulusdata/infra/discourse/shared/standalone/log/rails
        bind:
          propagation: rprivate

      - type: bind
        source: /discourse/shared/standalone/log/var-log
        target: /var/log
        bind:
          propagation: rprivate

networks:
  service:
    external: true

Das übersteigt den Support, den Sie hier erwarten können. Es gibt einfach zu viele Kleinigkeiten, die falsch sein könnten, weshalb die Standardinstallation wirklich alles ist, was unterstützt wird. Hier sind einige Hinweise. Wenn Sie nicht weiterkommen und ein Budget haben, können Sie mich kontaktieren oder in Marketplace fragen.

Sie können das Basis-Image nicht verwenden. Sie müssen Ihr eigenes bootstrappen und in ein Repository pushen. Wenn Sie clever sind und viel Zeit haben, können Sie GitHub dazu bringen, das für Sie zu erledigen.

Sie müssen Ihre Assets auf S3 legen (Konfigurieren Sie einen S3-kompatiblen Objektspeicheranbieter für Uploads).

Versuchen Sie, all diese auf dieselben Log-Dateien schreiben zu lassen? Ich würde sie einfach im Container belassen und ignorieren.

Ich glaube nicht, dass Sie die Ports 8080 und 8443 benötigen – Traefik kümmert sich doch darum, oder? Discourse funktioniert nicht auf einem nicht standardmäßigen Port.

Etwas wie:

./launcher bootstrap app
docker push-that-container-to-your-private-repo
./launcher start-cmd

Dann können Sie die Variablen im start-cmd verwenden, um Ihren Swarm mit den richtigen Dingen zu starten, damit er Ihre Datenbank, Redis usw. finden kann. Ich sehe, dass Sie einige haben, aber ich bin mir nicht sicher, ob das alles ist, was Sie brauchen.

2 „Gefällt mir“