Discourse загружен частично, ошибки 404 для некоторых файлов css, js, svg

Здравствуйте, участники форума Discourse.

Ранее я успешно установил Discourse, следуя этой ссылке, но на этот раз столкнулся со следующей ошибкой. Мне нужна ваша помощь в решении вопроса установки.

После устранения этой проблемы я хотел бы поделиться тем, как мне удалось её исправить.

При установке Discourse в веб-браузере я получил следующие ошибки:

[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (wizard_c4aee3fa9261fde8baf9c596832d10e16a40c298.css, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (wizard-vendor-e639f7bedb553c62a51539714bacf10a7bb9c2a68ee57d9d9e9da130ede31d8b.js, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (tada.svg, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js, строка 0)
[Ошибка] Отказано в выполнении https://forum.sangean.co.kr/assets/ember_jquery-57d09ec67e9e407d9b0d42aa1fefd1a470c45310d953b07793a3ca8adc6ec599.js как скрипта, так как был указан заголовок “X-Content-Type: nosniff”, а его тип контента не является MIME-типом скрипта.
[Ошибка] Отказано в выполнении https://forum.sangean.co.kr/assets/wizard-vendor-e639f7bedb553c62a51539714bacf10a7bb9c2a68ee57d9d9e9da130ede31d8b.js как скрипта, так как был указан заголовок “X-Content-Type: nosniff”, а его тип контента не является MIME-типом скрипта.
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (tada.svg, строка 0)

Моя среда: Ubuntu 18.94, обратный прокси Nginx.

Я выполнял все шаги установки от имени root, поэтому вот информация команды “ls -al” для директории /var/discourse/shared/standalone:

Полагаю, что проблема связана с правами доступа, но я не уверен.

drwxr-xr-x 11 root root 4096 Apr 4 05:50 .
drwxr-xr-x 3 root root 4096 Apr 4 04:45 ..
drwxr-xr-x 2 1000 www-data 4096 Apr 4 04:45 backups
drwxr-xr-x 4 root root 4096 Apr 4 04:45 log
drwxr-xr-x 2 uuidd uuidd 4096 Apr 4 04:45 postgres_backup
drwx------ 19 uuidd uuidd 4096 Apr 4 05:50 postgres_data
drwxrwxr-x 3 uuidd uuidd 4096 Apr 4 05:50 postgres_run
drwxr-xr-x 2 landscape ssh 4096 Apr 4 06:00 redis_data
drwxr-xr-x 4 root root 4096 Apr 4 05:50 state
drwxr-xr-x 4 1000 www-data 4096 Apr 4 05:50 tmp
drwxr-xr-x 3 1000 www-data 4096 Apr 4 04:47 uploads

Моя конфигурация Nginx в файле /nginx/sites-available/forum.sangean.co.kr:

server {
listen 80; listen [::]:80;
server_name forum.sangean.co.kr;

return 301 https://$host$request_uri;

}

server {
server_name forum.sangean.co.kr www.forum.sangean.co.kr;

access_log /var/log/nginx/forum.sangean.co.kr.access.log ;
error_log /var/log/nginx/forum.sangean.co.kr.error.log;

include common/locations-wo.conf;
include /var/www/forum.sangean.co.kr/conf/nginx/*.conf;

location / {
    proxy_pass http://forum.sangean.co.kr:25654/;
    proxy_set_header Host $http_host;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect http://forum.sangean.co.kr:25654/ https://forum.sangean.co.kr;
}

}

Если вам понадобятся файлы конфигурации Nginx или Discourse, я могу отредактировать или дополнить этот пост.

Большое спасибо.

Ваша конфигурация nginx выглядит не совсем правильно. Можете также поделиться вашим файлом yml?

Полагаю, вы пытаетесь запустить Discourse на порту 25654, но вы легко можете использовать шаблон сокетов Discourse для запуска через сокет и настроить прокси для перенаправления запросов к сокету.

Этот гайд поможет вам лучше понять конфигурацию nginx: Add an offline page to display when Discourse is rebuilding or starting up

@itsbhanusharma Большое спасибо за ваш ответ.

Я также изучу и реализую ваш пост самостоятельно.

Вот мой файл app.yml.

## это шаблон контейнера Docker Discourse "всё в одном", автономный
##
## После внесения изменений в этот файл ВЫ ДОЛЖНЫ выполнить пересборку
## /var/discourse/launcher rebuild app
##
## БУДЬТЕ *ОЧЕНЬ* ОСТОРОЖНЫ ПРИ РЕДАКТИРОВАНИИ!
## YAML-ФАЙЛЫ ЧРЕЗВЫЧАЙНО ЧУВСТВИТЕЛЬНЫ К ОШИБКАМ В ПРОБЕЛАХ И ВЫРАВНИВАНИИ!
## Посетите http://www.yamllint.com/, чтобы при необходимости проверить этот файл

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  #- "templates/web.ratelimited.template.yml"
## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## какие TCP/IP-порты должен открывать этот контейнер?
## Если вы хотите, чтобы Discourse использовал тот же порт, что и другой веб-сервер, например Apache или nginx,
## см. https://meta.discourse.org/t/17247 для подробностей
expose:
  - "25654:80"
  #- "80:80"   # http
  #- "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

## Установите db_shared_buffers максимум в 25% от общего объема памяти.
  ## будет установлено автоматически при загрузке на основе обнаруженной оперативной памяти, или вы можете переопределить
  db_shared_buffers: "256MB"

  ## может улучшить производительность сортировки, но увеличивает использование памяти на подключение
  #db_work_mem: "40MB"

  ## Какую ревизию Git должен использовать этот контейнер? (по умолчанию: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Сколько одновременных веб-запросов поддерживается? Зависит от объема памяти и количества ядер процессора.
  ## будет установлено автоматически при загрузке на основе обнаруженных процессоров, или вы можете переопределить
  UNICORN_WORKERS: 3

  ## TODO: Доменное имя, на которое будет отвечать этот экземпляр Discourse
  ## Обязательно. Discourse не будет работать с обычным IP-адресом.
  DISCOURSE_HOSTNAME: 'forum.sangean.co.kr'

  ## Раскомментируйте, если хотите, чтобы контейнер запускался с тем же

## именем хоста (опция -h), что указано выше (по умолчанию "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Список email-адресов через запятую, которые станут администраторами и разработчиками
  ## при первой регистрации, например 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'admin@sangean.co.kr'

  ## TODO: SMTP-сервер, используемый для проверки новых учетных записей и отправки уведомлений
  ## Адрес, имя пользователя и пароль SMTP обязательны
  ## ВНИМАНИЕ: символ '#' в пароле SMTP может вызвать проблемы!
  DISCOURSE_SMTP_ADDRESS: smtp.elasticemail.com
  DISCOURSE_SMTP_PORT: 2525
  DISCOURSE_SMTP_USER_NAME: admin@sangean.co.kr
  DISCOURSE_SMTP_PASSWORD: 58BD8932EDB9FEF87F8B3F0A75F482295B4B
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (необязательно, по умолчанию true)

  ## Если вы добавили шаблон Lets Encrypt, раскомментируйте ниже, чтобы получить бесплатный SSL-сертификат
  #LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## Адрес CDN http или https для этого экземпляра Discourse (настроен на извлечение)
  ## см. https://meta.discourse.org/t/14857 для подробностей
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

## Контейнер Docker не имеет состояния; все данные хранятся в /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Плагины размещаются здесь
## см. https://meta.discourse.org/t/19157 для подробностей
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Любые пользовательские команды для выполнения после сборки
run:
  - exec: echo "Начало пользовательских команд"
  ## Если вы хотите установить адрес электронной почты в поле 'От' для первой регистрации, раскомментируйте и измените:
  ## После получения первого письма о регистрации закомментируйте строку обратно. Выполнять нужно только один раз.
  - exec: rails r "SiteSetting.notification_email='admin@sangean.co.kr'"
  - exec: echo "Конец пользовательских команд"

Единственное, что я могу здесь предложить, — это реализовать пост, который я рекомендовал… Тогда у вас не возникнет проблем с обратным прокси.