Запуск Docker с Discourse рядом с Apache

Здравствуйте.

Я пытаюсь настроить Discourse в Docker на своём существующем сервере. Другие контейнеры Docker у меня не запущены.

На моём сервере работают Apache (сайты на WordPress) и некоторые другие веб-сервисы.

Не могу понять, как настроить маршрутизацию моего поддомена ‘forum.rebelscience.club’ к моему контейнеру Docker.

Когда меня спрашивают:

Hostname for your Discourse? [discourse.example.com]: forum.rebelscience.club

Я вижу следующее:

Checking your domain name . . .
WARNING: Port 443 of computer does not appear to be accessible using hostname:  forum.rebelscience.club.
WARNING: Connection to http://forum.rebelscience.club (port 80) also fails.

This suggests that forum.rebelscience.club resolves to some IP address that does not reach this 
machine where you are installing discourse.

The first thing to do is confirm that forum.rebelscience.club resolves to the IP address of this server.
You usually do this at the same place you purchased the domain.

If you are sure that the IP address resolves correctly, it could be a firewall issue.
A web search for "open ports YOUR CLOUD SERVICE" might help.

This tool is designed only for the most standard installations. If you cannot resolve
the issue above, you will need to edit containers/app.yml yourself and then type

./launcher rebuild app

Не уверен, как это настроить. Порты 80/443 доступны, но они направлены на мой основной домен, а не на поддомен.

Буду очень признателен за любые советы.

Привет, @rebelCoder!

Эта тема уже подробно обсуждалась здесь, на meta; вы можете поискать на meta по запросу «apache reverse proxy» и найти множество исчерпывающих и очень подробных тем.

Если кратко, вам нужно настроить виртуальный хост вашего сервера Apache так, чтобы он работал как обратный прокси для Discourse.

Точные конфигурации apache2 для такой настройки неоднократно публиковались на meta.

Надеюсь, это поможет.

Извините, я должен был упомянуть, что я уже изучил/попробовал несколько решений с этого форума и от Digital Ocean. Но всё ещё не могу заставить это работать. Я никогда раньше не настраивал Docker.

Давайте я поделюсь своими текущими настройками:

/etc/hosts:
127.0.0.1       forum.rebelscience.club

Файл hosts и DNS-запись работают, так как сегодня там был запущен phpBB. Теперь я пытаюсь перенаправить его на Docker с Discourse.

В containers/app.yml

Я обновил порты:

expose:
  - "8081:80"   # http
  - "8443:443" # https

В /etc/apache2/sites-enabled/discourse.conf

<VirtualHost *:80>
  ServerName forum.rebelscience.club
  ServerAlias www.forum.rebelscience.club

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/
  </IfModule>
</VirtualHost>

Что ещё я упускаю? Запуск ./discourse-setup всё ещё завершается ошибкой с сообщением из исходного поста.

Я считаю, что у вас должен быть виртуальный хост для порта 443. При этом ошибка порта 80 выглядит странно — возможно, в вашей DNS не хватает чего-то (например, CNAME-записи)?

Это странно. Настройка, кажется, немного слишком утомительна.

У меня есть только A Record для forum.rebelscience.club.

Я обновил свои файлы .conf, добавив сертификат:

cat /etc/apache2/sites-enabled/discourse.conf

<VirtualHost *:80>
  ServerName forum.rebelscience.club
  ServerAlias www.forum.rebelscience.club

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/
  </IfModule>
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.forum.rebelscience.club [OR]
RewriteCond %{SERVER_NAME} =forum.rebelscience.club
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

cat /etc/apache2/sites-enabled/discourse-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
  ServerName forum.rebelscience.club
  ServerAlias www.forum.rebelscience.club

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8081/
    ProxyPassReverse / http://localhost:8081/
  </IfModule>

SSLCertificateFile /etc/letsencrypt/live/forum.rebelscience.club/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/forum.rebelscience.club/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Теперь я вижу 503 Service Unavailable.

Я совершенно растерян, что ещё нужно сделать. setup.sh по-прежнему завершается ошибкой с тем же сообщением.

В приведённом выше примере конфигурации следует открывать только порт 8081 в Docker (а не порты 80 или 443).

Порты 80 и 443 открывает обратный прокси-сервер за пределами контейнера, и этот трафик перенаправляется на порт 8081 (в вашем примере выше) — тот порт, который вы открыли внутри контейнера (сопоставив его с портом 80 внутри).

Это будет работать только в том случае, если порт 80 внутри контейнера сопоставлен с портом 8081 (открытым для хоста).

expose:
  - "8081:80"   # http

Надеемся, это поможет.

PS: @rebelCoder, в вашей конфигурации apache2 для SSL не хватает многих необходимых настроек.

Смотрите этот пост:

Это больше не является проблемой и может быть закрыто.

Вы не можете использовать discourse-setup. Вам придется вручную отредактировать файл app.yml, как описано в темах о запуске с использованием Apache.