Não foi minha primeira instalação do Discourse, mas consegui ficar travado após três tentativas de fazer uma instalação padrão em uma droplet Digital Ocean (1GB NVMe SSD Premium AMD) usando Ubuntu 22.04 LTS. Segui o guia e forneci um e-mail para o LetsEncrypt, como já fiz muitas vezes antes. Após a instalação do Discourse não aparecer no navegador (seja via registro A ou pelo IP direto da droplet), confirmei que a instalação recusa conexões nas portas HTTP e HTTPS e tenho me dado cabeçadas desde então.
A única coisa estranha que notei durante a instalação foi que o Docker não veio instalado por padrão na droplet da Digital Ocean e o sistema me pediu para instalá-lo após detectar que o clone do repositório do container do Discourse exigia isso. Fora isso, prossegui normalmente e testei tanto o Docker quanto a instalação do Discourse.
Boas notícias — O Discourse executa com sucesso o teste de entrega de e-mail, o que implica que a instalação está lá e em execução, e o Docker parece estar funcionando bem (após executar “docker run -it --rm hello-world”). Também fiz ping no github.com e obtive respostas, então não parece ser um problema de firewall ou conectividade.
Problema: conexões recusadas
No entanto, executar “curl -v localhost:8080” retorna:
* Trying 127.0.0.1:8080...
* connect to 127.0.0.1 port 8080 failed: Connection refused
* Trying ::1:8080...
* connect to ::1 port 8080 failed: Connection refused
* Failed to connect to localhost port 8080 after 1 ms: Connection refused
* Closing connection 0
Já “curl -v localhost” retorna:
* Trying 127.0.0.1:80...
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.81.0
> Accept: */*
>
* Empty reply from server
* Closing connection 0
curl: (52) Empty reply from server
Aqui está meu app.yml e os resultados da execução do discourse-doctor:
app.yml
## Quantas requisições web simultâneas são suportadas? Depende de memória e núcleos de CPU.
## será definido automaticamente pelo bootstrap com base nas CPUs detectadas, ou você pode sobrescrever
UNICORN_WORKERS: 2
## TODO: O nome de domínio ao qual esta instância do Discourse responderá
## Obrigatório. O Discourse não funcionará com um número IP puro.
DISCOURSE_HOSTNAME: community.example.io
## Descomente se quiser que o container seja iniciado com o mesmo
## hostname (-h option) especificado acima (padrão "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Lista de e-mails separados por vírgula que serão definidos como admin e developer
## no cadastro inicial, exemplo 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'example@example.com'
## TODO: O servidor SMTP usado para validar novas contas e enviar notificações
# ENDEREÇO SMTP, nome de usuário e senha são obrigatórios
# AVISO: o caractere '#' na senha SMTP pode causar problemas!
DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: no-reply@example.io
DISCOURSE_SMTP_PASSWORD: "XXXXXX"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (opcional, padrão true)
DISCOURSE_SMTP_DOMAIN: community.example.io
DISCOURSE_NOTIFICATION_EMAIL: noreply@community.example.io
## Se você adicionou o template do Lets Encrypt, descomente abaixo para obter um certificado SSL gratuito
LETSENCRYPT_ACCOUNT_EMAIL: example@example.com
## O endereço do CDN http ou https para esta instância do Discourse (configurado para buscar)
## veja https://meta.discourse.org/t/14857 para detalhes
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## A chave de licença do Maxmind para busca de endereço IP
## veja https://meta.discourse.org/t/-/137387/23 para detalhes
DISCOURSE_MAXMIND_LICENSE_KEY: XXXXX
## O container Docker é sem estado; todos os dados são armazenados em /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
## TODO: O nome de domínio ao qual esta instância do Discourse responderá
## Obrigatório. O Discourse não funcionará com um número IP puro.
DISCOURSE_HOSTNAME: community.example.io
## Descomente se quiser que o container seja iniciado com o mesmo
## hostname (-h option) especificado acima (padrão "$hostname-$config")
#DOCKER_USE_HOSTNAME: true
## TODO: Lista de e-mails separados por vírgula que serão definidos como admin e developer
## no cadastro inicial, exemplo 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'example@example.com'
## TODO: O servidor SMTP usado para validar novas contas e enviar notificações
# ENDEREÇO SMTP, nome de usuário e senha são obrigatórios
# AVISO: o caractere '#' na senha SMTP pode causar problemas!
DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: no-reply@example.io
DISCOURSE_SMTP_PASSWORD: "XXXXXXXX"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (opcional, padrão true)
DISCOURSE_SMTP_DOMAIN: community.example.io
DISCOURSE_NOTIFICATION_EMAIL: noreply@community.example.io
## Se você adicionou o template do Lets Encrypt, descomente abaixo para obter um certificado SSL gratuito
LETSENCRYPT_ACCOUNT_EMAIL: example@example.com
## O endereço do CDN http ou https para esta instância do Discourse (configurado para buscar)
## veja https://meta.discourse.org/t/14857 para detalhes
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## A chave de licença do Maxmind para busca de endereço IP
## veja https://meta.discourse.org/t/-/137387/23 para detalhes
DISCOURSE_MAXMIND_LICENSE_KEY: XXXXXX
## O container Docker é sem estado; todos os dados são armazenados em /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
resultados do discourse-doctor
Arquivo containers/app.yml encontrado
==================== CONFIGURAÇÕES YML ====================
DISCOURSE_HOSTNAME=community.example.io
SMTP_ADDRESS=smtp.mailgun.org
DEVELOPER_EMAILS=example@example.com
SMTP_PASSWORD=XXXXXXXX
SMTP_PORT=587
SMTP_USER_NAME=no-reply@example.io
LETSENCRYPT_ACCOUNT_EMAIL=example@example.com
==================== INFORMAÇÕES DO DOCKER ====================
VERSAO DO DOCKER: Docker version 20.10.21, build baeda1f
PROCESSOS DO DOCKER (docker ps -a)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e1d88ff15b5b local_discourse/app "/sbin/boot" 18 minutos atrás Up 18 minutos 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp app
e1d88ff15b5b local_discourse/app "/sbin/boot" 18 minutos atrás Up 18 minutos 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp app
Container do Discourse app está em execução
==================== PLUGINS ====================
- git clone https://github.com/discourse/docker_manager.git
Nenhum plugin não oficial detectado.
Veja https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb para a lista oficial.
========================================
Versão do Discourse em community.example.io: NÃO ENCONTRADA
Versão do Discourse em localhost: NÃO ENCONTRADA
==================== INFORMAÇÕES DE MEMÓRIA ====================
RAM (MB): 1016
total used free shared buff/cache available
Mem: 969 687 61 21 220 110
Swap: 2047 241 1806
==================== VERIFICAÇÃO DE ESPAÇO EM DISCO ====================
---------- Espaço em disco do SO ----------
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 25G 8.2G 16G 34% /
==================== INFORMAÇÕES DO DISCO ====================
Disco /dev/loop0: 63.22 MiB, 66293760 bytes, 129480 setores
Unidades: setores de 1 * 512 = 512 bytes
Tamanho do setor (lógico/físico): 512 bytes / 512 bytes
Tamanho de I/O (mínimo/ótimo): 512 bytes / 512 bytes
Disco /dev/loop1: 102.98 MiB, 107986944 bytes, 210912 setores
Unidades: setores de 1 * 512 = 512 bytes
Tamanho do setor (lógico/físico): 512 bytes / 512 bytes
Tamanho de I/O (mínimo/ótimo): 512 bytes / 512 bytes
Disco /dev/loop2: 47.98 MiB, 50315264 bytes, 98272 setores
Unidades: setores de 1 * 512 = 512 bytes
Tamanho do setor (lógico/físico): 512 bytes / 512 bytes
Tamanho de I/O (mínimo/ótimo): 512 bytes / 512 bytes
Disco /dev/vda: 25 GiB, 26843545600 bytes, 52428800 setores
Unidades: setores de 1 * 512 = 512 bytes
Tamanho do setor (lógico/físico): 512 bytes / 512 bytes
Tamanho de I/O (mínimo/ótimo): 512 bytes / 512 bytes
Tipo de tabela de disco: gpt
Identificador do disco: 728BDF97-580D-4B6F-9462-7E2540D5378B
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 EFI System
As entradas da tabela de partições não estão em ordem no disco.
Disco /dev/vdb: 466 KiB, 477184 bytes, 932 setores
Unidades: setores de 1 * 512 = 512 bytes
Tamanho do setor (lógico/físico): 512 bytes / 512 bytes
Tamanho de I/O (mínimo/ótimo): 512 bytes / 512 bytes
==================== FIM DAS INFORMAÇÕES DO DISCO ====================
==================== TESTE DE E-MAIL ====================
Para um teste robusto, obtenha um endereço em http://www.mail-tester.com/
Ou apenas envie uma mensagem de teste para você mesmo.
Endereço de e-mail para o teste de e-mail? ('n' para pular) [example@example.com ]:
Enviando e-mail para example@example.com . . .
Testando envio para example@example.com usando smtp.mailgun.org:587, usuário:no-reply@example.io com autenticação simples.
Conexão com o servidor SMTP bem-sucedida.
Enviando para example@example.com. . .
E-mail aceito pelo servidor SMTP.
Message-ID: e3455d15-eb48-48bf-9859-a30f1acc765c@community.example.io
Se você não receber a mensagem, verifique sua pasta de SPAM
ou teste novamente usando um serviço como http://www.mail-tester.com/.
Se a mensagem não for entregue, o problema não é com o Discourse.
Verifique os logs do servidor SMTP para o Message-ID acima para ver por que ela
falhou ao ser entregue.
Substituindo: SMTP_PASSWORD
Substituindo: LETSENCRYPT_ACCOUNT_EMAIL
Substituindo: DEVELOPER_EMAILS
Substituindo: DISCOURSE_DB_PASSWORD
Substituindo: Enviando e-mail para
==================== CONCLUÍDO! ====================
Também executei ./launcher enter app no diretório do Discourse + o comando top para verificar se nginx, redis, postmaster e ruby estão todos em execução. Não vejo o nginx na lista…
launcher enter app --> resultados do top
Tasks: 31 total, 1 running, 30 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.3 us, 2.3 sy, 0.0 ni, 96.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.3 st
MiB Mem : 969.4 total, 72.4 free, 659.0 used, 238.0 buff/cache
MiB Swap: 2048.0 total, 1667.2 free, 380.8 used. 141.1 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4528 discour+ 25 5 951480 289404 3096 S 0.3 29.2 4:21.14 ruby
1 root 20 0 6772 0 0 S 0.0 0.0 0:00.02 boot
4428 root 20 0 2340 24 0 S 0.0 0.0 0:01.14 runsvdir
4429 root 20 0 2188 0 0 S 0.0 0.0 0:00.00 runsv
4430 root 20 0 2188 0 0 S 0.0 0.0 0:00.00 runsv
4431 root 20 0 2188 0 0 S 0.0 0.0 0:00.00 runsv
4432 root 20 0 2188 0 0 S 0.0 0.0 0:00.00 runsv
4433 root 20 0 2188 280 256 S 0.0 0.0 1:28.21 runsv
4434 root 20 0 2188 0 0 S 0.0 0.0 0:00.00 runsv
4435 root 20 0 2336 0 0 S 0.0 0.0 0:00.05 svlogd
4436 redis 20 0 58072 2900 1624 S 0.0 0.3 3:17.52 redis-server
4438 root 20 0 2336 0 0 S 0.0 0.0 0:00.00 svlogd
4439 discour+ 20 0 15256 1128 912 S 0.0 0.1 0:25.85 unicorn_launche
4441 root 20 0 6620 488 384 S 0.0 0.0 0:00.21 cron
4442 postgres 20 0 213172 5220 4776 S 0.0 0.5 0:02.75 postmaster
4445 root 20 0 151068 132 0 S 0.0 0.0 0:00.06 rsyslogd
4458 postgres 20 0 213392 10404 9896 S 0.0 1.0 0:00.78 postmaster
4459 postgres 20 0 213172 5004 4604 S 0.0 0.5 0:01.50 postmaster
4460 postgres 20 0 213172 4956 4588 S 0.0 0.5 0:27.50 postmaster
4461 postgres 20 0 213840 2264 1652 S 0.0 0.2 0:01.98 postmaster
4462 postgres 20 0 68200 788 0 S 0.0 0.1 0:05.01 postmaster
4463 postgres 20 0 213724 1164 700 S 0.0 0.1 0:00.05 postmaster
4464 discour+ 20 0 457692 171868 1364 S 0.0 17.3 0:22.71 ruby
4503 postgres 20 0 220116 11116 10812 S 0.0 1.1 0:01.51 postmaster
4538 discour+ 20 0 768724 169816 1032 S 0.0 17.1 0:08.27 ruby
4549 discour+ 20 0 768724 169948 1220 S 0.0 17.1 0:08.55 ruby
4580 postgres 20 0 219408 10580 10460 S 0.0 1.1 0:00.13 postmaster
134464 postgres 20 0 217332 21388 17444 S 0.0 2.2 0:00.24 postmaster
137350 root 20 0 7036 3468 2972 S 0.0 0.3 0:00.02 bash
137382 root 20 0 10108 3756 3080 R 0.0 0.4 0:00.08 top
137609 discour+ 20 0 13760 2004 1732 S 0.0 0.2 0:00.00 sleep
Dê uma olhada no error.log dentro de var/discourse/shared/standalone/log/var-log/nginx:
2022/12/12 07:55:26 [emerg] 5040#5040: cannot load certificate "/shared/ssl/community.example.io.cer": PEM_read_bio_X509_AUX(>
2022/12/12 07:55:27 [emerg] 5042#5042: cannot load certificate "/shared/ssl/community.example.io.cer": PEM_read_bio_X509_AUX(>
2022/12/12 07:55:28 [emerg] 5044#5044: cannot load certificate "/shared/ssl/community.example.io.cer": PEM_read_bio_X509_AUX(>
2022/12/12 07:55:29 [emerg] 5046#5046: cannot load certificate "/shared/ssl/community.example.io.cer": PEM_read_bio_X509_AUX(>
....
