GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo instalar Discourse Forum con Nginx y Free Lets Encrypt SSL en Debian 11

Discourse es una plataforma de discusión comunitaria de código abierto creada con el lenguaje Ruby. Está diseñado para funcionar como foro, software de chat o lista de correo. Se integra fácilmente con otras plataformas y su funcionalidad se puede ampliar con complementos.

En este tutorial, aprenderá a instalar Discourse Forum con el servidor Nginx en un servidor basado en Debian 11.

Requisitos

  • Un servidor que ejecuta Debian 11 con un mínimo de 1 GB de RAM y 1 CPU Core. La configuración de Discourse creará automáticamente una partición de intercambio en sistemas con 1 GB o menos de RAM. Por lo tanto, se recomienda instalarlo en un sistema con al menos 2 GB de RAM.

  • Un usuario no root con privilegios sudo.

  • Un nombre de dominio (discourse.example.com ) apuntando al servidor.

  • Todo está actualizado.

    $ sudo apt update && sudo apt upgrade
    
  • Pocos paquetes que tu sistema necesita.

    $ sudo apt install nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring -y
    

    Es posible que algunos de estos paquetes ya estén instalados en su sistema.

Paso 1:configurar el cortafuegos

El primer paso es configurar el cortafuegos. Debian viene con ufw (cortafuegos sin complicaciones).

Compruebe si el cortafuegos se está ejecutando.

$ sudo ufw status

Deberías obtener el siguiente resultado.

Status: inactive

Permita el puerto SSH para que el cortafuegos no interrumpa la conexión actual al habilitarlo.

$ sudo ufw allow OpenSSH

Permitir puertos HTTP y HTTPS también.

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

Habilitar el cortafuegos

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Vuelva a comprobar el estado del cortafuegos.

$ sudo ufw status

Debería ver un resultado similar.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Paso 2:instalar Git

Instale Git usando el flujo de aplicaciones predeterminado.

$ sudo dnf install git

Confirme la instalación.

$ git --version
git version 2.30.2

Ejecute los siguientes comandos para configurar la instalación de Git.

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

Paso 3:instalar Docker

Para instalar la última versión de Docker, agregue la clave GPG oficial de Docker.

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Instale el repositorio oficial de Docker.

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Actualice los repositorios del sistema Debian.

$ sudo apt update

Instale la última versión de Docker.

$ sudo apt install docker-ce docker-ce-cli containerd.io

Verifique que Docker se esté ejecutando.

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2022-02-05 13:32:54 UTC; 1h ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 5818 (dockerd)
      Tasks: 26
     Memory: 1.4G
        CPU: 5min 34.561s
     CGroup: /system.slice/docker.service
             ?? 5818 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
             ??12162 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.17.0.2 -contai>
             ??12169 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8080 -container-ip 172.17.0.2 -container-p>

De forma predeterminada, Docker requiere privilegios de root. Si desea evitar el uso de sudo cada vez que ejecuta el docker comando, agregue su nombre de usuario a la docker grupo.

$ sudo usermod -aG docker $(whoami)

Para habilitar este cambio, deberá cerrar sesión en el servidor y volver a iniciarla como el mismo usuario.

Paso 4 - Descargar Discourse

Cree el directorio raíz para Discourse.

$ sudo mkdir /var/discourse

Clona el repositorio oficial de Discourse Docker Github.

$ sudo git clone https://github.com/discourse/discourse_docker.git /var/discourse

Paso 5:configurar Discourse

Cree el archivo de configuración app.yml copiando el ejemplo standalone.yml archivo.

$ sudo cp samples/standalone.yml containers/app.yml

Abra el app.yml para editar.

$ sudo nano containers/app.yml

Establecer dominio

Establezca la variable DISCOURSE_HOSTNAME al nombre de dominio que eligió para su foro. Si no tiene un nombre de dominio, puede usar una dirección IP aquí.

DISCOURSE_HOSTNAME: 'discourse.example.com'

Configurar puertos expuestos

Cambia la línea "80:80 a "8080:80" . Esto cambiará el puerto HTTP externo para Discourse a 8080 ya que usaremos Nginx en el puerto 80. Comente el "443:443" ya que instalaremos SSL externamente.

expose:
  - "8080:80"   # http
  #- "443:443" # https

Configurar ajustes de SMTP

Complete las siguientes variables según el servicio de correo electrónico transaccional que esté utilizando. Configure el correo electrónico para su cuenta de administrador usando la variable DISCOURSE_DEVELOPER_EMAILS . Este paso es obligatorio, de lo contrario, su foro no se iniciará.

..
DISCOURSE_DEVELOPER_EMAILS: '[email protected]'
..
DISCOURSE_SMTP_ADDRESS: smtp.example.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: [email protected]
DISCOURSE_SMTP_PASSWORD: your_smtp_password
#DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)
#DISCOURSE_SMTP_DOMAIN: discourse.example.com    # (required by some providers)
DISCOURSE_NOTIFICATION_EMAIL: [email protected]    # (address to send notifications from)

Configuración de memoria (opcional)

Si su servidor tiene poca memoria RAM, puede configurar las siguientes variables en consecuencia para reducir la huella de memoria de Discourse.

db_shared_buffers: '128MB'
UNICORN_WORKERS: 2

La variable db_shared_buffers generalmente se establece en el 25% de la memoria disponible.

Configuración de GeoLite2 (Opcional)

Si desea la función de búsqueda de IP en Discourse, regístrese para obtener la cuenta gratuita de Maxmind Geolite2 y obtenga una clave de licencia. Pegue esa clave de licencia como el valor de la siguiente variable.

DISCOURSE_MAXMIND_LICENSE_KEY: your_maxmind_license_key

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Paso 6:instalar Discourse

Ejecute el siguiente comando para iniciar su contenedor Discourse.

$ sudo ./launcher bootstrap app

Inicie la aplicación Discourse.

$ sudo ./launcher start app

Puede acceder al foro visitando las URL http://yourserver_IP:8080 o http://discourse.example.com:8080 en tu navegador. Obtendrá la siguiente pantalla.

Haga clic en Registrarse botón para proceder. El ID de correo electrónico establecido en app.yml el archivo se completará previamente para usted.

Haga clic en Registrarse botón para registrar la cuenta de administrador. Accederá a la pantalla de confirmación del correo electrónico.

Si su configuración de SMTP es correcta, recibirá un correo para activar la cuenta. Haga clic en el enlace de su correo electrónico para terminar de configurar la cuenta.

Haga clic en Activar botón para finalizar la instalación.

Accederá a la pantalla del asistente de configuración de Discourse. Puede omitirlo para ir directamente al foro o pasar por todo el asistente.

Tu foro de Discourse está listo. El siguiente paso es instalar SSL y poner el foro detrás del servidor Nginx.

Paso 7:instalar SSL

Para instalar un certificado SSL usando Let's Encrypt, necesitamos instalar la herramienta Certbot.

Usaremos el instalador del paquete Snapd para eso. Dado que la mayoría de los servidores Debian no lo incluyen, instale el instalador de Snapd.

$ sudo apt install snapd

Asegúrese de que su versión de Snapd esté actualizada.

$ sudo snap install core && sudo snap refresh core

Instale Certbot.

$ sudo snap install --classic certbot

Use el siguiente comando para asegurarse de que el comando Certbot se pueda ejecutar creando un enlace simbólico al /usr/bin directorio.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Verifique la instalación.

$ certbot --version
certbot 1.22.0

Genere el certificado SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d discourse.example.com

El comando anterior descargará un certificado en /etc/letsencrypt/live/discourse.example.com directorio en su servidor.

Generar un grupo Diffie-Hellman certificado.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Cree un directorio webroot de desafío para la renovación automática de Let's Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Cree un trabajo cron para renovar el SSL. Se ejecutará todos los días para verificar el certificado y renovarlo si es necesario. Para eso, primero crea el archivo /etc/cron.daily/certbot-renew y ábralo para editarlo.

$ sudo nano /etc/cron.daily/certbot-renew

Pegue el siguiente código.

#!/bin/sh
certbot renew --cert-name discourse.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Cambie los permisos en el archivo de tareas para que sea ejecutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Paso 8:instalar y configurar Nginx

Debian se envía con una versión anterior de Nginx. Debe descargar el repositorio oficial de Nginx para instalar la última versión.

Importe la clave de firma oficial de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
	 | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Agregue el repositorio para la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
    http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Actualice los repositorios de Debian.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifique la instalación. Asegúrate de usar sudo cada vez que ejecuta el comando Nginx en Debian. De lo contrario, no funcionará.

$ sudo nginx -v
nginx version: nginx/1.20.2

Cree y abra el archivo /etc/nginx/conf.d/discourse.conf para editar.

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

Pegue el siguiente código en él.

# enforce HTTPS
server {
    listen       80; 
    listen 	[::]:80;
    server_name  discourse.example.com;
    return 301   https://$host$request_uri;
}
server {
    listen       443 ssl http2;
    listen 	[::]:443 ssl http2;
    server_name  discourse.example.com;

    access_log  /var/log/nginx/discourse.access.log;
    error_log   /var/log/nginx/discourse.error.log;
    
    # SSL
    ssl_certificate      /etc/letsencrypt/live/discourse.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/discourse.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/discourse.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;
    
    client_max_body_size 100m;
    
    location / {
        proxy_pass http://discourse.example.com:8080/;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }    
}

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite una vez terminado.

Abra el archivo /etc/nginx/nginx.conf para editar.

$ sudo nano /etc/nginx/nginx.conf

Agregue la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf; .

server_names_hash_bucket_size  64;

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Verifique la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Inicie el servicio Nginx para habilitar la nueva configuración.

$ sudo systemctl start nginx

Paso 9 - Comandos de discurso

Activar Discourse Administrator desde la línea de comandos

Si no recibe el correo electrónico de activación, puede activar la cuenta de administrador desde la línea de comandos.

Cambia al directorio Discourse.

$ cd /var/discourse

Ingrese al contenedor de discurso Shell.

$ sudo ./launcher enter app

Introduce el comando rails c para acceder al símbolo del sistema de Rails.

[email protected]:/var/www/discourse# rails c

Verá el siguiente mensaje.

[1] pry(main)> 

Introduzca el comando para localizar la cuenta de administrador.

[1] pry(main)>  User.find_by_email("[email protected]")
=> #<User:0x00005564492032a0
 id: 1,
 username: "username",
 created_at: Sun, 06 Feb 2022 14:46:58.451302000 UTC +00:00,
 updated_at: Sun, 06 Feb 2022 14:54:17.079564000 UTC +00:00,
 name: nil,
 seen_notification_id: 4,
 last_posted_at: nil,
 password_hash: "[FILTERED]",
 salt: "20d6012d3c98da70896dcfc27bc9d264",
 active: true,
 username_lower: "username",
 last_seen_at: Mon, 07 Feb 2022 08:34:12.435844000 UTC +00:00,
 admin: true,
 last_emailed_at: Sun, 06 Feb 2022 14:47:00.694121000 UTC +00:00,
 trust_level: 1,
 approved: false,
 approved_by_id: nil,
 approved_at: nil,
 previous_visit_at: Sun, 06 Feb 2022 15:40:35.804941000 UTC +00:00,
 suspended_at: nil,
 suspended_till: nil,
 date_of_birth: nil,
 views: 0,
 flag_level: 0,
 ip_address: #<IPAddr: IPv4:69.28.90.35/255.255.255.255>,
 moderator: false,
 title: nil,
 uploaded_avatar_id: 3,
:

Introduce q para volver al indicador e ingresar los siguientes comandos en secuencia.

[2] pry(main)> user.approved = true
[3] pry(main)> user.save
[4] pry(main)> EmailToken.confirm(user.email_tokens.first.token)

Escribe exit dos veces para volver a la concha. Su cuenta de administrador está activada y lista para usar.

Actualizar Discurso

Para actualizar el foro, puede usar una de dos formas. La primera forma es actualizarlo a través del panel del administrador. El segundo método es usar una línea de comando.

Cambia al directorio Discourse.

$ cd /var/discourse

Actualice la instalación de Discourse tomando los archivos más recientes de Github.

$ git pull

Reconstruir el discurso.

$ sudo ./launcher rebuild app

Debe reconstruir Discourse cada vez que realice cambios en app.yml expediente. Después de realizar los cambios, ejecute el comando anterior. Destruye el contenedor anterior, inicia uno nuevo y lo inicia.

Detener Discurso

$ sudo ./launcher stop

Ver registros de discurso

$ sudo ./launcher logs

Conclusión

Esto concluye el tutorial. Ha instalado el foro de Discourse usando Docker detrás del servidor web Nginx en un servidor Debian 11. Si tiene alguna pregunta, publíquela en los comentarios a continuación.


Debian
  1. Instale Lets Encrypt and Secure Nginx con SSL/TLS en Debian 9

  2. Instale Automad CMS con Nginx y Lets Encrypt SSL en Debian 10

  3. Cómo instalar ElkArte Forum con Apache y Lets Encrypt en Debian 10

  4. Cómo instalar OpenCart con Nginx y Lets Encrypt en Debian 10

  5. Cómo instalar Drupal 9 con Nginx y Lets Encrypt SSL en Debian 10

Cómo instalar MyBB Forum con Nginx y Lets Encrypt en Debian 10

Cómo instalar Wekan Kanban con Nginx y Lets Encrypt SSL en Debian 10

Cómo instalar Drupal con Nginx y Let's Encrypt SSL en Debian 11

Cómo instalar Joomla con Nginx y Let's Encrypt SSL en Debian 11

Cómo instalar WordPress con Nginx y Let's Encrypt SSL en Debian 11

Cómo instalar Discourse Forum en Debian 10 con Nginx y Let's Encrypt