Долгая пауза при стандартной установке команды: cd /var/www/discourse && su discourse -c 'bundle install --retry 3 --jobs 4'

Привет, ребята! Я новый пользователь Discourse из Китая и столкнулся со странной проблемой при стандартной установке.

После выполнения команды ./discourse-setup мой терминал завис на одной из команд на долгое время (более 20 минут):

I, [2023-06-04T07:47:29.161469 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle config --local deployment true'
I, [2023-06-04T07:47:29.544117 #1]  INFO -- : 
I, [2023-06-04T07:47:29.544260 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle config --local without "development test"'
I, [2023-06-04T07:47:29.725190 #1]  INFO -- : Вы заменяете текущее локальное значение параметра without, которое сейчас установлено как "test:development"
I, [2023-06-04T07:47:29.725290 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle install --retry 3 --jobs 4'

Я искал похожие вопросы на нашем форуме, например, Local installation of discourse on Centos 7, где упоминалось, что это может быть проблема с сетью. Возможно, это связано с тем, что мой сервер находится в Китае, и у меня возникли проблемы с сетью. Однако я проверил это с помощью команды wget https://rubygems.org/, и она сработала:

Не знаю, что делать. Спасибо за ваши ответы.

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


Установка Discourse в условиях Китая 在国内环境下安装Discourse - 主页 - 第 页 - IzIy's Files - MyPress - MyPre.Cn

Обновление версий и обслуживание Discourse осуществляется через GitHub, при этом сам Discourse написан на Ruby.

При использовании CVM и легких серверов от Tencent Cloud, а также ECS от Alibaba Cloud, наблюдается медленный доступ к зарубежным сайтам. Это связано с ограничениями трафика, введенными для поддержки внутренних репозиториев Git.

При клонировании Discourse, размещенного на GitHub, можно ускорить доступ к GitHub, заменив github.com на github.com.cnpmjs.org в ссылке для клонирования. Например:

Замените git clone https://github.com/discourse/discourse_docker.git на git clone https://github.com.cnpmjs.org/discourse/discourse_docker.git.

Кроме того, при запуске ./discourse-setup установщик также устанавливает в Docker некоторые дополнительные проекты.

Например, gem update также требует добавления зеркала Ruby.

Это можно сделать, изменив файлы конфигурации, чтобы добавить адрес зеркала Ruby. Основные затронутые файлы:

discourse/templates/web.template.yml
discourse/containers/app.yml

Перед строками, вызывающими gem update в указанных выше файлах, добавьте следующие команды для настройки зеркала:

gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem update bundler

Для bundle можно добавить зеркало с помощью команды bundle config mirror.https://rubygems.org https://gems.ruby-china.com.

Основные изменения выглядят следующим образом:

diff --git a/templates/web.template.yml b/templates/web.template.yml
index 28fb22d..bb0010c 100644
--- a/templates/web.template.yml
+++ b/templates/web.template.yml
@@ -86,6 +86,9 @@ run:
       cd: $home
       hook: code
       cmd:
+        - git remote -v
+        - git remote set-url origin https://github.com.cnpmjs.org/discourse/discourse.git
+        - gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
         - git reset --hard
         - git clean -f
         - git remote set-branches --add origin master
@@ -145,6 +148,7 @@ run:
       hook: web
       cmd:
         # ensure we are on latest bundler
+        - gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
         - gem update bundler
         - find $home ! -user discourse -exec chown discourse {} \+

@@ -152,6 +156,9 @@ run:
       cd: $home
       hook: bundle_exec
       cmd:
+        - su discourse -c 'gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/'
+        - su discourse -c 'gem update bundler'
+        - su discourse -c 'bundle config mirror.https://rubygems.org https://gems.ruby-china.com'
         - su discourse -c 'bundle install --deployment --retry 3 --jobs 4 --verbose --without test developme

   - exec:
...skipping...

Вопросы настройки почты

Форуму обычно требуется почтовый сервер для отправки различных кодов подтверждения, сообщений о входе, сброса пароля и уведомлений.

Бесплатный корпоративный почтовый сервис NetEase (ym.163.com) может удовлетворить эту потребность. Также можно использовать SMTP-сервис QQ-почты, либо приобрести платный почтовый сервис.

Бесплатный корпоративный почтовый сервис NetEase по умолчанию включает SMTP. Ниже приведен пример настройки app.yml. Похоже, что Discourse не поддерживает подключение через SSL, поэтому здесь используется обычный SMTP. Обратите внимание, что функцию start_tls необходимо явно отключить.

  DISCOURSE_SMTP_ADDRESS: smtp.ym.163.com
  DISCOURSE_SMTP_PORT: 25
  DISCOURSE_SMTP_USER_NAME: mail@getblog.cn
  DISCOURSE_SMTP_PASSWORD: "password"
  DISCOURSE_SMTP_ENABLE_START_TLS: false           # (опционально, по умолчанию true)
  DISCOURSE_SMTP_DOMAIN: getblog.cn    # (требуется некоторыми провайдерами)

Кроме того, почта администратора сайта не должна совпадать с DISCOURSE_SMTP_USER_NAME, иначе вы можете не получать письма регистрации.

Установка системы форума Discourse через Docker (Nginx)

Если вы находитесь в материковом Китае, необходимо использовать ускорение через зеркала. Найдите блок templates в файле конфигурации и добавьте китайское зеркало templates/web.china.template.yml:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/sshd.template.yml"
  - "templates/web.template.yml"
  - "templates/web.china.template.yml"

Очевидно, это вызвано командой bundle install. Эта операция занимает много времени, даже если сервер находится за границей, а у вас ещё есть «стена».
При последующем выполнении yarn install тоже будьте внимательны к этой проблеме.

Лучше не размещать сервер в материковом Китае, ведь даже клонирование ядра Discourse с GitHub может вызвать ошибку…


Для разработчиков в Китае: Судя по всему, эта проблема вызвана командой bundle install. Даже если сервер развёрнут за границей, эта операция займёт много времени. Не говоря уже о том, что вы столкнётесь с известными ограничениями.
Будьте осторожны с той же проблемой при выполнении yarn install позже.

Лучше не размещать сервер в материковом Китае, ведь даже клонирование ядра Discourse с GitHub может вызвать ошибку…

Спасибо за ответ!

На сервере есть прокси, GitHub доступен нормально. Нашёл инструкцию по смене источника для gem/bundle на китайский, сейчас деплой работает (но теперь уперлись в нехватку памяти :face_holding_back_tears:

Хотел бы и зарубежный сервер, но он слишком дорогой :face_holding_back_tears:

https://www.bugcatt.com/archives/2529

В Китае серверы иногда стоят даже дороже, чем за границей (да, речь именно об Aliyun), всё зависит от провайдера.
Постой, ты действительно выбрал Aliyun… ну это да.

Используем студенческий сервер (2 ядра, 2 ГБ) :sweat_smile:
Серверы с более высокой конфигурацией нам не по карману.