Notes about Installing Discourse on Ubuntu 20.04

I also recent ran into an issue similar to @Sonosus, and found that it was being caused by the latest version of Ubuntu (20.04) coming preinstalled with OpenSSL 3.0.2. This situation may also be present with other versions of Ubuntu/Debian that come preinstalled with OpenSSL. If you’re encountering this you’ll likely want to compile an earlier version of OpenSSL from source (I used OpenSSL-1.1.1n), and then re-run the bundle install command. Essentially, this error message is about OpenSSL >= 1.0.1, < 3.0.0, and turns out 1.1 is the only alternative.

You’ll also want to check what version of Ruby you’re using with ruby --version Discourse still uses Ruby 2, so if you’re using Ruby 3.x or later you’ll need to use an earlier version. Depending on how you’re installing Ruby, you’re likely to run into a similar OpenSSL issue with installing an earlier version, so I would recommend using a version manager for Ruby here, and I’ve found that Ruby 2.7.6 is currently the best version to use with Discourse.

After installing a fresh instance of Ubuntu 20.04, here’s what I did to get bundle install to run correctly:

Install Discourse Dependencies, asdf, and Clone 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

Setup Database

Create role with the same name as your ubuntu system username :

sudo -u postgres createuser -s "$USER"

Install OpenSSL-1.1.1n from Source

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

I then added the following line to my .bashrc file

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

While we’re here, I also added the following lines for asdf

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

Save and exit, and then

source ~/.bashrc

Install Ruby 2.7.6

asdf plugin add ruby
asdf install ruby 2.7.6

You might be good to run bundle install now, however, I ran into a couple other issues during the Discourse installation process that I’ll mention here for reference in case these happen to anyone else.

An error occurred while installing mini_racer

While running bundle install I kept running into after installing OpenSSL-1.1.1n and Ruby 2.7.6

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

Which can be solved by editing the following line in your local version of discourse/Gemfile:

And replacing it with

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

After this step I was able to get bundle install to run successfully.

This is similar to an issue happening on MacOS that you can read more about here

No such file or directory - convert

In the later steps of installing Discourse, I also ran into the following issue when running 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

      (comparted 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:inc ``'

This error means the ImageMagick package is not installed (it provides the convert binary)

Supposedly this script at the beginning of the Discourse install process should have all the necessary packages, but it looks like this one may have been excluded.

Finally, after installing ImageMagick with sudo apt install imagemagick I was able to get my Discourse server running successfully!

I hope this information is helpful to anyone who’s going through this process and having some trouble. :smile:

5 Likes