Estoy intentando realizar una instalación limpia con la aplicación de un solo clic de Digital Ocean.
Es la tercera vez que la creo desde el principio y estoy experimentando el mismo problema.
Al verificar el DNS, veo que mi dominio apunta a la IP del droplet, pero Discourse no se muestra en mi dominio.
Ejecuté discourse-doctor y se queda atascado/colgado antes de mostrar la información de si el dominio está servido o no.
¿Hubo alguna actualización que podría haber introducido este comportamiento?
@merefield Acabo de crear un nuevo droplet y ejecuté la instalación según lo descrito en la instalación oficial. Todavía estoy experimentando exactamente el mismo problema.
El problema suele ser que no tienes el DNS configurado correctamente o que aún no se ha propagado. Si compartes tu URL, alguien podría verificarlo.
A menudo uso https://dnschecker.org/#A/example.com para comprobarlo.
Pero si ya lo has intentado varias veces, es probable que hayas agotado el número de veces que Let’s Encrypt te enviará un certificado. Mi suposición es que ese es tu problema actual. Tengo un 90% de certeza. Puedes “hacer trampa” siguiendo Set up Let’s Encrypt with multiple domains / redirects - #53, pero es una configuración más compleja y no podrías lograr la configuración sencilla. Tu mejor opción es probablemente esperar unos días e intentarlo de nuevo.
No es el problema. /shared/ssl es la ruta dentro del contenedor. shared/standalone/ssl es la ruta fuera del contenedor.
@pfaffman Sí, suena legítimo. Aun así, no puedo crearlo, pero sí puedo hacerlo en otro dominio. Dado que la consulta DNS muestra que estoy conectado al servidor correcto y todo lo demás, asumo que el problema es el que describiste. Esperaré unos días más y lo intentaré de nuevo.
Gracias
@pfaffman ¿Puedes ayudarme a hacer trampa? He revisado cómo configurarlo con múltiples dominios, pero no estoy seguro de lo que querías decir. ¿Te refieres a usar el hook after_ssl de alguna manera?
Simplemente agregarías cualquier otro dominio. Así que, si tu foro es forum.example.com, agregarías un registro DNS para cheat.example.com que apunte a tu servidor y lo agregarías como se describe allí. Dado que sería una solicitud de certificado diferente, te permitiría solicitarlo.
O puede agregar un dominio o subdominio más usando esto. Una forma fácil de sortear el problema cuando has alcanzado el límite de solicitudes. Pero para evitar llegar a esos límites, siempre es mejor usar el entorno de prueba --dryrun. (Ten en cuenta que Let’s Encrypt está considerando renombrar --dryrun a algo más fácil de reconocer para los hablantes no nativos de inglés, como --test o --testrun. Lo más probable es que esto no ocurra hasta enero de 2021 o más tarde. También están trabajando en una reescritura completa de sus guías.
El método recomendado para agregar un nuevo dominio a un certificado existente es, de hecho, reutilizar la línea de comando original, agregar el nuevo dominio con otra bandera -d y añadir --expand para indicarle a certbot que no cree una nueva línea de vida (lo que resultaría en un nuevo subdirectorio en /etc/letsencrypt/live).
El problema aquí es que no sabes que es una prueba hasta que es demasiado tarde. Además, ni siquiera para mí está claro cómo configurar Discourse para obtener esos certificados en modo de prueba.
Esa es una de las razones por las que ellos (en Let’s Encrypt) están reescribiendo sus guías… para hacerlas más claras. Una vez que estés configurado para obtener un certificado de prueba (falso) usando el entorno de prueba, entonces se puede ejecutar Certbot en modo de producción y obtener su CA. Después de eso, se puede instalar Discourse y debería obtener la nueva CA (ampliada).
No es eso. El problema es que averiguar cómo agregar una sección a un app.yml para incluir ese interruptor, por obvio que pueda parecer, es unas 3 veces (o quizás 10 veces) más difícil que instalar Discourse. ¿Tendrías que editar app.yml, agregar algo complicado y asegurarte de que todos los espacios estén exactamente bien? Simplemente espera una semana o elige un nombre nuevo.
@pfaffman Elegí un nuevo nombre como describí. Un problema fue que cheat.example.com debería ser un registro CNAME en lugar de un registro A.
Aun así, no funciona. Le daré un poco más de tiempo.
EDITO: Para referencia, aquí está mi app.yml:
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 Lets Encrypt (https)
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
expose:
- "80:80" # http
- "443:443" # 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 durante el arranque según la RAM detectada, o puedes sobrescribirlo
db_shared_buffers: "256MB"
## Puede mejorar el rendimiento de ordenamiento, pero aumenta el 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:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
# DISCOURSE_RELATIVE_URL_ROOT: /forum
## ¿Cuántas solicitudes web simultáneas se admiten? Depende de la memoria y los núcleos de CPU.
## Se establecerá automáticamente durante el arranque según los CPUs detectados, o puedes sobrescribirlo
UNICORN_WORKERS: 4
## TODO: El nombre de dominio al que responderá esta instancia de Discourse
## Obligatorio. Discourse no funcionará con una dirección IP desnuda.
DISCOURSE_HOSTNAME: cheat.example.com
## Descomenta si quieres que el contenedor se inicie con el mismo
## nombre de host (opción -h) que se especificó arriba (por defecto "$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 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'emails@emails.com'
## TODO: El servidor SMTP utilizado para validar nuevas cuentas y enviar notificaciones
## Se requieren la dirección SMTP, el nombre de usuario y la contraseña
## ADVERTENCIA: el carácter '#' en la contraseña SMTP puede causar problemas
DISCOURSE_SMTP_ADDRESS: smtpout.secureserver.net
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: some@email.com
DISCOURSE_SMTP_PASSWORD: "apassword"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (opcional, por defecto true)
## Si agregaste la plantilla de Lets Encrypt, descomenta abajo para obtener un certificado SSL gratuito
LETSENCRYPT_ACCOUNT_EMAIL: me@example.com
## La dirección del CDN http o https 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.example.com
## El contenedor Docker es sin 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
after_ssl:
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--keylength/
to: "-d cheat.example.com --expand"
Al final, pasó una semana y pude volver a usar mi dominio. Probablemente cometí algún error en la configuración para que funcionara con el subdominio, ya que, tras leer en Let’s Encrypt, estoy bastante seguro de que esa es la solución.
¡Gracias de nuevo a @pfaffman y @JimPas por la ayuda y las respuestas informativas!