Anunciando o 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 curtidas

Acabei de executar isso em uma máquina onde o site estava parado. Esperava apenas uma série de verificações simples serem executadas e relatadas, mas não esperava que uma reconstrução com downloads ocorresse e que o site fosse iniciado. :grinning: Felizmente, estou usando a máquina apenas para aprendizado no momento, então não houve danos. Talvez devesse haver uma pergunta perguntando ao usuário se ele deseja algo tão significativo antes de prosseguir.

O Doctor assume que vocĂŞ deseja que seu site esteja no ar. :wink:

A maioria das verificações que ele realiza só pode ser feita em uma instalação funcional.

3 curtidas

EntĂŁo, acho que preciso do Discourse Autopsy.

9 curtidas

Isso já foi implementado, @pfaffman?

Estou tentando depurar um problema com o Amazon SES que não está funcionando, e aqui está a saída do discourse-doctor:

==================== TESTE DE E-MAIL ====================
Para um teste robusto, obtenha um endereço em http://www.mail-tester.com/
Ou simplesmente envie uma mensagem de teste para vocĂŞ mesmo.
Endereço de e-mail para o teste de e-mail? ('n' para pular) [rich@xxx.xxx]:
Enviando e-mail para rich@xxx.xxx. . .
flag abreviada desconhecida: 'w' em -w
Veja 'docker exec --help'.

Substituindo: SMTP_PASSWORD
Substituindo: LETSENCRYPT_ACCOUNT_EMAIL
Substituindo: DEVELOPER_EMAILS
Substituindo: DISCOURSE_DB_PASSWORD
Substituindo: Enviando e-mail para

==================== CONCLUĂŤDO! ====================
Gostaria de disponibilizar uma versĂŁo publicamente acessĂ­vel deste arquivo? (Y/n)Y
flag abreviada desconhecida: 'w' em -w
Veja 'docker exec --help'.
A saĂ­da deste programa pode estar disponĂ­vel em http://example.com/NTQyYTg2YzVjYzg1NTYx.txt
VocĂŞ deve examinar esse arquivo cuidadosamente antes de compartilhar o URL.

VocĂŞ pode examinar a saĂ­da deste script com
LESS=-Ri less /tmp/discourse-debug.txt

MAS ANTES, certifique-se de conhecer os trĂŞs primeiros comandos abaixo!!!

Comandos para saber ao visualizar o arquivo com o comando acima (chamado 'less'):
q              -- sair
/error<ENTER>  -- pesquisar pela palavra 'error'
n              -- pesquisar pela prĂłxima ocorrĂŞncia
g              -- ir para o inĂ­cio do arquivo
f              -- avançar uma página
b              -- voltar uma página
G              -- ir para o final do arquivo

Nenhum e-mail chega.

E não sei o motivo…

A versão pública do arquivo ou não foi criada, ou não está acessível, pois ao acessar o URL, recebo apenas um erro de “não encontrado”.

Parece que o modo como o link público funcionava anteriormente está quebrado. Isso quase nunca é usado. Deve ser excluído.

O teste SMTP verifica se é possível conectar, mas não realiza verificações de DNS.

Esse erro do docker exec sugere que há algo errado lá.

Vou ver sobre adicionar uma nota sobre o endereço de envio. Isso ainda é um problema comum. O Discourse envia do subdomínio do fórum e, muitas vezes, o servidor de e-mail espera o domínio principal.

Para o seu problema com e-mail, você já verificou Solução de problemas de e-mail em uma nova instalação do Discourse?

2 curtidas

Como nenhuma informação de diagnóstico é fornecida no console, eu esperava que o arquivo .txt me desse alguns detalhes.

Também notei que a URL do arquivo txt é http e não https (embora isso não altere nada aqui, de qualquer forma).

Hmm. Talvez esse erro do Docker signifique que ele não está mais executando o teste SMTP de forma alguma.

Você deve consultar o guia de solução de problemas e executar a tarefa rake que testa o SMTP.

Vou fazer, obrigado pelas respostas.

1 curtida

Após executar o script ./discourse-doctor, respondi Sim a “Você gostaria de servir uma versão publicamente acessível deste arquivo?” e agora percebi que as credenciais de e-mail (login, senha) estão expostas.

Onde e como posso excluir permanentemente os logs/arquivos gerados pelo ./discourse-doctor?

Hmm. Desculpe por isso. Acho que algo deve ter mudado, fazendo com que clean_up_log_file() nĂŁo funcione mais corretamente, embora eu nĂŁo tenha certeza do motivo.

A URL para compartilhar o arquivo funciona mesmo? Tenho quase certeza de que nĂŁo funcionava na Ăşltima vez que verifiquei.

Você pode executar rm /var/discourse/shared/standalone/public/*.txt. Ou verificar lá o nome real do arquivo e removê-lo.

1 curtida

Tentei encontrar o nome exato do arquivo (nome extraído da URL) no diretório raiz. Excluí dois arquivos, mas a URL ainda exibia todas as informações do log. Por fim, decidi encerrar a máquina virtual. De qualquer forma, foi uma experiência importante para mim: “tenha muito cuidado ao lidar com credenciais”

:wink:

2 curtidas

sim, eu recebo o mesmo erro do Docker e nenhum e-mail

Não está mais em ../public/. Encontrado em var/discourse/shared/standalone/log/var-log/*.txt

Se mudar no futuro:
find -type f -name *.txt