Cómo instalar Discourse Forum en Ubuntu 18.04 LTS

Discourse es una aplicación de foro de debate gratuita y de código abierto que puede utilizarse como lista de correo y sala de chat. Es una plataforma muy potente y flexible que permite a los usuarios iniciar sesión con Single Sign-On. Se puede integrar con WordPress, Google Analytics, Zendesk, Patreon, Slack y muchos más. Admite notificaciones por correo electrónico, respuestas por correo electrónico y varios métodos de autenticación, como redes sociales e inicio de sesión único. Es sencillo, fácil de usar, plano y viene con un diseño integrado para móviles.

En este tutorial, aprenderemos a instalar y configurar el foro Discourse en un servidor Ubuntu 18.04.

Requisitos

  • Un servidor con Ubuntu 18.04.
  • Una dirección IP estática 192.168.0.101 configurada en tu servidor.
  • Una contraseña de root configurada en tu servidor.

Cómo empezar

En primer lugar, tendrás que actualizar tu servidor con la última versión. Puedes hacerlo con el siguiente comando:

apt-get update -y
apt-get upgrade -y

Una vez actualizado tu servidor, reinicia el sistema para aplicar todos los cambios.

A continuación, tendrás que configurar el FQDN en tu servidor. Puedes hacerlo con el siguiente comando

hostnamectl set-hostname test.example.com

A continuación, abre el archivo /etc/hosts y añade la siguiente línea:

nano /etc/hosts

Añade la siguiente línea:

192.168.0.101 test.example.com test

Guarda y cierra el archivo, cuando hayas terminado. A continuación, ejecuta el siguiente comando para aplicar todos los cambios:

hostname -f

A continuación, tendrás que instalar algunos paquetes necesarios en tu sistema. Puedes instalarlos con el siguiente comando:

apt-get install nginx curl git wget unzip nano -y

Una vez hecho esto, puedes pasar al siguiente paso.

Instalar y configurar PostgreSQL

En primer lugar, tendrás que instalar PostgreSQL en tu sistema. Puedes instalarlo ejecutando el siguiente comando:

apt-get install postgresql -y

Una vez instalado PostgreSQL, inicia sesión en la consola PostgreSQL con el siguiente comando:

sudo -u postgres psql

A continuación, crea una base de datos y un usuario para Discourse con el siguiente comando:

postgres=#CREATE DATABASE discoursedb;
postgres=#CREATE USER discourseuser;
postgres=#ALTER USER discourseuser WITH ENCRYPTED PASSWORD 'password';
postgres=#ALTER DATABASE discoursedb OWNER TO discourseuser;

A continuación, conéctate a discoursedb y crea la extensión hstore y pg_trgm con el siguiente comando:

postgres=#\c discoursedb;
postgres=#CREATE EXTENSION hstore;
postgres=#CREATE EXTENSION pg_trgm;

Por último, sal del PostgreSQL con el siguiente comando:

postgres=#\q

Instalar Ruby

A continuación, tendrás que instalar la última versión de Ruby en tu sistema. Puedes instalar Ruby utilizando RVM.

Primero, instala GNU privacy guard con el siguiente comando:

apt-get install gnupg2 -y

A continuación, importa el público del gestor de versiones de Ruby con el siguiente comando:

gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

Deberías ver la siguiente salida:

gpg: keybox '/root/.gnupg/pubring.kbx' created
gpg: key 105BD0E739499BDB: 6 signatures not checked due to missing keys
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 105BD0E739499BDB: public key "Piotr Kuczynski <[email protected]>" imported
gpg: key 3804BB82D39DC0E3: 103 signatures not checked due to missing keys
gpg: key 3804BB82D39DC0E3: public key "Michal Papis (RVM signing) <[email protected]>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 2
gpg:               imported: 2

A continuación, instala RVM con Ruby y Rails por defecto con el siguiente comando:

curl -sSL https://get.rvm.io | bash -s stable --rails

Después de instalar Ruby y Rails, tendrás que crear los scripts de RVM. Puedes hacerlo con el siguiente comando:

source /usr/local/rvm/scripts/rvm

Ahora puedes ver las versiones de Ruby con el siguiente comando:

rvm list

Deberías ver la siguiente salida:

=* ruby-2.6.3 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

Instalar y configurar Discourse

En primer lugar, tendrás que descargar la última versión de Discourse del repositorio Git. Puedes descargarla con el siguiente comando:

cd /var/www/
git clone https://github.com/discourse/discourse.git

Salida:

Cloning into 'discourse'...
remote: Enumerating objects: 57, done.
remote: Counting objects: 100% (57/57), done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 403387 (delta 26), reused 34 (delta 20), pack-reused 403330
Receiving objects: 100% (403387/403387), 267.39 MiB | 235.00 KiB/s, done.
Resolving deltas: 100% (252384/252384), done.
Checking out files: 100% (27055/27055), done.

A continuación, comprueba la última versión estable de Discourse con el siguiente comando:

cd discourse
git checkout v2.2.4

A continuación, instala el gestor de dependencias Ruby con el siguiente comando:

/usr/local/rvm/src/ruby-2.6.3/bin/gem install bundler -v '1.17.3'

Deberías ver la siguiente salida:

Fetching bundler-1.17.3.gem
Successfully installed bundler-1.17.3
Parsing documentation for bundler-1.17.3
Installing ri documentation for bundler-1.17.3
Done installing documentation for bundler after 15 seconds
1 gem installed

A continuación, necesitarás instalar algunos paquetes adicionales para compilar el código fuente. Puedes instalarlos todos con el siguiente comando:

apt-get install gcc ruby-dev libxslt-dev libxml2-dev zlib1g-dev libpq-dev imagemagick redis-server optipng pngquant jhead jpegoptim gifsicle -y

A continuación, instala todas las dependencias requeridas por Discourse con el siguiente comando:

RAILS_ENV=production bundle install --path vendor/bundle/

A continuación, cambia el nombre del archivo de configuración por defecto de Discourse con el siguiente comando:

mv config/discourse_defaults.conf config/discourse.conf

A continuación, abre el archivo discourse.conf y define la configuración de tu base de datos:

nano config/discourse.conf

Cambia las siguientes líneas:

db_host = localhost
db_port = 5432
db_name = discoursedb
db_username = discourseuser
db_password = password
hostname = "test.example.com"

Guarda y cierra el archivo. A continuación, edita el archivo de configuración del entorno de producción con el siguiente comando

nano /var/www/discourse/config/environments/production.rb

Añade la siguiente línea como tercera línea

require 'uglifier'

A continuación, busca la siguiente línea

config.assets.js_compressor = :uglifier

Y sustitúyela por la siguiente:

config.assets.js_compressor = Uglifier.new(harmony: true)

Guarda y cierra el archivo cuando hayas terminado. A continuación, prepara Discourse para la producción con el siguiente comando:

RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake assets:precompile

A continuación, abre el archivo puma.rb con el siguiente comando:

nano /var/www/discourse/config/puma.rb

Busca la siguiente línea:

APP_ROOT = '/home/discourse/discourse'

Sustitúyela por la siguiente línea:

APP_ROOT = '/var/www/discourse'

Guarda y cierra el archivo cuando hayas terminado. A continuación, crea el directorio de sockets e ID de proceso con el siguiente comando:

mkdir /var/www/discourse/tmp/sockets/
mkdir /var/www/discourse/tmp/pids/

Por último, inicia el Discurso ejecutando el siguiente comando:

RAILS_ENV=production bundle exec puma -C /var/www/discourse/config/puma.rb

Deberías ver la siguiente salida:

[29834] Puma starting in cluster mode...
[29834] * Version 3.11.4 (ruby 2.6.3-p62), codename: Love Song
[29834] * Min threads: 8, max threads: 32
[29834] * Environment: development
[29834] * Process workers: 4
[29834] * Preloading application

[29834] * Listening on unix:///var/www/discourse/tmp/sockets/puma.sock
[29834] ! WARNING: Detected 3 Thread(s) started in app boot:
[29834] ! #<Thread:0x000055b1a3e871a0@/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.0.pre.1/lib/message_bus.rb:667 sleep> - /var/www/html/discourse/vendor/bundle/ruby/2.6.0/gems/hiredis-0.6.1/lib/hiredis/ext/connection.rb:19:in `read'
[29834] ! #<Thread:0x000055b1a3e86840@/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.0.pre.1/lib/message_bus/timer_thread.rb:38 sleep> - /var/www/html/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.0.pre.1/lib/message_bus/timer_thread.rb:123:in `sleep'
[29834] ! #<Thread:0x000055b1a234dfb0@/var/www/discourse/lib/discourse.rb:584 sleep> - /var/www/discourse/lib/discourse.rb:587:in `sleep'
[29834] * Daemonizing...

A continuación, crea una cuenta de administrador para acceder a la interfaz web de Discourse con el siguiente comando:

cd /var/www/discourse
RAILS_ENV=production bundle exec rake admin:create

Proporciona tu correo electrónico y contraseña como se muestra a continuación:

Email:  [email protected]
Password:  
Repeat password:  

Ensuring account is active!

Account created successfully with username example
Do you want to grant Admin privileges to this account? (Y/n)  Y

Your account now has Admin privileges!

A continuación, reinicia el servicio de Discourse con el siguiente comando:

RAILS_ENV=production bundle exec pumactl -P /var/www/discourse/tmp/pids/puma.pid restart

Configurar Nginx para Discourse

A continuación, tendrás que configurar Nginx como proxy inverso para acceder a la interfaz web de Discurso en el puerto 80.

En primer lugar, copia el archivo de configuración del host virtual Nginx de ejemplo con el siguiente comando:

cp /var/www/discourse/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf

A continuación, abre el archivo discourse.conf con el siguiente comando:

nano /etc/nginx/conf.d/discourse.conf

Realiza los siguientes cambios:

#upstream discourse {
#    server unix:/var/www/discourse/tmp/sockets/thin.0.sock;
#    server unix:/var/www/discourse/tmp/sockets/thin.1.sock;
#    server unix:/var/www/discourse/tmp/sockets/thin.2.sock;
#    server unix:/var/www/discourse/tmp/sockets/thin.3.sock;
#}

upstream discourse {
       server unix:/var/www/discourse/tmp/sockets/puma.sock;
 }
server_name test.example.com;

Guarda y cierra el archivo cuando hayas terminado. A continuación, crea el directorio caché con el siguiente comando:

mkdir -p /var/nginx/cache/

A continuación, comprueba si Nginx tiene algún error de sintaxis con el siguiente comando:

nginx -t

Salida:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

A continuación, reinicia Nginx para aplicar todos los cambios:

systemctl restart nginx

También puedes comprobar el estado de Nginx con el siguiente comando:

systemctl status nginx

Salida:

? nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-05-26 04:19:12 UTC; 29min ago
     Docs: man:nginx(8)
  Process: 1052 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 848 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 1065 (nginx)
    Tasks: 3 (limit: 1114)
   CGroup: /system.slice/nginx.service
           ??1065 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??1066 nginx: worker process
           ??1067 nginx: cache manager process

May 26 04:19:04 ubuntu1804 systemd[1]: Starting A high performance web server and a reverse proxy server...
May 26 04:19:12 ubuntu1804 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
May 26 04:19:12 ubuntu1804 systemd[1]: Started A high performance web server and a reverse proxy server.

También necesitas copiar el siguiente archivo JS si obtienes algún error para acceder a la inetrfaz web de Discourse:

cp /var/www/discourse/public/assets/_vendor-3eae3eec8fba033cb1b5af6c103a5b8781caa69cf97fe7773ba89ba68980b263.js /var/www/discourse/public/assets/vendor-3eae3eec8fba033cb1b5af6c103a5b8781caa69cf97fe7773ba89ba68980b263.js

Acceder a la interfaz web de Discourse

Discourse ya está instalado y configurado, es hora de acceder a la interfaz web de Discourse.

Abre tu navegador web y escribe la URL http://test.example.com. Serás redirigido a la siguiente página:

Interfaz web de Discourse

Ahora, haz clic en el botón Iniciar sesión. Deberías ver la siguiente página:

Iniciar sesión en Discourse

Ahora, introduce tu nombre de usuario y contraseña. A continuación, haz clic en el botón Iniciar sesión. Deberías ver la siguiente página:

Panel de usuario de Discourse

Ahora puedes iniciar el asistente de Configuración utilizando la URL http://test.example.com/wizard de tu navegador web. Deberías ver la pantalla de Bienvenida en la página siguiente:

Asistente de configuración

Ahora, selecciona tu idioma y pulsa el botón Siguiente. Deberías ver la página siguiente:

Selecciona el idioma

Aquí, escribe tu tema y pulsa el botón Siguiente. Deberías ver la siguiente página:

Configurar Privilegios de Acceso

Aquí, selecciona Público y pulsa el botón Siguiente. Deberías ver la siguiente página:

Introduce los datos de contacto

Aquí, proporciona tu correo electrónico y la página de contacto. A continuación, haz clic en el botón Siguiente. Deberías ver la página siguiente:

Configuración de la organización

Indica el nombre y la dirección de tu empresa. A continuación, haz clic en el botón Siguiente. Deberías ver la página siguiente:

Elige un tema

Ahora, selecciona tu tema y haz clic en el botón Siguiente. Deberías ver la página siguiente:

Subir logotipo para el sitio web de Discourse

Ahora, sube tu logotipo y haz clic en el botón Siguiente. Deberías ver la página siguiente:

Subir iconos

Ahora, selecciona Iconos y pulsa el botón Siguiente. Deberías ver la página siguiente:

Establecer título de la página de inicio

Ahora, selecciona tu página de inicio y pulsa el botón Siguiente. Deberías ver la página siguiente:

Selecciona Emojis

Ahora, selecciona Emoji a tu gusto y pulsa el botón Siguiente. Deberías ver la siguiente página:

Invitar al personal

Ahora, invita a tu personal a unirse a este foro y pulsa el botón Siguiente. Una vez completada la instalación, deberías ver la siguiente página:

El discurso está listo

Ahora, haz clic en el botón Hecho. Se te redirigirá al panel de Discourse que se muestra en la siguiente página:

Discourse se ha configurado correctamente

Enhorabuena! has instalado y configurado correctamente el foro Discourse en el servidor Ubuntu 18.04.

También te podría gustar...