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:
Ahora, haz clic en el botón Iniciar sesión. Deberías ver la siguiente página:
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:
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:
Ahora, selecciona tu idioma y pulsa el botón Siguiente. Deberías ver la página siguiente:
Aquí, escribe tu tema y pulsa el botón Siguiente. Deberías ver la siguiente página:
Aquí, selecciona Público y pulsa el botón Siguiente. Deberías ver la siguiente página:
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:
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:
Ahora, selecciona tu tema y haz clic en el botón Siguiente. Deberías ver la página siguiente:
Ahora, sube tu logotipo y haz clic en el botón Siguiente. Deberías ver la página siguiente:
Ahora, selecciona Iconos y pulsa el botón Siguiente. Deberías ver la página siguiente:
Ahora, selecciona tu página de inicio y pulsa el botón Siguiente. Deberías ver la página siguiente:
Ahora, selecciona Emoji a tu gusto y pulsa el botón Siguiente. Deberías ver la siguiente página:
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:
Ahora, haz clic en el botón Hecho. Se te redirigirá al panel de Discourse que se muestra en la siguiente página:
Enhorabuena! has instalado y configurado correctamente el foro Discourse en el servidor Ubuntu 18.04.