He pasado los últimos días intentando encontrar una forma de integrar Discourse con Apache en el mismo droplet de DigitalOcean, pero los tutoriales disponibles aquí en Discourse están desactualizados o no se aplican a mi caso. Un tutorial utiliza CentOS y HAProxy (yo uso Ubuntu) y el otro utiliza Nginx (yo uso Apache).
Me encontré con un comentario en un hilo de DigitalOcean y seguí las instrucciones allí en un droplet de prueba: Install Discourse on a droplet with WordPress served by Apache ? | DigitalOcean
Todo parece haber ido sin problemas, incluido el SSL de Let’s Encrypt. Mi página de inicio y algunos documentos HTML estáticos funcionan perfectamente. Discourse, a pesar de instalarse sin errores, no se muestra. Al navegar a community.mysite.com, solo veo mi página de inicio con HTTPS no seguro en la URL. Sí, mis configuraciones de DNS son precisas y apuntan al servidor correcto.
Este es mi archivo mysite.com.conf:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /var/www/mysite.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.mysite.com [OR]
RewriteCond %{SERVER_NAME} =mysite.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Este es mi archivo mysite.com-le-ssl.conf:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /var/www/mysite.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/mysite.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem
</VirtualHost>
</IfModule>
Este es mi archivo community.mysite.com.conf:
<VirtualHost *:80>
ServerName community.mysite.com
ServerAlias www.community.mysite.com
<IfModule proxy_module>
ProxyPreserveHost on
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</IfModule>
</VirtualHost>
Y finalmente, aquí está mi archivo app.yml (editado, por supuesto):
## este es la plantilla de contenedor Docker todo en uno, independiente de Discourse
##
## Después de realizar cambios en este archivo, DEBES reconstruir
## /var/discourse/launcher rebuild app
##
## ¡TEN MUCHO CUIDADO AL EDITAR!
## ¡LOS ARCHIVOS YAML SON SUPER SENSIBLES A ERRORES EN ESPACIOS EN BLANCO O ALINEACIÓN!
## visita 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"
## Descomenta estas dos líneas si deseas agregar Let's Encrypt (https)
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
## ¿Qué puertos TCP/IP debe exponer este contenedor?
## Si deseas que Discourse comparta un puerto con otro servidor web como Apache o Nginx,
## consulta https://meta.discourse.org/t/17247 para más detalles
expose:
- "8080:80" # reenvía el puerto 8080 del host al puerto 80 del contenedor (http)
- "8443:443" # reenvía el puerto 8443 del host al puerto 443 del contenedor (https)
params:
db_default_text_search_config: "pg_catalog.english"
## Establece 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 puedes sobrescribirlo
db_shared_buffers: "128MB"
## puede mejorar el rendimiento de clasificación, pero añade uso de memoria por conexión
#db_work_mem: "40MB"
## ¿Qué revisión de Git debe usar este contenedor? (predeterminado: tests-passed)
#version: tests-passed
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## ¿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 puedes sobrescribirlo
UNICORN_WORKERS: 2
## TODO: El nombre de dominio al que responderá esta instancia de Discourse
## Obligatorio. Discourse no funcionará con una dirección IP desnuda.
DISCOURSE_HOSTNAME: community.mysite.com
## Descomenta si deseas que el contenedor se inicie con el mismo
## nombre de host (opción -h) que se especificó anteriormente (predeterminado "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Lista de correos electrónicos separados por comas que serán administradores y desarrolladores
## en el registro inicial, ejemplo 'usuario1@ejemplo.com,usuario2@ejemplo.com'
DISCOURSE_DEVELOPER_EMAILS: 'miemail'
## TODO: El servidor de correo SMTP utilizado para validar nuevas cuentas y enviar notificaciones
## Se requieren dirección, nombre de usuario y contraseña de SMTP
## ADVERTENCIA: el carácter '#' en la contraseña de SMTP puede causar problemas
DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: mi-nombre-de-usuario-smtp
DISCOURSE_SMTP_PASSWORD: "mi-contraseña-smtp"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (opcional, predeterminado true)
## Si agregaste la plantilla de Let's Encrypt, descomenta abajo para obtener un certificado SSL gratuito
LETSENCRYPT_ACCOUNT_EMAIL: miemail
## La dirección http o https de CDN para esta instancia de Discourse (configurada para extraer)
## consulta https://meta.discourse.org/t/14857 para más detalles
#DISCOURSE_CDN_URL: https://discourse-cdn.ejemplo.com
## 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í
## consulta https://meta.discourse.org/t/19157 para más 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 "Inicio de comandos personalizados"
## Si deseas establecer la dirección de correo electrónico 'De' para tu primer registro, descomenta y cambia:
## Después de recibir el primer correo electrónico de registro, vuelve a comentar la línea. Solo necesita ejecutarse una vez.
#- exec: rails r "SiteSetting.notification_email='info@sinconfigurar.discourse.org'"
- exec: echo "Fin de comandos personalizados"
¿Alguien puede decirme dónde me equivoqué con esto o qué podría estar faltando? ¡Gracias!