Anunciando Discourse Doctor

Following the example from Discourse-doctor 👩‍⚕️, I’ve created discourse-doctor, now included in discourse_docker. If you run ./discourse-doctor, you’ll see something like:

DISCOURSE DOCTOR Tue Jul 24 08:50:32 UTC 2018
OS: Linux twonames 4.4.0-130-generic #156-Ubuntu SMP Thu Jun 14 08:53:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux


Found containers/app.yml

==================== YML SETTINGS ====================
DISCOURSE_HOSTNAME=twonames.ltcmp.net
SMTP_ADDRESS=mail.domain.com
DEVELOPER_EMAILS=REDACTED 
SMTP_PASSWORD=REDACTED 
SMTP_PORT=587
SMTP_USER_NAME=postmaster@cakeme.ltcmp.net
LETSENCRYPT_ACCOUNT_EMAIL=REDACTED 

==================== DOCKER INFO ====================
DOCKER VERSION: Docker version 18.05.0-ce, build f150324

DOCKER PROCESSES (docker ps -a)

CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                    PORTS                                      NAMES
c75f29870c3b        local_discourse/app           "/sbin/boot"             5 days ago          Up 5 days                 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app
adc8de3e5156        discourse/base:2.0.20180613   "/bin/bash -c 'cd /p…"   5 days ago          Exited (137) 5 days ago                                              quirky_zhukovsky


Discourse container app is running


==================== PLUGINS ====================
          - git clone https://github.com/discourse/docker_manager.git

No non-official plugins detected.

See https://github.com/discourse/discourse/blob/master/lib/plugin/metadata.rb for the official list.

========================================
Discourse version at twonames.ltcmp.net: Discourse 2.1.0.beta2 
Discourse version at localhost: Discourse 2.1.0.beta2 


==================== MEMORY INFORMATION ====================
OS: Linux
RAM (MB): 1016

              total        used        free      shared  buff/cache   available
Mem:            992         577          69          28         345         184
Swap:          2047         301        1746

==================== DISK SPACE CHECK ====================
---------- OS Disk Space ----------
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        25G   12G   13G  48% /

---------- Container Disk Space ----------
Filesystem      Size  Used Avail Use% Mounted on
overlay          25G   12G   13G  48% /
/dev/vda1        25G   12G   13G  48% /shared
/dev/vda1        25G   12G   13G  48% /var/log

==================== DISK INFORMATION ====================
Disk /dev/vda: 25 GiB, 26843545600 bytes, 52428800 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 603625F3-7AE2-40CB-B05E-0BD7EA2D57E4

Device      Start      End  Sectors  Size Type
/dev/vda1  227328 52428766 52201439 24.9G Linux filesystem
/dev/vda14   2048    10239     8192    4M BIOS boot
/dev/vda15  10240   227327   217088  106M Microsoft basic data

Partition table entries are not in disk order.

==================== END DISK INFORMATION ====================

==================== MAIL TEST ====================
For a robust test, get an address from http://www.mail-tester.com/
Mail test skipped.

==================== DONE! ====================
The output of this program may be available at http://twonames.ltcmp.net/YzUwYjE5MzlmN2EyZTAz.txt
You should inspect that file carefully before sharing the URL.

You can examine the output of this script with 
LESS=-Ri less /tmp/discourse-debug.txt

BUT FIRST, make sure that you know the first three commands below!!!

Commands to know when viewing the file with the above command (called 'less'): 
q              -- quit
/error<ENTER>  -- search for the word 'error'
n              -- search for the next occurrence
g              -- go to the beginning of the file
f              -- go forward a page
b              -- go back a page
G              -- go to the end of the file

If the container isn’t running, discourse-doctor will attempt a rebuild and add the output of the build to the log file, which, if the container cranks up enough to have nginx, will be accessible via a URL, saving folks the trouble of uploading to something like pastebin. Passwords and email addresses are redacted by the script. Domain names are left intact, as there is rarely reason to hide your site given that it’s on the Internet already.

Right now, you have to know that discourse-doctor exists, but in the next few days, I’ll submit a PR to have launcher and discourse-setup recommend it.

Next Steps

  • have launcher recommend discourse-doctor
  • have discourse-setup recommend discourse-doctor
  • make the mail test rake task do some actual testing rather than just sending , like . . .
    – test connectivity to the port
    – does password work
    – SPF, DKIM, dmarc
    – tell them they can’t use gmail (should also add this to discourse-setup )
    – tell them what email address is in the from: line
  • have launcher disallow mixed case domain names
  • if rebuild rails, re-start old container – this is both trivial and huge, as I think few people know that if the rebulid fails you can just restart the container.
  • (tentative) do some kind of yml linting. It looks like launcher does some kind of yaml parsing in host_run . But part of me says “You break it. You bought it.”
  • consider handling files other than app.yml
  • have the doctor comment out plugins not from discourse github organization

If you have comments or suggestions, please let me know!

36 Me gusta

Acabo de ejecutar esto en una máquina donde el sitio estaba detenido. Esperaba que se ejecutara y reportara un conjunto simple de verificaciones, no esperaba que se realizara una reconstrucción con descargas y que el sitio se iniciara. :grinning: Afortunadamente, solo estoy usando la máquina para aprender en este momento, así que no hay daño. Quizás debería haber una pregunta que le pregunte al usuario si desea algo tan significativo antes de continuar.

El Doctor asume que quieres que tu sitio esté en línea. :wink:

La mayorĂ­a de las verificaciones que realiza solo pueden hacerse en una instalaciĂłn funcional.

3 Me gusta

Entonces, supongo que necesito Discourse Autopsy.

9 Me gusta

ÂżSe agregĂł esto alguna vez, @pfaffman?

Estoy intentando depurar que Amazon SES no funciona y esta es la salida de discourse-doctor:

==================== PRUEBA DE CORREO ====================
Para una prueba robusta, obtén una dirección de http://www.mail-tester.com/
O simplemente envĂ­a un mensaje de prueba a ti mismo.
ÂżDirecciĂłn de correo electrĂłnico para la prueba? ('n' para omitir) [rich@xxx.xxx]:
Enviando correo a rich@xxx.xxx. . .
indicador abreviado desconocido: 'w' en -w
Consulta 'docker exec --help'.

Reemplazando: SMTP_PASSWORD
Reemplazando: LETSENCRYPT_ACCOUNT_EMAIL
Reemplazando: DEVELOPER_EMAILS
Reemplazando: DISCOURSE_DB_PASSWORD
Reemplazando: Enviando correo a

==================== ¡LISTO! ====================
ÂżTe gustarĂ­a servir una versiĂłn pĂşblicamente accesible de este archivo? (Y/n) Y
indicador abreviado desconocido: 'w' en -w
Consulta 'docker exec --help'.
La salida de este programa podrĂ­a estar disponible en http://example.com/NTQyYTg2YzVjYzg1NTYx.txt
DeberĂ­as inspeccionar ese archivo cuidadosamente antes de compartir la URL.

Puedes examinar la salida de este script con
LESS=-Ri less /tmp/discourse-debug.txt

¡PERO PRIMERO, asegúrate de conocer los tres primeros comandos a continuación!!!

Comandos que debes conocer al ver el archivo con el comando anterior (llamado 'less'):
q              -- salir
/error<ENTER>  -- buscar la palabra 'error'
n              -- buscar la siguiente apariciĂłn
g              -- ir al principio del archivo
f              -- avanzar una página
b              -- retroceder una página
G              -- ir al final del archivo

No llega ningĂşn correo.

Y no sé por qué…

La versiĂłn pĂşblica del archivo o bien no se crea o no es accesible, ya que simplemente obtengo un error de no encontrado al visitar la URL.

Parece que la forma en que funcionaba el enlace público está rota. Casi nunca se usa. Eso debería eliminarse.

La prueba de SMTP verifica si puede conectarse, pero no realiza comprobaciones de DNS.

Ese error de docker exec sugiere que hay algo mal allĂ­.

Voy a ver de añadir una nota sobre la dirección de envío. Eso sigue siendo un problema común. Discourse envía desde el subdominio del foro y, a menudo, el servidor de correo espera el dominio principal.

En cuanto a tu problema de correo electrĂłnico, Âżhas revisado SoluciĂłn de problemas de correo electrĂłnico en una nueva instalaciĂłn de Discourse?

2 Me gusta

Como no se proporciona informaciĂłn de diagnĂłstico en la consola, esperaba que el archivo .txt me diera algunos detalles.

También noto que la URL del archivo txt es http y no https (aunque esto no altera nada en este caso).

Hmm. Tal vez ese error de Docker signifique que ya no está ejecutando la prueba de SMTP en absoluto.

DeberĂ­as consultar la guĂ­a de soluciĂłn de problemas y ejecutar la tarea de Rake que prueba SMTP.

Lo haré, gracias por las respuestas.

1 me gusta

Después de ejecutar el script ./discourse-doctor, respondí “Sí” a la pregunta “¿Desea servir una versión públicamente accesible de este archivo?” y ahora puedo ver que las credenciales de correo electrónico (inicio de sesión, contraseña) están expuestas.

ÂżDĂłnde y cĂłmo puedo eliminar permanentemente los registros/archivos generados por ./discourse-doctor?

Hmm. Lo siento por eso. Supongo que debe haber cambiado algo que hace que clean_up_log_file() ya no funcione correctamente, aunque no estoy seguro de por qué.

¿Funciona siquiera la URL para compartir el archivo? Estoy bastante seguro de que la última vez que lo revisé no funcionaba.

Puedes ejecutar rm /var/discourse/shared/standalone/public/*.txt. O busca allĂ­ el nombre real del archivo y elimĂ­nalo.

1 me gusta

He intentado encontrar el nombre exacto del archivo (el nombre extraído de la URL) en el directorio raíz. Eliminé dos archivos, pero la URL seguía mostrando toda la información del registro. Finalmente, decidí detener la máquina virtual. De todos modos, fue una experiencia importante para mí: “ten mucho cuidado cuando manipulas credenciales”. :wink:

2 Me gusta

SĂ­, obtengo el mismo error de Docker y ningĂşn correo electrĂłnico.

Ya no está en ../public/. Se encuentra en var/discourse/shared/standalone/log/var-log/*.txt

Si cambia en el futuro:
find -type f -name *.txt