Este método de instalación no está oficialmente respaldado. Úselo bajo su propio riesgo.
El equipo de Discourse solo recomienda la instalación utilizando la guía de instalación oficial
Esta es una instalación no compatible, adecuada para aquellos que tienen experiencia con CloudPanel, son administradores de sistemas experimentados y se sienten cómodos con Docker, proxies inversos, y han completado con éxito una instalación estándar.
¿Por qué CloudPanel?
¿Por qué podría querer instalar un foro de Discourse en un VPS o servidor dedicado que ejecute CloudPanel?
Estas son mis razones:
Prefiero utilizar una interfaz gráfica para la administración del servidor y del sitio. He utilizado la mayoría de los paneles de control de alojamiento web en algún momento.
En comparación con el resto, CloudPanel es muy delgado y minimalista y sin desorden. Tiene todas las funciones que necesito, presentadas de manera muy simple e intuitiva. Y eso es todo. No tiene nada que no necesite.
Desarrollo, alojo y gestiono muchos blogs de Ghost, sitios de Wordpress, sitios de Drupal y otros tipos de sitios, además de foros de Discourse. Realmente solo necesito un servidor donde pueda alojar mis foros de Discourse junto con mis blogs de Ghost y mis sitios de Wordpress y Drupal. (No quiero pagar y mantener un servidor separado para cada instancia de Discourse.)
CloudPanel incluye (directamente desde el inicio) Nginx integrado y una interfaz sencilla para configurar y gestionar Proxies Inversos, que son necesarios para ejecutar una o más instancias de Discourse en el mismo servidor o junto con otros tipos de sitios web.
El equipo de Discourse (y el personal del foro Meta aquí) no proporciona soporte para entornos de servidor alternativos como Cpanel, Plesk o (como en este caso) CloudPanel, u otros que surjan desde la línea de comandos.
Así que pensé en compartir mi configuración y mi proceso por si hay otros que puedan encontrarlo útil.
[Si alguien prueba este método, por favor hágame saber si y cómo le funciona, o si puedo mejorar este tutorial!
]
Instalar Docker
En Putty (u otra terminal), desde el directorio raíz, ejecute:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io
Crear un sitio de Proxy Inverso en CloudPanel
→ Hacemos clic en el botón + Add Site…
Para mi instancia de Discourse estoy usando mi nombre de dominio noobish.me, así que a partir de ahora, donde vea eso en el resto de estas instrucciones, reemplace noobish.me con su nombre de dominio real (por ejemplo, yoursite.com)
→ Creamos un nuevo “sitio de Proxy Inverso” en CloudPanel para el dominio donde queremos alojar nuestro foro de Discourse (por supuesto, el registro A del DNS del dominio debe apuntar a la misma dirección IP que nuestro CloudPanel).
Preparar el dominio y configurar SSL
Para mi sitio estoy usando los servidores de nombres de Cloudflare para apuntar el dominio. En Cloudflare configuré el SSL como Full o Full (estricto).
También creo una regla de página de Cloudflare. Visite este post para saber por qué.
También estoy usando un certificado de origen SSL gratuito de Cloudflare para mi dominio, que “importo” en CloudPanel dentro de la configuración del sitio “SSL/TLS” para ese sitio (simplemente pegando tanto el Certificado como la Clave Privada que había descargado para ese nombre de dominio desde mi cuenta de Cloudflare).
Instalar Discourse
De vuelta en Putty (u otra terminal), desde el directorio raíz (c d Enter para volver a la raíz) → Instale la instalación estándar de Discourse usando estos comandos…
git clone https://github.com/discourse/discourse_docker.git /var/discourse
Enter
cd /var/discourse
Enter
chmod 700 containers
Copiar la configuración independiente
Ahora copiamos el archivo /var/discourse/standalone.yml a /var/discourse/containers/ como app.yml antes de editarlo según la configuración de nuestro sitio.
cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml
Editar el archivo app.yml
Además de modificar el archivo app.yml según la configuración específica de nuestro sitio, necesitamos cambiar 3 cosas más en ese archivo antes de guardarlo…
Bajo la sección templates: necesitamos agregar:
- "templates/web.socketed.template.yml"
Como estoy usando Cloudflare, bajo la sección templates: también agrego:
- "templates/cloudflare.template.yml"
Bajo la sección expose: necesitamos comentar:
#- "80:80" # http
#- "443:443" # https
Bajo la sección env: necesitamos agregar:
DISCOURSE_FORCE_HTTPS: true
Para referencia, puede hacer clic aquí para ver el contenido de mi app.yml en funcionamiento en noobish.me donde estoy usando tanto Cloudflare como Mailgun...
## este es la plantilla de contenedor Docker Discourse todo en uno, independiente ## ## Después de realizar cambios en este archivo, DEBE reconstruir ## /var/discourse/launcher rebuild app ## ## TENGA *MUCHO* CUIDADO AL EDITAR! ## LOS ARCHIVOS YAML SON SUPER SUPER SENSIBLES A ERRORES EN ESPACIOS EN BLANCO O ALINEACIÓN! ## visite http://www.yamllint.com/ para validar este archivo según sea necesario templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" - "templates/web.ratelimited.template.yml" - "templates/web.socketed.template.yml" - "templates/cloudflare.template.yml" params: db_default_text_search_config: "pg_catalog.english" ## Establezca db_shared_buffers en un máximo del 25% de la memoria total. ## se establecerá automáticamente por bootstrap según la RAM detectada, o puede anularlo db_shared_buffers: "4096MB" ## puede mejorar el rendimiento de clasificación, pero agrega uso de memoria por conexión #db_work_mem: "40MB" ## ¿Qué revisión de Git debe usar este contenedor? (por defecto: tests-passed) #version: tests-passed env: LC_ALL: en_US.UTF-8 LANG: en_US.UTF-8 LANGUAGE: en_US.UTF-8 # DISCOURSE_DEFAULT_LOCALE: en DISCOURSE_FORCE_HTTPS: true ## ¿Cuántas solicitudes web simultáneas se admiten? Depende de la memoria y los núcleos de CPU. ## se establecerá automáticamente por bootstrap según los CPUs detectados, o puede anularlo UNICORN_WORKERS: 8 ## TODO: El nombre de dominio al que responderá esta instancia de Discourse ## Requerido. Discourse no funcionará con un número de IP desnudo. DISCOURSE_HOSTNAME: 'noobish.me' ## Descomente si desea que el contenedor se inicie con el mismo ## nombre de host (opción -h) que se especificó anteriormente (por defecto "$hostname-$config") #DOCKER_USE_HOSTNAME: true ## TODO: Lista de correos electrónicos delimitados por comas que serán administradores y desarrolladores ## en el ejemplo de registro inicial 'user1@example.com,user2@example.com' DISCOURSE_DEVELOPER_EMAILS: 'admin@noobish.me' ## TODO: El servidor de correo SMTP utilizado para validar nuevas cuentas y enviar notificaciones # DIRECCIÓN SMTP, nombre de usuario y contraseña son obligatorios # ADVERTENCIA: el carácter '#' en la contraseña SMTP puede causar problemas! DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org DISCOURSE_SMTP_PORT: 587 DISCOURSE_SMTP_USER_NAME: postmaster@noobish.me DISCOURSE_SMTP_PASSWORD: pYdRLyQW #DISCOURSE_SMTP_ENABLE_START_TLS: true # (opcional, por defecto true) #DISCOURSE_SMTP_DOMAIN: noobish.me # (requerido por algunos proveedores) DISCOURSE_NOTIFICATION_EMAIL: noreply@noobish.me # (dirección desde la cual enviar notificaciones) ## La dirección CDN http o https para esta instancia de Discourse (configurada para extraer) ## consulte https://meta.discourse.org/t/14857 para detalles #DISCOURSE_CDN_URL: https://discourse-cdn.example.com ## La clave de dirección IP de geolocalización de Maxmind para la búsqueda de direcciones IP ## consulte https://meta.discourse.org/t/-/137387/23 para detalles #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456 ## El contenedor Docker no tiene estado; todos los datos se almacenan en /shared volumes: - volume: host: /var/discourse/shared/standalone guest: /shared - volume: host: /var/discourse/shared/standalone/log/var-log guest: /var/log ## Los plugins van aquí ## consulte https://meta.discourse.org/t/19157 para detalles hooks: after_code: - exec: cd: $home/plugins cmd: - git clone https://github.com/discourse/docker_manager.git ## Cualquier comando personalizado para ejecutar después de la construcción run: - exec: echo "Comienzo de comandos personalizados" ## Si desea establecer la dirección de correo electrónico 'De' para su primer registro, descomente y cambie: ## Después de obtener el primer correo electrónico de registro, vuelva a comentar la línea. Solo necesita ejecutarse una vez. #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'" - exec: echo "Fin de comandos personalizados"
Luego guardamos y salimos del archivo app.yml…
CTRL-X
y
Enter
A continuación, establecemos los permisos para el archivo app.yml…
chmod o-rwx containers/app.yml
luego…
Arrancar la aplicación
cd /var/discourse
./launcher bootstrap app
Esto tomará una cantidad considerable de tiempo. Al final del proceso de arranque, se le pedirá que:
./launcher start app
Editar el archivo Vhost
Ahora volvemos a CloudPanel y pegamos el siguiente código en el “Editor Vhost” para nuestro sitio de Discourse (sobrescribiendo lo que ya está allí). Por supuesto, reemplace yoursite.com con su nombre de dominio real.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
{{ssl_certificate_key}}
{{ssl_certificate}}
server_name yoursite.com;
{{root}}
{{nginx_access_log}}
{{nginx_error_log}}
if ($scheme != "https") {
rewrite ^ https://$host$uri permanent;
}
location ~ /.well-known {
auth_basic off;
allow all;
}
{{settings}}
add_header Cache-Control no-transform;
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
}
Reiniciar Nginx
A continuación, necesitamos reiniciar Nginx, lo cual podemos hacer haciendo clic en un botón en el Área de Administración de CloudPanel…
¡Felicidades!
Ahora, en nuestro navegador, podemos ir a la URL de nuestro sitio y ejecutar el Asistente de Configuración de Discourse…
Coexistir pacíficamente
Ahora puedo autoalojar y gestionar mi sitio de Discourse junto con mis sitios de Ghost, Wordpress, Drupal y otros tipos de sitios utilizando un panel de gestión limpio y ligero, con una necesidad mínima de usar la terminal/línea de comandos en el futuro.
Para instalar instancias adicionales de Discourse…








