Cómo instalar Discourse Forum con Nginx en Rocky Linux 9
Discourse es una plataforma de debate comunitario de código abierto construida utilizando el lenguaje Ruby. Está diseñada para funcionar como foro, software de chat o lista de correo. Se integra fácilmente con otras plataformas y puede ampliarse mediante plugins.
En este tutorial, aprenderás a instalar Discourse Forum con el servidor Nginx en un servidor que ejecuta Rocky Linux 9.
Requisitos previos
- Un servidor que ejecute Rocky Linux 9 con un mínimo de 1 GB de RAM y 1 CPU Core. La instalación de Discourse creará automáticamente una partición swap en sistemas con 1GB 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
) que apunte al servidor. - Todo actualizado.
$ sudo dnf update
- Pocos paquetes que necesite tu sistema.
$ sudo dnf install wget curl nano unzip yum-utils -y
Puede que algunos de estos paquetes ya estén instalados en tu sistema.
Paso 1 – Configurar el cortafuegos
El primer paso es configurar el cortafuegos. Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.
$ sudo firewall-cmd --state running
El cortafuegos funciona con diferentes zonas, y la zona pública es la que utilizaremos por defecto. Enumera todos los servicios y puertos activos en el cortafuegos.
$ sudo firewall-cmd --permanent --list-services
Debería mostrar la siguiente salida.
cockpit dhcpv6-client ssh
Discurso necesita los puertos HTTP y HTTPS para funcionar. Ábrelos.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
Añade enmascaramiento, ya que la aplicación contactará con otras instancias.
$ sudo firewall-cmd --permanent --add-masquerade
Recarga el cortafuegos para aplicar los cambios.
$ sudo firewall-cmd --reload
Vuelve a listar todos los servicios.
$ sudo firewall-cmd --permanent --list-services
Deberías obtener el siguiente resultado.
cockpit dhcpv6-client http https ssh
Configurar SELinux
Discourse no será accesible aunque abras los puertos debido a la política de acceso de SELinux. Configura SELinux para permitir las conexiones de red.
$ sudo setsebool -P httpd_can_network_connect 1
Paso 2 – Instalar Git
Instala Git.
$ sudo dnf install git
Confirma la instalación.
$ git --version git version 2.31.1
Ejecuta 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 – Instala Docker
Rocky Linux viene con una versión antigua de Docker. Para instalar la última versión, instala primero el repositorio oficial de Docker.
$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
Instala la última versión de Docker.
$ sudo dnf install docker-ce docker-ce-cli containerd.io
Es posible que obtengas el siguiente error al intentar instalar Docker.
ror: Problem: problem with installed package buildah-1:1.26.2-1.el9_0.x86_64 - package buildah-1:1.26.2-1.el9_0.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed - package containerd.io-1.6.9-3.1.el9.x86_64 conflicts with runc provided by runc-4:1.1.3-2.el9_0.x86_64 - package containerd.io-1.6.9-3.1.el9.x86_64 obsoletes runc provided by runc-4:1.1.3-2.el9_0.x86_64 - cannot install the best candidate for the job
Utiliza el siguiente comando si te aparece el error anterior.
$ sudo dnf install docker-ce docker-ce-cli containerd.io --allowerasing
Habilita y ejecuta el demonio Docker.
$ sudo systemctl enable docker --now
Comprueba que se está ejecutando.
? docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2023-01-20 06:49:44 UTC; 6s ago TriggeredBy: ? docker.socket Docs: https://docs.docker.com Main PID: 99263 (dockerd) Tasks: 8 Memory: 28.1M CPU: 210ms CGroup: /system.slice/docker.service ??99263 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Por defecto, Docker requiere privilegios de root. Si quieres evitar utilizar sudo
cada vez que ejecutes el comando docker
, añade tu nombre de usuario al grupo docker
.
$ sudo usermod -aG docker $(whoami)
Tendrás que salir del servidor y volver a entrar como el mismo usuario para activar este cambio o utilizar el siguiente comando.
$ su - ${USER}
Confirma que tu usuario se ha añadido al grupo Docker.
$ groups navjot wheel docker
Paso 4 – Descarga Discourse
Clona el repositorio oficial de GitHub de Discourse Docker en el directorio /var/discourse
.
$ sudo git clone https://github.com/discourse/discourse_docker.git /var/discourse
Cambia al directorio de Discourse.
$ cd /var/discourse
Elimina los permisos de escritura y ejecución del directorio containers
.
$ sudo chmod 700 containers
Paso 5 – Configura Discourse
Crea el archivo de configuración app.yml
copiando el archivo de ejemplo standalone.yml
.
$ sudo cp samples/standalone.yml containers/app.yml
Abre app.yml
para editarlo.
$ sudo nano containers/app.yml
Establece el dominio
Establece la variable DISCOURSE_HOSTNAME
con el nombre de dominio que hayas elegido para tu foro. Si no tienes un nombre de dominio, puedes utilizar aquí una dirección IP.
DISCOURSE_HOSTNAME: 'discourse.example.com'
Configurar puertos expuestos
Cambia la línea "80:80
por "8080:80"
. Esto cambiará el puerto HTTP externo para Discourse a 8080 ya que utilizaremos Nginx en el puerto 80. Comenta la línea "443:443"
ya que instalaremos SSL externamente.
expose: - "8080:80" # http #- "443:443" # https
Configura el correo electrónico para el administrador
Configura el correo electrónico para tu cuenta de administrador y para el desarrollador utilizando la variable DISCOURSE_DEVELOPER_EMAILS
. Este paso es obligatorio, de lo contrario, tu foro no arrancará.
DISCOURSE_DEVELOPER_EMAILS: '[email protected],[email protected]'
Configurar los ajustes SMTP
Rellena las siguientes variables dependiendo del servicio de correo electrónico transaccional que estés utilizando.
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 la memoria (opcional)
Si tu servidor tiene poca RAM, puedes configurar las siguientes variables en consecuencia para reducir el consumo de memoria de Discourse.
db_shared_buffers: '128MB' UNICORN_WORKERS: 2
La variable db_shared_buffers
se suele configurar al 25% de la memoria disponible.
Configuración de GeoLite2 (Opcional)
Si quieres la función de búsqueda de IP en Discurso, regístrate en la cuenta gratuita Maxmind Geolite2 y obtén una clave de licencia. Pega esa clave de licencia como valor de la siguiente variable.
DISCOURSE_MAXMIND_LICENSE_KEY: your_maxmind_license_key
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Paso 6 – Instalar Discourse
Ejecuta el siguiente comando para arrancar tu contenedor de Discourse.
$ sudo ./launcher bootstrap app
Inicia la aplicación Discourse.
$ sudo ./launcher start app
Abre el puerto para probar la aplicación Discourse.
$ sudo firewall-cmd --permanent --add-port=8080/tcp
Ahora puedes acceder al foro visitando las URL http://yourserver_IP:8080
o http://discourse.example.com:8080
en tu navegador. Obtendrás la siguiente pantalla.
Paso 7 – Instalar Nginx
Rocky Linux 9 viene con una versión antigua de Nginx. Necesitas descargar el repositorio oficial de Nginx para instalar la última versión.
Crea y abre el archivo /etc/yum.repos.d/nginx.repo
para crear el repositorio oficial de Nginx.
$ sudo nano /etc/yum.repos.d/nginx.repo
Pega en él el siguiente código.
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Instala el servidor Nginx.
$ sudo dnf install nginx
Verifica la instalación.
$ nginx -v nginx version: nginx/1.22.1
Habilita e inicia el servidor Nginx.
$ sudo systemctl enable nginx --now
Comprueba el estado del servidor.
$ sudo systemctl status nginx ? nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2023-01-20 07:49:55 UTC; 1s ago Docs: http://nginx.org/en/docs/ Process: 230797 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 230798 (nginx) Tasks: 3 (limit: 12355) Memory: 2.8M CPU: 13ms CGroup: /system.slice/nginx.service ??230798 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??230799 "nginx: worker process" ??230800 "nginx: worker process"
Paso 8 – Instalar SSL
Para instalar un certificado SSL utilizando Let’s Encrypt, necesitamos instalar la herramienta Certbot.
Para ello utilizaremos el instalador de paquetes Snapd. Como Rocky Linux no lo incluye, instala el instalador Snapd. Necesita el repositorio EPEL para funcionar.
$ sudo dnf install epel-release
Instala Snapd.
$ sudo dnf install snapd
Activa e inicia el servicio Snap.
$ sudo systemctl enable snapd --now
Instala el paquete principal de Snap, y asegúrate de que tu versión de Snapd está actualizada.
$ sudo snap install core && sudo snap refresh core
Crea los enlaces necesarios para que Snapd funcione.
$ sudo ln -s /var/lib/snapd/snap /snap $ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Ejecuta el siguiente comando para instalar Certbot.
$ sudo snap install --classic certbot
Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin
.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Verifica la instalación.
$ certbot --version certbot 1.32.2
Genera el certificado SSL.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d discourse.example.com
El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/discourse.example.com
de tu servidor.
Genera un certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Para comprobar si la renovación SSL funciona correctamente, realiza una ejecución en seco del proceso.
$ sudo certbot renew --dry-run
Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.
Paso 9 – Configurar Nginx
Crea y abre el archivo /etc/nginx/conf.d/discourse.conf
para editarlo.
$ sudo nano /etc/nginx/conf.d/discourse.conf
Pega en él el siguiente código.
# enforce HTTPS server { listen 80; listen [::]:80; server_name discourse.example.com; location / { 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:SSL: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; http2_push_preload on; # Enable HTTP/2 Server Push # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to # prevent replay attacks. # # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data ssl_early_data on; # Security / XSS Mitigation Headers # NOTE: X-Frame-Options may cause issues with the webOS app add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; add_header X-Early-Data $tls1_3_early_data; 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; } } # This block is useful for debugging TLS v1.3. Please feel free to remove this # and use the `$ssl_early_data` variable exposed by NGINX directly should you # wish to do so. map $ssl_early_data $tls1_3_early_data { "~." $ssl_early_data; default ""; }
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida una vez hayas terminado.
Abre el archivo /etc/nginx/nginx.conf
para editarlo.
$ sudo nano /etc/nginx/nginx.conf
Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Verifica 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
Reinicia el servicio Nginx para habilitar la nueva configuración.
$ sudo systemctl restart nginx
Paso 10 – Acceder y finalizar la instalación de Discourse
Puedes acceder al foro visitando la URL https://discourse.example.com
en tu navegador. Aparecerá la siguiente pantalla.
Haz clic en el botón Registrar para continuar. El identificador de correo electrónico establecido en el archivo app.yml
se rellenará previamente para ti.
Haz clic en el botón Registrar para registrar la cuenta de administrador. Pasarás a la pantalla de confirmación del correo electrónico.
Si tu configuración SMTP es correcta, recibirás un correo para activar la cuenta. Haz clic en el enlace de tu correo electrónico para terminar de configurar la cuenta.
Haz clic en el botón Activar para finalizar la instalación.
Llegarás a la pantalla del Asistente de Configuración de Discourse. Rellena el nombre y la descripción de tu foro y elige el idioma. Haz clic en el botón Siguiente para continuar.
A continuación, accederás a la página de Experiencia de usuario. Elige las opciones según tus necesidades y haz clic en el botón Siguiente para continuar.
A continuación, pasarás a la página de finalización de la configuración. Puedes elegir configurar más o simplemente Entrar y empezar a utilizar el foro. Estos ajustes pueden seguir configurándose mediante los ajustes del administrador.
Elegiremos Configurar más para nuestro tutorial. Se te llevará a la página y se te pedirá que configures logotipos y banner para tu foro. Haz clic en el botón Siguiente para continuar.
A continuación, se te pedirá que configures las opciones básicas de estilo para la interfaz del foro. Haz clic en el botón Siguiente para continuar.
A continuación, se te llevará a la página de configuración de la Organización. Rellena la información apropiada.
Haz clic en el botón ¡Adelante! para continuar. Accederás a la página de inicio del foro. Tu foro de Discourse está listo para ser utilizado.
Paso 11 – Comandos de Discourse
Activar Discourse Administrator desde la línea de comandos
Si no recibes el correo electrónico de activación, puedes activar la cuenta de administrador desde la línea de comandos.
Cambia al directorio de Discourse.
$ cd /var/discourse
Entra en el shell contenedor de Discurso.
$ sudo ./launcher enter app
Introduce el comando rails c
para acceder a la línea de comandos de Rails.
root@discourse-app:/var/www/discourse# rails c
Verás el siguiente mensaje.
[1] pry(main)>
Introduce el comando para localizar la cuenta de administrador.
[1] pry(main)> User.find_by_email("[email protected]") => #<User:0x00007fdf020229f0 id: 1, username: "username", created_at: Fri, 20 Jan 2023 08:14:36.735552000 UTC +00:00, updated_at: Fri, 20 Jan 2023 14:14:12.094234000 UTC +00:00, name: nil, seen_notification_id: 4, last_posted_at: nil, password_hash: "98c774785bda45b4edbaea90eeb3bd5da00f65487ba6d0b3930082ce098bf174", salt: "ca175ea7f5653ce8122b76b68b549936", active: true, username_lower: "username", last_seen_at: Fri, 20 Jan 2023 23:01:21.001705000 UTC +00:00, admin: true, last_emailed_at: Fri, 20 Jan 2023 09:48:47.896200000 UTC +00:00, trust_level: 1, approved: false, approved_by_id: nil, approved_at: nil, previous_visit_at: Fri, 20 Jan 2023 21:28:23.665502000 UTC +00:00, suspended_at: nil, suspended_till: nil, date_of_birth: nil, views: 0, flag_level: 0, ip_address: #<IPAddr: IPv4:122.161.92.70/255.255.255.255>, moderator: false, title: nil, uploaded_avatar_id: nil, :
Introduce q
para volver al prompt e introduce 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 al intérprete de comandos. Tu cuenta de administrador está activada y lista para ser utilizada.
Copia de seguridad de Discurso
Por defecto, Discourse realiza copias de seguridad de la base de datos cada 7 días. Puedes encontrar los archivos de copia de seguridad en el directorio `/var/discourse/shared/standalone/backups/default
.
$ ls /var/discourse/shared/standalone/backups/default -al total 1480 drwxr-xr-x. 2 navjot tape 4096 Jan 21 03:34 . drwxr-xr-x. 3 navjot tape 4096 Jan 20 12:01 .. -rw-r--r--. 1 navjot tape 1503748 Jan 21 03:34 howtoforge-forums-2023-01-21-033439-v20230119094939.tar.gz
Puedes configurar las copias de seguridad visitando la sección Admin >> Configuración >> Copias de seguridad. Discourse te da la opción de almacenar las copias de seguridad localmente o en un almacenamiento en la nube al estilo de Amazon S3.
Puedes descargar las copias de seguridad desde la página Admin >> Copias de seguridad. La restauración está desactivada por defecto. Si quieres restaurar la base de datos, tienes que activar la opción de permitir restauración desde la sección Admin >> Configuración >> Copias de seguridad.
Actualizar Discourse
Para actualizar el foro, puedes utilizar una de estas dos formas. La primera es actualizarlo a través del panel de control del administrador. El segundo método es utilizar una línea de comandos.
Cambia al directorio de Discourse.
$ cd /var/discourse
Actualiza la instalación de Discourse tomando los últimos archivos de GitHub.
$ git pull
Reconstruye Discourse.
$ sudo ./launcher rebuild app
Debes reconstruir Discourse cada vez que realices algún cambio en el archivo app.yml
. Tras realizar los cambios, ejecuta el comando anterior. Destruye el contenedor antiguo, arranca uno nuevo e inícialo.
Detener Discurso
$ sudo ./launcher stop app
Ver los registros de Discourse
$ sudo ./launcher logs app
También puedes ver los laboratorios detallados visitando la URL https://discourse.example.com/logs/
en tu navegador. Obtendrás una pantalla similar.
Registros de Rails / Unicornio
Ruby on Rails contiene un registro muy verboso que se escribe en el disco. Además, el servidor web unicornio también registra en disco. Puedes verlos en el directorio var/discourse/shared/standalone/log/rails
.
$ ls /var/discourse/shared/standalone/log/rails -al total 552 drwxr-xr-x. 2 navjot tape 4096 Jan 20 07:09 . drwxr-xr-x. 4 root root 4096 Jan 20 07:09 .. -rw-r--r--. 1 navjot tape 0 Jan 20 07:09 production_errors.log -rw-r--r--. 1 navjot tape 361031 Jan 21 11:46 production.log -rw-r--r--. 1 navjot tape 0 Jan 20 07:09 sidekiq.log -rw-r--r--. 1 navjot tape 60919 Jan 20 08:42 unicorn.stderr.log -rw-r--r--. 1 navjot tape 119403 Jan 21 03:34 unicorn.stdout.log
Registros Nginx
Discourse ejecuta un servidor Nginx dentro de un contenedor docker. Puedes ver los registros en la siguiente ubicación.
$ ls /var/discourse/shared/standalone/log/var-log/nginx -al total 1852 drwxr-xr-x. 2 33 tape 4096 Jan 20 07:39 . drwxrwxr-x. 5 root adm 4096 Jan 21 08:04 .. -rw-r--r--. 1 33 tape 1878744 Jan 21 12:18 access.log -rw-r--r--. 1 33 tape 1017 Jan 20 07:45 error.log
Registros Redis
Puedes obtener los registros del servidor de base de datos Redis en la siguiente ubicación. Las entradas de registro más recientes estarán en el archivo current
.
$ ls /var/discourse/shared/standalone/log/var-log/redis -al total 140 drwxr-xr-x. 2 root root 4096 Jan 20 07:39 . drwxrwxr-x. 5 root adm 4096 Jan 21 08:04 .. -rw-r--r--. 1 root root 127002 Jan 21 12:17 current -rw-------. 1 root root 0 Jan 20 07:39 lock
Registros PostgreSQL
Puedes ver los registros de la base de datos PostgreSQL en la siguiente ubicación.
ls /var/discourse/shared/standalone/log/var-log/postgres -al total 20 drwxr-xr-x. 2 root root 4096 Jan 20 07:39 . drwxrwxr-x. 5 root adm 4096 Jan 21 08:04 .. -rw-r--r--. 1 root root 11400 Jan 21 03:34 current -rw-------. 1 root root 0 Jan 20 07:39 lock
Las entradas más recientes se encuentran en el archivo current
de ese directorio.
Las restantes se encuentran en el propio /var/discourse/shared/standalone/log/var-log
.
ls /var/discourse/shared/standalone/log/var-log -al total 100 drwxrwxr-x. 5 root adm 4096 Jan 21 08:04 . drwxr-xr-x. 4 root root 4096 Jan 20 07:09 .. -rw-r--r--. 1 root adm 40943 Jan 21 12:17 auth.log -rw-r--r--. 1 root adm 0 Jan 20 08:41 kern.log -rw-r-----. 1 root adm 750 Jan 21 08:04 messages drwxr-xr-x. 2 33 tape 4096 Jan 20 07:39 nginx drwxr-xr-x. 2 root root 4096 Jan 20 07:39 postgres drwxr-xr-x. 2 root root 4096 Jan 20 07:39 redis -rw-r--r--. 1 root adm 23041 Jan 21 12:17 syslog -rw-r-----. 1 root adm 70 Jan 21 08:04 user.log
Conclusión
Con esto concluye el tutorial. Has instalado el foro Discourse utilizando Docker detrás del servidor web proxy Nginx en un servidor Rocky Linux 9. Si tienes alguna pregunta, publícala en los comentarios a continuación.