Спасибо за обратную связь, очень ценю ваше время. Не хочу показаться занудой, но:
[2/5] Подготовка конфигурации
✓ Порты 80 и 443 свободны для использования
Там действительно изначально написано «свободны для использования». Тем не менее, мой экземпляр уже запущен и работает, благодаря помощи Gemini (в основном по вопросам использования Docker, что забавно). Я хотел бы поделиться своим «руководством по запуску» для любых других пользователей Virtualmin, потому что: «освободить порт 443» — это не решение проблемы. Остальная часть моего сообщения будет именно этим. Если мне лучше опубликовать это в другом месте, например, в новой теме, пожалуйста, подскажите, куда обратиться; я думаю, я не единственный с такой настройкой, и это может быть полезно другим. Ещё раз спасибо!
Если вы используете VPS, управляемый Webmin/Virtualmin, и поддомен:
Окончательное руководство по настройке Virtualmin + Discourse *
-
(1) Очистка остатков (если вы пытаетесь повторно, как это делал я):
rm -rf /var/discourse/shared/standalone/ssl/*rm -rf /var/discourse/shared/standalone/letsencryptrm -rf /var/discourse/shared/standalone/state -
(2) Удаление шаблонов:
Вы должны полностью удалить строки
templates/web.ssl.template.ymlиtemplates/web.letsencrypt.ssl.template.ymlиз файлаapp.yml. Пользовательский парсер запуска будет обрабатывать их, даже если они префиксованы символом#. -
(3) Настройка почты и переменных:
Измените
DISCOURSE_SKIP_EMAIL_SETUPс'1'на'0', иначе ваш Discourse не сможет подключиться и проверить DiscordID;Добавьте
DISCOURSE_FORCE_HTTPS: true, чтобы бэкенд генерировал безопасные URL-адреса.Дружелюбное напоминание: Убедитесь, что
DISCOURSE_SMTP_USER_NAMEустановлен в имя вашего почтового ящика (например,'logophilia'), не полный адрес электронной почты (например,'logophilia@logophilia.eu'), и заключите учётные данные в одинарные кавычки ('), чтобы обойти возможные ошибки парсинга символов в YAML. -
(4) Конфигурация блока expose:
Убедитесь, что ваш блок
expose:в файле app.yml содержит маппинг HTTP; маппинг443=>8443опционален/избыточен, так как Virtualmin завершает логику SSL перед передачей:expose: - 8080:80Теперь можно начинать пересборку:
cd /var/discourse ./launcher rebuild app -
(5) Настройка поддомена и прокси-путей:
- Создайте поддомен в Virtualmin как обычно и защитите его SSL-сертификатом Let’s Encrypt (это делается автоматически, просто убедитесь, что не возникает ошибок по каким-либо нерелевантным причинам).
- Перейдите в Proxy Paths (Virtualmin → ваш поддомен → Web Configuration → Proxy Paths), создайте новое сопоставление
/сhttp://localhost:8080/, оставьте галочку «serve locally» снятой, но включите Proxy WebSocket в значение Yes, чтобы разрешить обновления в реальном времени и потоки уведомлений.
-
(6) Директивы заголовков CSRF:
- В Webmin ➔ Servers ➔ Apache Webserver ➔ [найдите конфигурацию вашего поддомена и нажмите на конфигурацию для 443] ➔ Edit Directives поместите следующие строки над собственным блоком прокси Virtualmin для Let’s Encrypt (обычно «ProxyPass /.well-known !»), чтобы обеспечить передачу CSRF-токенов:
ProxyPreserveHost On RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-For %{REMOTE_ADDR}sProxyPreserveHost On: Сообщает Discourse ваше реальное доменное имя вместо «localhost».
RequestHeader set X-Forwarded-Proto "https": Явно указывает Discourse, что пользователь использует защищённое соединение, что соответствует настройкеDISCOURSE_FORCE_HTTPS: true.
RequestHeader set X-Forwarded-For: Передаёт реальный IP-адрес посетителя в контейнер, чтобы работали логи безопасности. -
(7) Чистый хендшейк контейнера:
Пока завершается длительная (извините… но это правда;-) процедура пересборки, убедитесь, что любой потенциально зависший шаблон контейнера удалён командой
docker rm -f app, чтобы запуск./launcher start appсоздал полностью новый экземпляр, привязанный к порту8080. Проверьте, чтоdocker psпоказывает что-то подобное в разделе «ports»:# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d21772a21e36 local_discourse/app "/sbin/boot" 45 minutes ago Up 45 minutes 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp, 0.0.0.0:8443->443/tcp, [::]:8443->443/tcp app(Как видите, я оставил директиву 443=>8443 в своём файле app.yml, работает в обоих случаях.)
-
(8) Мониторинг и запуск:
Отслеживайте поток загрузки с помощью
docker logs -f app, пока не завершатся миграции базы данных и не начнут обрабатывать запросы воркеры. В основном это серия строк «INFO», появляющихся одна за другой. -
(9) Завершение:
Откройте ваш поддомен в браузере, нажмите Register и позвольте системе отправить письмо с подтверждением на ваш почтовый ящик.
*) пока не доказано обратное ![]()