Ejecutar Discourse como servicio de Docker Swarm

Estoy intentando implementar Discourse como un servicio docker swarm.
Utilicé el método de inicio oficial para implementar Discourse en una configuración de un solo contenedor.
Copié los archivos requeridos de /var/www/discourse dentro del contenedor independiente a una ubicación en los servidores host para usar en el servicio Swarm.
Usé un servidor postgre existente
Creé un contenedor Redis dedicado para Discourse
Discourse no se inicia y sale con:
constante no inicializada Discourse::SiteSetting (NameError)
El contenedor se conecta a PostgreSQL y Redis sin problemas.
DISCOURSE_HOSTNAME está configurado correctamente como discourse.xyz en el entorno.
¿Podría deberse a la falta de dependencias o a una compilación de activos rota?
¿Requiere Discourse alguna modificación para funcionar correctamente dentro de un entorno 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

Esto está más allá del soporte que puedes esperar aquí. Hay demasiadas cosas pequeñas que podrían estar mal, por eso la instalación estándar es realmente todo lo que se admite. Aquí tienes algunas pistas. Si estás atascado y tienes presupuesto, puedes contactarme o preguntar en Marketplace

No puedes usar la imagen base. Tienes que crear la tuya propia e insertarla en un repositorio. Si eres astuto y tienes mucho tiempo, puedes hacer que github lo haga por ti.

Necesitarás poner tus activos en S3 (Configurar un proveedor de almacenamiento de objetos compatible con S3 para subidas)

¿Estás intentando que todos esos escriban en los mismos archivos de registro? Yo simplemente los dejaría en el contenedor y los ignoraría.

No creo que necesites los puertos 8080 y 8443, traefik se está encargando de eso, ¿verdad? Discourse no funcionará en un puerto no estándar.

algo como:

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

Luego puedes usar las variables en start-cmd para lanzar tu swarm con las cosas correctas para que pueda encontrar tu base de datos, redis, etc. Veo que tienes varias, pero no estoy seguro de que sea todo lo que necesitas.

2 Me gusta