Discourse를 Docker Swarm 서비스로 배포하려고 합니다.
공식 launcher 방법을 사용하여 단일 컨테이너 환경에서 Discourse를 배포했습니다.
스탠드얼론 컨테이너 내부의 /var/www/discourse에서 필요한 파일을 호스트 서버의 특정 위치로 복사하여 Swarm 서비스에서 사용하도록 했습니다.
기존의 Postgres 서버를 사용했습니다.
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