Notas sobre a instalação do Discourse no Ubuntu 20.04

Recentemente, também me deparei com um problema semelhante ao do @Sonosus e descobri que ele estava sendo causado pela versão mais recente do Ubuntu (20.04) que vem pré-instalada com OpenSSL 3.0.2. Essa situação também pode estar presente com outras versões do Ubuntu/Debian que vêm pré-instaladas com OpenSSL. Se você estiver encontrando isso, provavelmente desejará compilar uma versão anterior do OpenSSL a partir do código-fonte (usei OpenSSL-1.1.1n) e, em seguida, executar novamente o comando bundle install. Essencialmente, esta mensagem de erro é sobre OpenSSL >= 1.0.1, < 3.0.0, e descobre-se que 1.1 é a única alternativa.

Você também vai querer verificar qual versão do Ruby você está usando com ruby --version. O Discourse ainda usa Ruby 2, então se você estiver usando Ruby 3.x ou posterior, precisará usar uma versão anterior. Dependendo de como você está instalando o Ruby, é provável que você encontre um problema semelhante de OpenSSL ao instalar uma versão anterior, então eu recomendaria usar um gerenciador de versão para Ruby aqui, e eu descobri que o Ruby 2.7.6 é atualmente a melhor versão para usar com o Discourse.

Após instalar uma nova instância do Ubuntu 20.04, aqui está o que fiz para que bundle install fosse executado corretamente:

Instalar Dependências do Discourse, asdf e Clonar o 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

Configurar Banco de Dados

Crie a role com o mesmo nome do seu nome de usuário do sistema Ubuntu:

sudo -u postgres createuser -s "$USER"

Instalar OpenSSL-1.1.1n a partir do Código-Fonte

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

Em seguida, adicionei a seguinte linha ao meu arquivo .bashrc

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

Enquanto estamos aqui, também adicionei as seguintes linhas para asdf

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

Salve e saia, e então

source ~/.bashrc

Instalar Ruby 2.7.6

asdf plugin add ruby
asdf install ruby 2.7.6

Você pode estar pronto para executar bundle install agora, no entanto, encontrei alguns outros problemas durante o processo de instalação do Discourse que mencionarei aqui para referência, caso isso aconteça com mais alguém.

Ocorreu um erro ao instalar mini_racer

Ao executar bundle install, continuei encontrando erros após instalar o OpenSSL-1.1.1n e o Ruby 2.7.6

Ocorreu um erro ao instalar mini_racer (0.6.1), e o Bundler não pode continuar.

O que pode ser resolvido editando a seguinte linha na sua versão local do discourse/Gemfile:

E substituindo-a por

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

Após esta etapa, consegui executar bundle install com sucesso.

Isso é semelhante a um problema que ocorre no MacOS sobre o qual você pode ler mais aqui

Arquivo ou diretório não encontrado - convert

Nas etapas posteriores da instalação do Discourse, também encontrei o seguinte problema ao executar bundle exec rake autospec

Falhas:
  1. AboutController.index deve exibir a página sobre para o usuário logado quando login_required for true
    Falha/Erro: expect(response.status).to eq(200)

    esperado: 200
    obtido: 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)>'
    #---------------------
    #---Causado por:---
    # Errno::ENOENT
    #  Arquivo ou diretório não encontrado - convert
    # ./lib/letter_avatar.rb:105:in ``'

Este erro significa que o pacote ImageMagick não está instalado (ele fornece o binário convert)

Supostamente, este script no início do processo de instalação do Discourse deveria ter todos os pacotes necessários, mas parece que este pode ter sido excluído.

Finalmente, após instalar ImageMagick com sudo apt install imagemagick, consegui colocar meu servidor Discourse em funcionamento com sucesso!

Espero que esta informação seja útil para quem estiver passando por este processo e tendo alguns problemas. :smile:

5 curtidas