DiscourseをDocker Swarmサービスとして実行する

DiscourseをDocker Swarmサービスとしてデプロイしようとしています。
公式のランチャーメソッドを使用して、Discourseをシングルコンテナセットアップでデプロイしました。
Swarmサービスで使用するために、スタンドアロンコンテナ内の/var/www/discourseからホストサーバー上の場所に、必要なファイルをコピーしました。
既存のPostgreSQLサーバーを使用
Discourse専用のRedisコンテナを作成
Discourseが起動に失敗し、以下のエラーで終了します。
uninitialized constant Discourse::SiteSetting (NameError)
コンテナは問題なくPostgreSQLとRedisに接続できます。
DISCOURSE_HOSTNAMEは環境内でdiscourse.xyzに正しく設定されています。
これは、依存関係の欠落またはアセットコンパイルの破損が原因である可能性がありますか?
DiscourseがSwarm環境内で適切に機能するには、変更が必要ですか?

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

これは、ここで期待できるサポートを超えています。問題となりうる非常に些細なことが多すぎるため、標準のインストールのみがサポートされています。いくつかヒントを挙げます。行き詰まって予算がある場合は、私に連絡するか、Marketplace で質問してください。

ベースイメージは使用できません。自分でブートストラップしてリポジトリにプッシュする必要があります。賢くて時間があるなら、GitHub にそれをやらせることができます。

アセットを S3 に配置する必要があります (アップロード用の S3 互換オブジェクトストレージプロバイダーの設定)。

それらすべてを同じログファイルに書き込もうとしていますか?コンテナ内にそのままにして無視するのが良いでしょう。

ポート 8080 と 8443 は必要ないと思います。Traefik が処理しているのではないでしょうか?Discourse は標準以外のポートでは動作しません。

以下のようなものです。

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

その後、start-cmd の変数を使用して、データベースや Redis などを見つけられるようにスウォームを正しく起動できます。いくつかありますが、それがすべて必要かどうかはわかりません。

「いいね!」 2