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.