Добавление сервиса Discourse в Coolify: управление GUI-серверами и приложениями

Недавно я обнаружил эту замечательную панель управления сервером для управления службами, работающими на сервере. Она называется Coolify. Я успешно установил её и в настоящее время использую для управления двумя серверами, устанавливая и контролируя n8n и другие скрипты.

Единственной отсутствующей службой в Coolify для меня является Discourse. Если бы вы могли добавить Discourse в список служб Coolify, это было бы потрясающе. Тогда мы могли бы с этого момента рекомендовать всем новичкам в этой области просто установить Coolify и затем включить Discourse.

В их дорожной карте я уже нашёл запросы на добавление Discourse: https://feedback.coolify.io/posts/108/service-discourse. К сожалению, не так много людей в их сообществе знают о Discourse.

5 лайков

Поскольку Discourse не использует Docker Compose, а собственный лаунчер, я не был готов к глубокой интеграции для установки через веб-интерфейс. Моя цель и результат — запуск Discourse на главном сервере Coolify с маршрутизацией через встроенный Traefik к нужному контейнеру.

Хост работает на GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub и последней версии Coolify v4.0.0-beta.360.

Это потребовало лишь минимальной перенастройки Discourse. Для этого в файле /var/discourse/containers/app.yml я отключил сервер с сокетами, а затем использовал метки (labels) и аргументы docker_args, чтобы настроить Traefik: он должен найти контейнер Discourse, обработать перенаправление HTTP→HTTPS, получить сертификаты и проксировать запросы с FORUM-HOSTNAME.COM в контейнер Discourse:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## Раскомментируйте следующую строку, чтобы включить слушатель IPv6
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"
#  - "templates/web.socketed.template.yml"

## Какие TCP/IP-порты должен открывать этот контейнер?
## Если вы хотите, чтобы Discourse использовал тот же порт, что и другой веб-сервер, например Apache или nginx,
## см. https://meta.discourse.org/t/17247 для деталей
expose:
#  - "80:80"   # http
#  - "443:443" # https

docker_args:
  - '--network=coolify'

labels:
  app_name: discourse
  traefik.enable: true

  traefik.http.middlewares.discourse_redirect2https.redirectscheme.scheme: https
  traefik.http.middlewares.gzip.compress: true

  traefik.http.routers.discourse.rule: Host(`FORUM-HOSTNAME.COM`)
  traefik.http.routers.discourse.entrypoints: http
  traefik.http.routers.discourse.middlewares: discourse_redirect2https

  traefik.http.routers.discourse_secure.rule: Host(`FORUM-HOSTNAME.COM`)
  traefik.http.routers.discourse_secure.entrypoints: https
  traefik.http.routers.discourse_secure.tls: true
  traefik.http.routers.discourse_secure.tls.certresolver: letsencrypt
  traefik.http.routers.discourse_secure.middlewares: gzip
  traefik.http.services.discourse_secure.loadbalancer.server.port: 80

Затем выполните ./launcher rebuild app. После завершения работы вы сможете остановить nginx на хосте и запустить контейнер coolify-proxy, который займёт порты 80/443 и возьмёт на себя остальное: наше сообщество работает на хосте Coolify, где Coolify управляет остальным программным обеспечением.

5 лайков