Сайт недоступен после обновления с 3.4.0 до 3.4.1

Всем привет,

Я только что обновил экземпляр Discourse с версии 3.4.0 до 3.4.1 (с помощью команды ./launcher rebuild app). Обновление прошло гладко — ошибок в процессе не возникло, и Docker-контейнер запущен. Однако сайт полностью недоступен.

Столкнулся ли кто-нибудь с этой проблемой ранее? Есть ли идеи, как провести диагностику? Как я могу предоставить вам дополнительную информацию?

Заранее спасибо за помощь!

Привет,

Вы пробовали пересобрать второй раз?
В некоторых случаях это может помочь. Я бы сначала попробовал это.

Также вы можете посмотреть ./launcher logs app и /shared/standalone/log/rails/production.log, если заметите что-то интересное.

Мы экспериментируем с AI-ответчиком, который отправляет сообщения сюда. В данном случае он дал вполне разумный совет:

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

  1. Проверьте логи ошибок Discourse в интерфейсе администратора:

    • Если у вас есть права администратора и сайт частично доступен, вы можете просмотреть логи из панели администратора. Перейдите в раздел /logs, чтобы найти сообщения об ошибках.
  2. Изучите другие логи сервера:

    • Выполните следующие команды на вашем сервере:
      cd /var/discourse
      ./launcher enter app
      cd /shared/log/rails
      less production.log
      
      Используйте утилиту less или аналогичные инструменты для чтения логов и выявления возможных ошибок.
  3. Проверьте логи NGINX:

    • Вы можете проверить логи NGINX на наличие ошибок веб-сервера с помощью следующих команд:
      cd /var/discourse
      ./launcher enter app
      cd /var/log/nginx
      less error.log
      
  4. Проблемы с сетью и DNS:

    • Выполните тесты, чтобы убедиться, что DNS вашего домена разрешается корректно, и порты 443 и 80 доступны.

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

Полезные ресурсы:

Дополнительный контекст:
Если проблема сохраняется, возможными причинами могут быть:

  • Несовместимость плагина после обновления.
  • Недостаточный объем памяти или дискового пространства во время пересборки.
  • Изменения в конфигурационном файле app.yml.

Спасибо!

Да, результат тот же.

Вот логи:

[default] start
[default] done
[default] Shutting down
[default] Terminating quiet threads
[default] Scheduler exiting...
[default] Pausing to allow jobs to finish...
[default] Bye!
[default] [PrettyText] Deprecation notice: `registerOption() from `pretty-text` is deprecated. Use `helper.registerOptions()` instead. [deprecated since Discourse 2.8.0.beta9] [removal in Discourse 2.9.0.beta1] [deprecation id: discourse.pretty-text.registerOption]
[default] Booting Sidekiq 6.5.12 with Sidekiq::RedisConnection::RedisAdapter options {:host=>"data", :port=>6379, :namespace=>"sidekiq"}
[default] [PrettyText] Deprecation notice: `registerOption() from `pretty-text` is deprecated. Use `helper.registerOptions()` instead. [deprecated since Discourse 2.8.0.beta9] [removal in Discourse 2.9.0.beta1] [deprecation id: discourse.pretty-text.registerOption]
[default] [PrettyText] Deprecation notice: `registerOption() from `pretty-text` is deprecated. Use `helper.registerOptions()` instead. [deprecated since Discourse 2.8.0.beta9] [removal in Discourse 2.9.0.beta1] [deprecation id: discourse.pretty-text.registerOption]
[default] [PrettyText] Deprecation notice: `registerOption() from `pretty-text` is deprecated. Use `helper.registerOptions()` instead. [deprecated since Discourse 2.8.0.beta9] [removal in Discourse 2.9.0.beta1] [deprecation id: discourse.pretty-text.registerOption]
[default] [PrettyText] Deprecation notice: `registerOption() from `pretty-text` is deprecated. Use `helper.registerOptions()` instead. [deprecated since Discourse 2.8.0.beta9] [removal in Discourse 2.9.0.beta1] [deprecation id: discourse.pretty-text.registerOption]
[default] Booted Rails 7.2.2.1 application in production environment
[default] Running in ruby 3.3.6 (2024-11-05 revision 75015d4c1f) [x86_64-linux]
[default] See LICENSE and the LGPL-3.0 for licensing details.
[default] Upgrade to Sidekiq Pro for more features and support: https://sidekiq.org
[default] start
[default] done
root@forum-web-only:/shared/log/rails#

Вот логи NGINX:

2025/03/07 22:13:42 [warn] 2195#2195: duplicate extension "wasm", content type: "application/wasm", previous content type: "application/wasm" in /etc/nginx/conf.d/discourse.conf:4
2025/03/07 22:13:42 [emerg] 2195#2195: unknown "public" variable
2025/03/07 22:13:43 [warn] 2198#2198: duplicate extension "wasm", content type: "application/wasm", previous content type: "application/wasm" in /etc/nginx/conf.d/discourse.conf:4
2025/03/07 22:13:43 [emerg] 2198#2198: unknown "public" variable
2025/03/07 22:13:44 [warn] 2200#2200: duplicate extension "wasm", content type: "application/wasm", previous content type: "application/wasm" in /etc/nginx/conf.d/discourse.conf:4
2025/03/07 22:13:44 [emerg] 2200#2200: unknown "public" variable
2025/03/07 22:13:45 [warn] 2202#2202: duplicate extension "wasm", content type: "application/wasm", previous content type: "application/wasm" in /etc/nginx/conf.d/discourse.conf:4
2025/03/07 22:13:45 [emerg] 2202#2202: unknown "public" variable
2025/03/07 22:13:46 [warn] 2204#2204: duplicate extension "wasm", content type: "application/wasm", previous content type: "application/wasm" in /etc/nginx/conf.d/discourse.conf:4
2025/03/07 22:13:46 [emerg] 2204#2204: unknown "public" variable

Вот логи утилиты discourse-doctor:

DISCOURSE DOCTOR Fri 07 Mar 2025 10:15:28 PM UTC
OS: Linux forum 5.4.0-208-generic #228-Ubuntu SMP Fri Feb 7 19:41:33 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux


YML=web_only.yml
Found containers/web_only.yml

==================== YML SETTINGS ====================
DISCOURSE_HOSTNAME=forum.pragmaticentrepreneurs.com
SMTP_ADDRESS=smtp.eu.mailgun.org
DEVELOPER_EMAILS=REDACTED

==================== YML SETTINGS ====================
DISCOURSE_HOSTNAME=forum.pragmaticentrepreneurs.com
SMTP_ADDRESS=smtp.eu.mailgun.org
DEVELOPER_EMAILS=REDACTED
SMTP_PASSWORD=REDACTED
SMTP_PORT=587
SMTP_USER_NAME=postmaster@mg.pragmaticentrepreneurs.com
LETSENCRYPT_ACCOUNT_EMAIL=REDACTED

==================== DOCKER INFO ====================
DOCKER VERSION: Docker version 27.3.1, build ce12230

DOCKER PROCESSES (docker ps -a)

CONTAINER ID   IMAGE                      COMMAND        CREATED         STATUS         PORTS
          NAMES
d5a81b9154f4   local_discourse/web_only   "/sbin/boot"   6 minutes ago   Up 6 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->
443/tcp   web_only
0b49a4b64386   local_discourse/data       "/sbin/boot"   19 months ago   Up 22 hours
          data


Discourse container web_only is running


==================== PLUGINS ====================
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-akismet.git
          - git clone https://github.com/discourse/discourse-data-explorer.git
          - git clone https://github.com/camilleroux/discourse-affiliate.git
          - git clone https://github.com/somoza/discourse-xorigin.git
          - git clone https://github.com/discourse/discourse-chat-integration.git

WARNING:
You have what appear to be non-official plugins.
If you are having trouble, you should disable them and try rebuilding again.

See https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb for the official list.

========================================
Discourse version at forum.pragmaticentrepreneurs.com: NOT FOUND
Discourse version at localhost: NOT FOUND


==================== MEMORY INFORMATION ====================
OS: Linux
RAM (MB): 2067

              total        used        free      shared  buff/cache   available
Mem:           1971         988         101         178         881         627
Swap:          2047         190        1857

==================== DISK SPACE CHECK ====================
---------- OS Disk Space ----------
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        49G   39G   11G  80% /

==================== DISK INFORMATION ====================
Disk /dev/loop0: 55.37 MiB, 58052608 bytes, 113384 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop1: 63.76 MiB, 66842624 bytes, 130552 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop2: 55.37 MiB, 58052608 bytes, 113384 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop3: 91.85 MiB, 96292864 bytes, 188072 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop4: 91.9 MiB, 96346112 bytes, 188176 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop5: 63.71 MiB, 66789376 bytes, 130448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop6: 44.45 MiB, 46596096 bytes, 91008 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop7: 44.46 MiB, 46604288 bytes, 91024 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 603625F3-7AE2-40CB-B05E-0BD7EA2D57E4

Device      Start       End   Sectors  Size Type
/dev/vda1  227328 104857566 104630239 49.9G Linux filesystem
/dev/vda14   2048     10239      8192    4M BIOS boot
/dev/vda15  10240    227327    217088  106M Microsoft basic data

Partition table entries are not in disk order.

==================== END DISK INFORMATION ====================

==================== MAIL TEST ====================
For a robust test, get an address from http://www.mail-tester.com/
Sending mail to REDACTED  . .
Testing sending to  using smtp.eu.mailgun.org:587, username:*** with plain auth.
SMTP server connection successful.
Sending to . . .
Mail was not sent.

Reason: 501 Invalid command or cannot parse to address

==================== DONE! ====================

Дает ли это больше информации?

Привет! Кто-нибудь видит, как я могу это исправить? Большое спасибо :folded_hands:

У меня всё работает. Возможно, потому что я не авторизован. Попробуйте, пожалуйста, безопасный режим.

Один из ваших плагинов неофициальный и очень устаревший; это форк более актуального плагина:

Привет! Спасибо за помощь. Я продолжил расследование.

Контекст:

  • Всё работает отлично в версии 3.4.0 (установка web_only + data).
  • При пересборке web_only для обновления до версии 3.4.1 или сейчас 3.4.2 сайт становится недоступным.

Тесты:

  • Та же проблема возникает, когда я пытаюсь оставить только основные и официальные плагины.
  • Версия 3.4.2 не решает проблему; результат такой же, как в 3.4.0.
  • Я не могу войти в безопасный режим, так как после пересборки сайт становится недоступным.
  • Когда я восстанавливаю снимок с версией 3.4.0, всё снова работает.

Проблема, вероятно, связана с тем, что в моих логах NGINX:

Кажется, это связано с SSL, но эта проблема не выглядит похожей на мою: How to solve error duplicate extension "wasm"

Вы видите, откуда возникает проблема?

Обычно при возникновении проблем с пересборкой отображается их причина. Попробуйте выполнить пересборку снова и после завершения прокрутите страницу вверх, чтобы найти сообщение об ошибке.

Если вы не можете решить проблему, вы можете начать заново с нового VPS, восстановить резервную копию и попробовать ещё раз.

Если вопрос срочный, вы можете обратиться в канал Marketplace, чтобы запросить платную помощь. Или рассмотрите вариант официального хостинга Discourse! После запуска пробной версии вы сможете восстановить резервную копию и быстро вернуть своё сообщество в рабочее состояние.