Esegui Discourse come servizio Docker Swarm

Sto tentando di distribuire Discourse come servizio docker swarm.
Ho utilizzato il metodo ufficiale del launcher per distribuire Discourse in una configurazione a container singolo.
Ho copiato i file necessari da /var/www/discourse all’interno del container standalone in una posizione sui server host da utilizzare nel servizio Swarm.
Ho utilizzato un server PostgreSQL esistente
Ho creato un container Redis dedicato per Discourse
Discourse non si avvia ed esce con: uninitialized constant Discourse::SiteSetting (NameError)
Il container si connette a PostgreSQL e Redis senza problemi.
DISCOURSE_HOSTNAME è impostato correttamente su discourse.xyz nell’ambiente.
Potrebbe essere dovuto a dipendenze mancanti o a una compilazione di asset non riuscita?
Discourse richiede modifiche per funzionare correttamente all’interno di un ambiente 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

Questo va oltre il supporto che ci si può aspettare qui. Ci sono troppe piccole cose che potrebbero essere sbagliate, motivo per cui l’installazione standard è davvero l’unica supportata. Ecco alcuni suggerimenti. Se sei bloccato e hai un budget, puoi contattarmi o chiedere in Marketplace

Non puoi usare l’immagine di base. Devi creare la tua e caricarla in un repository. Se sei intelligente e hai molto tempo, puoi far sì che GitHub lo faccia per te.

Dovrai mettere i tuoi asset su S3 (Configura un provider di object storage compatibile con S3 per i caricamenti)

Stai cercando di far scrivere tutti questi file negli stessi file di log? Io li lascerei nel container e li ignorerei.

Non credo che tu abbia bisogno delle porte 8080 e 8443, traefik se ne sta occupando, giusto? Discourse non funzionerà su una porta non standard.

qualcosa come:

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

Quindi puoi usare le variabili in start-cmd per avviare il tuo swarm con le cose giuste in modo che possa trovare il tuo database, redis e così via. Ne vedo un bel po’, ma non sono sicuro che sia tutto ciò di cui hai bisogno.

2 Mi Piace