Приветствую,
Я использовал этот пост в качестве руководства по настройке Discourse для работы с Traefik. У меня уже работает Traefik с другим веб-приложением.
При переходе на форум.private.com я получаю ошибку «404 страница не найдена».
Что-то, похоже, работает, потому что на панели управления Traefik во вкладке «Services» я вижу discourse@docker и discourse_secure@docker.
Однако во вкладке «Routers» ничего для Discourse нет.
Внесённые мной изменения в файл app.yml приведены ниже; они в значительной степени основаны на упомянутом выше посте. Я добавил открытый порт в аргументах Docker в конце файла, что, как мне казалось, открыло доступ к упомянутым выше службам. Буду признателен за любую помощь!
Traefik docker-compose
version: "3.3"
services:
################################################
#### Настройка прокси Traefik #####
###############################################
traefik:
image: traefik:v2.0
restart: always
container_name: traefik
ports:
- "80:80" # <== http
- "8080:8080" # <== :8080 — порт, на котором работает панель управления
- "443:443" # <== https
command:
#### Это команды CLI, которые настроят Traefik и укажут, как он должен работать! ####
- --api.insecure=true # <== Включение небезопасного API, НЕ РЕКОМЕНДУЕТСЯ ДЛЯ ПРОИЗВОДСТВЕННОЙ СРЕДЫ
- --api.dashboard=true # <== Включение панели управления для просмотра служб, промежуточного ПО, маршрутизаторов и т. д.
- --api.debug=true # <== Включение дополнительных конечных точек для отладки и профилирования
## Настройки логирования (варианты: ERROR, DEBUG, PANIC, FATAL, WARN, INFO) - https://docs.traefik.io/observability/logs/ ##
- --log.level=DEBUG # <== Установка уровня логов Traefik
## Настройки провайдера - https://docs.traefik.io/providers/docker/#provider-configuration ##
- --providers.docker=true # <== Включение Docker как провайдера для Traefik
- --providers.docker.exposedbydefault=false # <== Не открывать доступ к каждому контейнеру через Traefik, только к тем, у которых это явно включено
- --providers.file.filename=/dynamic.yaml # <== Ссылка на файл динамической конфигурации
- --providers.docker.network=web # <== Работа в сети Docker с именем web
## Настройки точек входа - https://docs.traefik.io/routing/entrypoints/#configuration ##
- --entrypoints.web.address=:80 # <== Определение точки входа для порта :80 с именем web
- --entrypoints.web-secured.address=:443 # <== Определение точки входа для HTTPS на порту :443 с именем web-secured
## Настройки сертификатов (Let's Encrypt) - https://docs.traefik.io/https/acme/#configuration-examples ##
- --certificatesresolvers.mytlschallenge.acme.tlschallenge=true # <== Включение TLS-ALPN-01 для генерации и обновления сертификатов ACME
- --certificatesresolvers.mytlschallenge.acme.email=private@private.com # <== Установка email для сертификатов
- --certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json # <== Определение файла ACME для хранения информации о сертификатах
volumes:
- ./letsencrypt:/letsencrypt # <== Том для сертификатов (TLS)
- /var/run/docker.sock:/var/run/docker.sock # <== Том для администрирования Docker
- ./dynamic.yaml:/dynamic.yaml # <== Том для файла динамической конфигурации, **ссылка: строка 27
networks:
- web # <== Размещение Traefik в сети с именем web для доступа к контейнерам в этой сети
labels:
#### Метки определяют поведение и правила прокси Traefik для этого контейнера ####
- "traefik.enable=true" # <== Включение Traefik для самого себя, чтобы просмотреть панель управления и назначить поддомен для доступа к ней
- "traefik.http.routers.api.rule=Host(`monitor.private.com`)" # <== Установка домена для панели управления
- "traefik.http.routers.api.service=api@internal" # <== Включение API как службы для доступа
networks:
web:
external: true
backend:
external: false
volumes:
db_data: {}
wordpress:
external: true
db:
external: true
Discourse app.yml
## Это шаблон контейнера Docker Discourse «всё в одном», автономный
##
## После внесения изменений в этот файл вы ОБЯЗАНЫ выполнить пересборку
## /var/discourse/launcher rebuild app
##
## БУДЬТЕ *ОЧЕНЬ* ОСТОРОЖНЫ ПРИ РЕДАКТИРОВАНИИ!
## YAML-ФАЙЛЫ ЧРЕЗВЫЧАЙНО ЧУВСТВИТЕЛЬНЫ К ОШИБКАМ В ПРОБЕЛАХ ИЛИ ВЫРАВНИВАНИИ!
## посетите http://www.yamllint.com/, чтобы проверить файл при необходимости
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
# "templates/web.letsencrypt.ssl.template.yml"
## Какие TCP/IP-порты должен открывать этот контейнер?
## Если вы хотите, чтобы Discourse использовал один порт с другим веб-сервером, например Apache или nginx,
## см. https://meta.discourse.org/t/17247 для деталей
expose:
#- "80:80" # http
#- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## Установите db_shared_buffers максимум на 25% от общего объёма памяти.
## будет установлено автоматически при загрузке на основе обнаруженной RAM, или вы можете переопределить
db_shared_buffers: "128MB"
## может улучшить производительность сортировки, но увеличивает использование памяти на подключение
#db_work_mem: "40MB"
## Какую ревизию Git должен использовать этот контейнер? (по умолчанию: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## Сколько одновременных веб-запросов поддерживается? Зависит от памяти и количества ядер CPU.
## будет установлено автоматически при загрузке на основе обнаруженных CPU, или вы можете переопределить
UNICORN_WORKERS: 2
## TODO: Доменное имя, на которое будет отвечать этот экземпляр Discourse
## Обязательно. Discourse не будет работать с чистым IP-адресом.
DISCOURSE_HOSTNAME: forum.private.com
## Раскомментируйте, если хотите, чтобы контейнер запускался с тем же
## именем хоста (опция -h), что указано выше (по умолчанию "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Список email-адресов через запятую, которые станут администраторами и разработчиками
## при первой регистрации, например 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'private@private.com'
## TODO: SMTP-сервер, используемый для проверки новых аккаунтов и отправки уведомлений
## Адрес SMTP, имя пользователя и пароль обязательны
# ВНИМАНИЕ: символ '#' в пароле SMTP может вызвать проблемы!
DISCOURSE_SMTP_ADDRESS: in-v3.mailjet.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: redacted
DISCOURSE_SMTP_PASSWORD: "redacted"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (опционально, по умолчанию true)
## Если вы добавили шаблон Lets Encrypt, раскомментируйте ниже, чтобы получить бесплатный SSL-сертификат
LETSENCRYPT_ACCOUNT_EMAIL: private@private.com
## Адрес http или https CDN для этого экземпляра Discourse (настроен на извлечение)
## см. https://meta.discourse.org/t/14857 для деталей
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## Контейнер Docker не сохраняет состояние; все данные хранятся в /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## Плагины размещаются здесь
## см. https://meta.discourse.org/t/19157 для деталей
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
## Любые пользовательские команды для выполнения после сборки
run:
- exec: echo "Начало пользовательских команд"
## Если вы хотите установить адрес email в поле 'От' для первой регистрации, раскомментируйте и измените:
## После получения первого email регистрации закомментируйте строку обратно. Она нужна только один раз.
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "Конец пользовательских команд"
labels:
app_name: discourse
#----Метки Traefik------------------------
traefik.enable: true
traefik.docker.network: web
#---СЕКЦИЯ HTTP-МАРШРУТИЗАЦИИ-------------------
traefik.http.routers.discourse.rule: Host(`forum.private.com`)
#--СЕКЦИЯ HTTP--------------------------
traefik.http.routers.discourse.entrypoints: web
traefik.http.routers.discourse.middlewares: discourse_redirect2https
traefik.http.services.discourse.loadbalancer.server.port: 80
#---СЕКЦИЯ HTTPS-МАРШРУТИЗАЦИИ
traefik.http.routers.discourse_secure.rule: Host(`forum.private.com`)
#--СЕКЦИЯ HTTPS
traefik.http.routers.discourse_secure.entrypoints: web-secured
traefik.http.services.discourse_secure.loadbalancer.server.port: 80
#--СЕКЦИЯ TLS
traefik.http.routers.discourse_secure.tls.certresolver: tlsChallenge_letsencrypt
#---СЕКЦИЯ ПРОМЕЖУТОЧНОГО ПО перенаправление http на https
traefik.http.middlewares.discourse_redirect2https.redirectscheme.scheme: https
docker_args:
- "--network=web"
- "--expose=80"
Спасибо