⚠ Порт 443 этого компьютера, похоже, недоступен по имени узла: metabolism.logophilia.eu ----

Спасибо за обратную связь, очень ценю ваше время. Не хочу показаться занудой, но:

[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/letsencrypt

    rm -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}s
    

    ProxyPreserveHost 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 и позвольте системе отправить письмо с подтверждением на ваш почтовый ящик.

*) пока не доказано обратное :wink: