🇨🇳 Подробное руководство по установке + панель управления | Суперподробное руководство по установке Discourse + панели управления

Я новичок в создании веб-сайтов. По интересам я хочу создать сообщество для технического обмена и планирую развернуть Discourse. Делюсь этим руководством, чтобы помочь тем, кто хочет установить Discourse, избежать типичных ошибок. Китайских руководств по Discourse мало, существующие часто устарели, и многие полагаются на машинный перевод. Я потратил несколько дней на изучение темы.

Что нужно подготовить для создания собственного Discourse:

  1. Легковесный облачный сервер Aliyun (Гонконг). Загрузка плагинов с GitHub с серверов в Китае происходит очень медленно (как улитка), поэтому рекомендую использовать легкий облачный сервер Aliyun в Гонконге или аналогичные решения от других провайдеров. Легковесные серверы дешевле и подходят новичкам. Требуемая конфигурация: объем оперативной памяти более 2 ГБ, иначе установка не пройдет. Если нужно разместить сервер в Китае, можно использовать сервер в Гонконге с оплатой по факту использования, создать образ в панели управления и клонировать его на китайский сервер. Это сэкономит время на отладку.

  2. Короткое и запоминающееся доменное имя, привязанное к IP-адресу сервера. Рекомендуется использовать зоны .com и .net, так как другие домены менее узнаваемы. Домен можно найти через массовый поиск доменов, используя правила для поиска коротких имен.

  3. Операционная система: Ubuntu 20.04 (наиболее распространенная версия).

После создания нового сервера сначала откройте все порты брандмауэра (после завершения отладки закройте ненужные порты, оставив только используемые, чтобы избежать атак хакеров). В панели управления установите пароль root, затем подключитесь к серверу по SSH через веб-интерфейс или скачайте SSH-клиент, например XTerminal.

Затем вставьте следующие три команды, нажмите Enter для выполнения. При появлении запросов отвечайте “yes”. Это обновит репозитории системы и установит Git:

apt update
apt upgrade -y
apt install git

Далее вставьте следующие три команды и нажмите Enter. Выполняйте их от имени администратора. Если пропустить шаг sudo -s, при установке могут возникнуть ошибки создания ресурсов из-за недостатка прав, что приведет к неудаче установки:

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containers

После загрузки запустите мастер установки:

./discourse-setup

Следуйте подсказкам и введите доменное имя, которое будет привязано. При первой установке процесс может занять много времени. Сначала можно ввести любые значения для доменов, кроме основного, а после успешной установки пересобрать конфигурацию. Если что-то непонятно, сделайте скриншот и переведите его через WeChat или используйте переводчик. Для настройки почты можно воспользоваться почтовым сервисом Aliyun.

Появится запрос: продолжить установку или отменить (Ctrl+C). Рекомендуется продолжить.

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

Затем установите панель управления Linux. Это упростит установку других веб-приложений и управление системой, особенно для новичков. По сравнению с панелью Baota, 1Panel проще, чище, без навязчивой рекламы и устанавливается за несколько секунд, тогда как Baota требует длительного компилирования окружения.

Выполните следующий скрипт:

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

При установке система может сообщить, что Docker уже установлен, и предложить войти в панель администратора.

Следуйте инструкциям, войдите в панель администратора. В разделе управления контейнерами вы увидите приложение Discourse. Здесь можно запускать или останавливать его.

Затем перейдите в раздел файлов и отредактируйте файл app.yml. Основные изменения помечены китайскими комментариями.

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

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## Раскомментируйте следующую строку, чтобы включить прослушивание IPv6
  #- "templates/web.ipv6.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:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Установите db_shared_buffers максимум на 25% от общего объема памяти.
  ## Значение будет установлено автоматически при загрузке на основе обнаруженной RAM, либо вы можете переопределить его
  db_shared_buffers: "128MB"
  ## Изменить максимальный размер загружаемых файлов
  upload_size: 300m
  ## Может улучшить производительность сортировки, но увеличивает использование памяти на подключение
  #db_work_mem: "40MB"

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

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  DISCOURSE_DEFAULT_LOCALE: zh_CN

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

  ## TODO: Доменное имя, на которое будет отвечать этот экземпляр Discourse
  ## Обязательно. Discourse не будет работать с чистым IP-адресом.
  ## Изменить основное доменное имя
  DISCOURSE_HOSTNAME: bbs.izdh.net

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

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

  ## TODO: SMTP-сервер для проверки новых аккаунтов и отправки уведомлений
  # SMTP-адрес, имя пользователя и пароль обязательны
  # ВНИМАНИЕ: символ '#' в пароле SMTP может вызвать проблемы!
  ## Изменить SMTP-сервер для отправки писем
  DISCOURSE_SMTP_ADDRESS: smtpdm.aliyun.com
  ## Изменить порт SMTP-сервера
  DISCOURSE_SMTP_PORT: 80
  ## Изменить на учетную запись для автоматической отправки писем
  DISCOURSE_SMTP_USER_NAME: xxxx@xxx.net
  ## Изменить пароль учетной записи для отправки писем
  DISCOURSE_SMTP_PASSWORD: "dj6bCRxoHt25NcD6"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (опционально, по умолчанию true)
  DISCOURSE_SMTP_DOMAIN: smtpdm.aliyun.com
  ## Изменить на учетную запись для автоматической отправки писем
  DISCOURSE_NOTIFICATION_EMAIL: xxxx@xxx.net
  DISCOURSE_SMTP_ENABLE_START_TLS: false
  ## Если вы добавили шаблон Lets Encrypt, раскомментируйте ниже, чтобы получить бесплатный SSL-сертификат
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

## HTTP или HTTPS CDN-адрес для этого экземпляра Discourse (настроен на подтягивание)
## см. https://meta.discourse.org/t/14857 для деталей
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
## Лицензионный ключ MaxMind для геолокации IP-адресов
## см. https://meta.discourse.org/t/-/137387/23 для деталей
#DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## Контейнер 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 для деталей
## Установить 2 плагина
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved	 
          - git clone https://github.com/discourse/discourse-reactions

## Любые пользовательские команды для выполнения после сборки
run:
  - exec: echo "Начало пользовательских команд"
  ## Если вы хотите установить адрес 'From' для вашей первой регистрации, раскомментируйте и измените:
  ## После получения первого письма о регистрации закомментируйте строку обратно. Выполняется только один раз.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Конец пользовательских команд"

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

./launcher stop app
./launcher bootstrap app

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

./launcher start app

При входе в Discourse появится запрос на активацию через email. Если письмо не приходит, используйте следующие команды для создания аккаунта администратора и пропуска активации. Затем в настройках слева установите язык на русский (или китайский, если нужно), а также протестируйте отправку писем. При ошибке система покажет причину. Попробуйте несколько раз, пока не получится.

./launcher enter app
rake admin:create

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

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

Позже при тестировании отправки писем обнаружилась проблема:

Настройки в файле app.yml при пересборке, похоже, не применяются. Необходимо изменить переменные среды контейнера. Однако изменения вступают в силу за 5–6 секунд. Пока неясно, влияет ли это на установку плагинов.

Для совместного размещения с другими сайтами сначала нужно создать обратный прокси, изменить порт 443 по умолчанию на 10443, а затем настроить SSL-сертификат. После этого доступ будет работать корректно.

Обратный прокси

Настройка сертификата

2 лайка

На самом деле, неважно, в какую папку вы клонируете репозиторий discourse_docker; он всё равно автоматически установится в /var/discourse…

Теоретически это маловероятно. Правильная процедура — отредактировать файл app.yml и затем выполнить пересборку (rebuild).

1 лайк

:sweat_smile: Но при редактировании конфигурационного файла обнаружил, что пересборка не сработала — изменение переменных окружения в контейнере вступило в силу за несколько секунд, так что пересборка оказалась излишней. Пока неясно, повлияло ли это на плагины.

Раньше я не выполнял команду sudo -s, из-за чего постоянно возникали ошибки, и я совершенно не понимал, в чём проблема.

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

Что, есть такая проблема? Покажи логи.

О, скажу я вам, действительно ли это проблема? Может, вы поделитесь со мной записями журнала?

Иностранцы говорят, что это возможно, но я никак не могу этого добиться… :sweat_smile:

Советовали, что это возможно, но сколько я ни пробовал, у меня просто не получалось… :sweat_smile:

Может, стоит попробовать это. Бог знает, какую кодировку использовал ваш запрос.

1 лайк

Невероятно увидеть здесь пост на китайском языке :sob:

Может, обсудим с вами опыт создания и развития форума?

Невероятно наткнуться на пост на китайском в этом форуме! :sob:

Могу ли я, дорогой автор темы, поинтересоваться, не готовы ли вы поделиться своим опытом в развитии форумов? Ваши идеи будут очень ценны.

1 лайк

:sweat_smile: Я тоже новичок, и мне кажется, что главное — это контент, а технологии лишь помогают. Сейчас я немного запутался: как настроить хранение контента в Qiniu Cloud и как эффективно привлекать трафик на свою платформу.

Позже обнаружилась ошибка: настройка upload_size: 300m не влияет на размер загружаемых вложений. Не удалось понять, в чём проблема, поэтому решил не устанавливать панель управления…

Я использую Amazon S3.

Однако стоит отметить, что Alibaba OSS теперь совместим с S3. Возможно, стоит попробовать.

Действительно, после настройки инфраструктуры основное внимание переключается на наполнение её контентом.

Следует изменить его согласно предложенному им методу.

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

Похоже, нужно внести изменения в соответствии с предложенным им методом.

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

@Lhc_fl @zengyunsi Есть ли способ реализовать защиту поля имени пользователя на форуме? В настройках кастомизации доступны только фильтрация чувствительных слов и разрешённые поля пользователя.

@Lhc_fl @zengyunsi Is there any way to implement forum username field protection? The custom settings only include sensitive word filtering and permitted user fields.

Поддержка китайских Unicode-имен пользователей: Discourse 支持中文用户名 - Discourse - iSharkFly

Поддержка китайских Unicode-имен пользователей: Discourse поддерживает китайские имена пользователей — Discourse — iSharkFly

Хотя и так, что значит «защита поля имени пользователя»? Обязательно ли проходить модерацию при изменении username?

Если речь об этом, то в Discourse такой функции нет из коробки. Предлагаю написать плагин.

Или просто периодически просматривайте все имена пользователей на сайте, чтобы проверить, нет ли проблем.

@go_ahead Кроме того, рекомендую задать вопрос на английском или в смеси английского и китайского в отдельной теме. Иначе оффтоп в meta будет разделён на отдельные темы.

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

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

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

В качестве альтернативы можно периодически проводить обзор всех имён пользователей на платформе, чтобы выявить возможные проблемы.

@go_ahead Кроме того, рекомендую задавать свой вопрос на английском или в смеси английского и китайского в отдельной теме. Такой подход предпочтительнее, поскольку оффтоп-обсуждения в разделе meta обычно разделяют на отдельные темы.

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

Кажется, я нашел эту функцию, вот она

Похоже, я наткнулся на эту функцию; думаю, это она.

1 лайк

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

По моим данным, модераторы обычно размещают темы с китайским контентом под тегом chinese-translation.

В целом, это не является серьёзной проблемой; можно также добавить краткое пояснение на английском языке под своим сообщением.

На самом деле, это не так уж и важно, поскольку модераторы могут воспользоваться переводчиком, чтобы получить общее представление о содержании. Проблема незначительна.

1 лайк

🇨🇳 Discourse Official Install Guide | Discourse 云平台安装 Этот материал, скорее всего, всё ещё актуален.

Однако мы используем физические серверы и начинали с Docker-контейнеров, поэтому, возможно, не применяли конфигурацию, связанную с консолью.

Официальное руководство по установке Discourse, на которое ссылается китайский текст, вероятно, всё ещё применимо. Однако стоит отметить, что наша реализация использует физические серверы и начинается с Docker-контейнеров. Следовательно, мы могли не использовать упомянутые в руководстве настройки, связанные с консолью.

Такой подход, начинающийся с Docker-контейнеров на физических серверах, потенциально отличается от стандартного процесса установки, особенно в части настройки и управления консолью. Важно помнить об этом различии при следовании официальному руководству, так как некоторые шаги могут потребовать адаптации или пропуска для соответствия нашему конкретному методу развёртывания.

:sweat_smile: Речь идёт об API, использовать его с китайским языком невозможно.

:sweat_smile: Боюсь, что API не поддерживает ввод на китайском языке.

Похоже, проблема может быть в этой панели… Лучше вернуться к исходному методу и выполнить чистую установку. Я хочу использовать Qiniu Cloud.