Не удалось встроить локальный Discourse в локальный экземпляр Ghost

Привет,
Я хотел попробовать Discourse на локальной установке Ghost.

В общем, я настроил всё максимально просто: следовал «Руководству для начинающих по установке Discourse для разработки с использованием Docker» и настроил Ghost через его CLI.

Ghost работает на localhost:2368, Discourse — на localhost:9292.

Я добавил localhost:2368 в раздел Customize/Embedding в список разрешённых хостов (без дополнительных настроек, таких как имя класса, разрешённый список путей или публикация в категорию).

После добавления фрагмента кода (и, конечно, правильной замены всех заполнителей) у меня появляется встраиваемый блок Discourse с надписью «Загрузка обсуждения…», но через несколько секунд в консоли появляется ошибка:

Не удалось выполнить ‘postMessage’ на ‘DOMWindow’: предоставленный целевой источник (‘http://localhost:9292’) не совпадает с источником окна-получателя (‘http://localhost:2368’).

Что я упускаю?

Спасибо!

(Не эксперт и не член команды)

Вы получаете эту ошибку, если iframe не загрузился.

Когда вы добавляете localhost:2368 в список разрешённых хостов, попробуйте варианты с косой чертой в конце и без неё, а также с использованием подстановочных знаков.

Суть в том, что страница может загрузиться, но ни один из элементов контента, ссылающихся на внешние ресурсы, не загрузится, что и приводит к сбою.

Тем не менее, я сам очень заинтересован в скором тестировании Ghost. Поэтому буду следить за этой темой и надеюсь, что это единственная проблема, с которой вы столкнётесь. :slight_smile:

К сожалению, я пока не нашёл решения :frowning:

Похоже, вы пытаетесь запустить производственный экземпляр на нестандартном порту? В Discourse это не поддерживается.

Продакшн-инстанс? Я следовал руководству по установке Discourse локально для разработки — разве это не правильная установка для локального использования? Установка работает безупречно, проблемы возникают только с внедрением.

Я думаю, вам нужно будет найти способ протестировать это, используя реальные имена хостов, а не порты.

Похоже, мне придётся попробовать настроить прокси через nginx. Спасибо.

Я попробовал добавить два прокси-сервера nginx: один для Ghost, другой для Discourse, работающие на ghost.localhost и discourse.localhost. После того как я изменил все URL-адреса на адреса прокси, возникла следующая ошибка:

Не удалось выполнить ‘postMessage’ в ‘Window’: недопустимый целевой источник ‘’ при вызове ‘postMessage’.

При использовании http://localhost:9292/ вместо http://discourse.localhost/ для параметра discourseUrl ошибка исчезает, но комментарии застревают в бесконечном цикле («Загрузка обсуждений» длится вечно, и каждые несколько секунд выполняются запросы).

Конфигурации nginx довольно просты:

server {
  listen 80;
  server_name discourse.localhost;

  access_log /var/log/nginx/discourse.localhost-access.log;
  error_log /var/log/nginx/discourse.localhost-error.log;
  
  location / {
    proxy_pass         http://127.0.0.1:9292;
    proxy_set_header   X-Forwarded-For $remote_addr;
    proxy_set_header   Host $http_host;
  }
}

Соответственно, для конфигурации Ghost используется ghost вместо discourse.