Notas sobre la instalación de Discourse en Ubuntu 20.04

Recientemente también me encontré con un problema similar al de @Sonosus, y descubrí que estaba siendo causado por la última versión de Ubuntu (20.04) que viene preinstalada con OpenSSL 3.0.2. Esta situación también puede presentarse con otras versiones de Ubuntu/Debian que vienen preinstaladas con OpenSSL. Si te encuentras con esto, probablemente querrás compilar una versión anterior de OpenSSL desde el código fuente (usé OpenSSL-1.1.1n), y luego volver a ejecutar el comando bundle install. Esencialmente, este mensaje de error trata sobre OpenSSL >= 1.0.1, < 3.0.0, y resulta que 1.1 es la única alternativa.

También querrás verificar qué versión de Ruby estás usando con ruby --version. Discourse todavía usa Ruby 2, por lo que si estás usando Ruby 3.x o posterior, necesitarás usar una versión anterior. Dependiendo de cómo estés instalando Ruby, es probable que te encuentres con un problema similar de OpenSSL al instalar una versión anterior, por lo que te recomiendo usar un administrador de versiones para Ruby aquí, y he descubierto que Ruby 2.7.6 es actualmente la mejor versión para usar con Discourse.

Después de instalar una instancia nueva de Ubuntu 20.04, esto es lo que hice para que bundle install funcionara correctamente:

Instalar dependencias de Discourse, asdf y clonar Discourse

<(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

Configurar base de datos

Crea un rol con el mismo nombre que tu nombre de usuario del sistema Ubuntu:

sudo -u postgres createuser -s "$USER"

Instalar OpenSSL-1.1.1n desde el código fuente

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

Luego agregué la siguiente línea a mi archivo .bashrc

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

Mientras estamos aquí, también agregué las siguientes líneas para asdf

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

Guarda y sal, y luego

source ~/.bashrc

Instalar Ruby 2.7.6

asdf plugin add ruby
asdf install ruby 2.7.6

Es posible que ahora puedas ejecutar bundle install, sin embargo, me encontré con un par de problemas más durante el proceso de instalación de Discourse que mencionaré aquí para referencia en caso de que le sucedan a alguien más.

Ocurrió un error al instalar mini_racer

Mientras ejecutaba bundle install me seguía apareciendo esto después de instalar OpenSSL-1.1.1n y Ruby 2.7.6

Ocurrió un error al instalar mini_racer (0.6.1), y Bundler no puede continuar.

Lo cual se puede solucionar editando la siguiente línea en tu versión local de discourse/Gemfile:

Y reemplazándola con

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

Después de este paso pude hacer que bundle install se ejecutara correctamente.

Esto es similar a un problema que ocurre en MacOS y sobre el que puedes leer más aquí

No such file or directory - convert

En los pasos posteriores de la instalación de Discourse, también me encontré con el siguiente problema al ejecutar 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

      (comparado usando ==)
    #./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 ``'

Este error significa que el paquete ImageMagick no está instalado (proporciona el binario convert)

Supuestamente, este script al principio del proceso de instalación de Discourse debería tener todos los paquetes necesarios, pero parece que este pudo haber sido excluido.

Finalmente, después de instalar ImageMagick con sudo apt install imagemagick ¡pude hacer que mi servidor Discourse funcionara correctamente!

Espero que esta información sea útil para cualquiera que esté pasando por este proceso y tenga algunos problemas. :smile:

5 Me gusta