Заметки об установке Discourse на Ubuntu 20.04

Я тоже недавно столкнулся с проблемой, похожей на ту, что у @Sonosus, и выяснил, что она вызвана тем, что в последней версии Ubuntu (20.04) по умолчанию предустановлен OpenSSL 3.0.2. Эта ситуация может также наблюдаться в других версиях Ubuntu/Debian, где OpenSSL установлен по умолчанию. Если вы столкнулись с этим, вам, скорее всего, потребуется скомпилировать более раннюю версию OpenSSL из исходного кода (я использовал OpenSSL-1.1.1n), а затем снова запустить команду bundle install. По сути, эта ошибка связана с требованием OpenSSL >= 1.0.1, < 3.0.0, и оказывается, что 1.1 — единственная альтернатива.

Также стоит проверить версию Ruby с помощью команды ruby --version. Discourse всё ещё использует Ruby 2, поэтому, если вы используете Ruby 3.x или новее, вам понадобится более ранняя версия. В зависимости от способа установки Ruby вы, вероятно, столкнётесь с аналогичной проблемой OpenSSL при установке более ранней версии, поэтому я рекомендую использовать менеджер версий для Ruby. На данный момент лучшей версией для работы с Discourse является Ruby 2.7.6.

После установки чистой версии Ubuntu 20.04 вот что я сделал, чтобы bundle install запустился корректно:

Установка зависимостей Discourse, asdf и клонирование репозитория Discourse

bash <(wget -qO- https://raw.githubusercontent.com/discourse/install-rails/master/linux)
sudo apt install build-essential checkinstall zlib1g-dev
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.0
git clone https://github.com/discourse/discourse.git ~/discourse

Настройка базы данных

Создайте роль с тем же именем, что и имя пользователя вашей системы Ubuntu:

sudo -u postgres createuser -s "$USER"

Установка OpenSSL-1.1.1n из исходного кода

wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz
tar -zxf openssl-1.1.1n.tar.gz && cd openssl-1.1.1n
./config --prefix=/opt/openssl-1.1.1n --openssldir=/opt/openssl-1.1.1n shared zlib
make
make test
make install
sudo rm -rf /opt/openssl-1.1.1n/certs
sudo ln -s /etc/ssl/certs /opt/openssl-1.1.1n

Затем я добавил следующую строку в свой файл .bashrc:

export RUBY_CONFIGURE_OPTS="--with-openssl-dir=/opt/openssl-1.1.1n/"

Пока мы здесь, я также добавил следующие строки для asdf:

. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash

Сохраните и выйдите, затем выполните:

source ~/.bashrc

Установка Ruby 2.7.6

asdf plugin add ruby
asdf install ruby 2.7.6

Теперь вы, возможно, сможете запустить bundle install, однако у меня возникло ещё несколько проблем в процессе установки Discourse, о которых я упомяну здесь для справки, если они возникнут у кого-то ещё.

Ошибка при установке mini_racer

При запуске bundle install после установки OpenSSL-1.1.1n и Ruby 2.7.6 я постоянно сталкивался с ошибкой:

An error occurred while installing mini_racer (0.6.1), and Bundler cannot continue.

Это можно исправить, отредактировав следующую строку в локальной версии файла Gemfile в репозитории discourse:

И заменив её на:

gem 'mini_racer', github: 'rubyjs/mini_racer', branch: 'refs/pull/186/head'

После этого шага мне удалось успешно запустить bundle install.

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

Нет такого файла или каталога - convert

На более поздних этапах установки Discourse я также столкнулся со следующей проблемой при запуске bundle exec rake autospec:

Failures: 
  1. AboutController.index should display the about page for logged in user when login_required is true
    Failure/Error: expect(response.status).to eq(200)

    expected: 200
    got: 500

      (compared using ==)
    #./spec/requests/about_controller_spec.rb:27:in 'block (3 levels) in <main>'
    #./spec/rails_helper.rb:277:in 'block (2 levels) in <top (required)>
    #---------------------
    #---Caused by:---
    # Errno::ENOENT
    #  No such file or directory - convert
    # ./lib/letter_avatar.rb:105:in ``'

Эта ошибка означает, что пакет ImageMagick не установлен (он предоставляет исполняемый файл convert).

Согласно документации, этот скрипт в начале процесса установки Discourse должен устанавливать все необходимые пакеты, но, похоже, этот был исключён.

Наконец, после установки ImageMagick с помощью команды sudo apt install imagemagick мне удалось успешно запустить свой сервер Discourse!

Надеюсь, эта информация будет полезна всем, кто проходит через этот процесс и сталкивается с трудностями. :smile: