Не удалось выполнить 'postMessage' в 'DOMWindow'

Решение найдено — спасибо @simon и @Lilly за невероятную поддержку.

Изменения, внесённые по совету Саймона:

Обновил код из урока, убрав устаревшие термины и добавив условный оператор if:

<div id='discourse-comments'></div>
<meta name="discourse-username" content="ForumAdminName">

<script type="text/javascript">
  if (window.location.pathname.indexOf('/p/') < 0) {
  DiscourseEmbed = {
    discourseUrl: 'https://forum.test.com/',
    discourseEmbedUrl: '{{url absolute="true"}}',
    // className: 'CLASS_NAME',
  };

  (function() {
    var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
    d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
  })();
}
</script>

Кроме того, добавил https://www.test.com и https://test.com в настройку src политики безопасности контента (CSP) сайта Discourse, которая находится в разделе администратора Discourse > вкладка «Настройки».

Примечание — по моему опыту, при частом обновлении страницы на маленьком дроплете результаты могут не отображаться примерно 30 секунд, поэтому давайте каждому перезапуску Ghost и редактированию в панели администратора Discourse немного времени для применения изменений.

Дополнительное примечание — при первом проверке раздела комментариев любой статьи наблюдается значительная задержка. @simon рекомендует всегда сначала проверять статью самостоятельно, чтобы у Discourse было время сгенерировать раздел комментариев, связанный с публикацией на форуме.

Ещё раз спасибо всем, очень помогли. Многие комментаторы на YouTube в видеоуроке, который я смотрел, сталкивались с теми же проблемами, что и я, и ссылались на инструкции по интеграции Discourse и Ghost. Ссылки на YouTube могут быть устаревшими, поэтому эта помощь была очень кстати.