Se você quiser executar outros sites na mesma máquina que o Discourse, é necessário configurar um proxy NGINX ou HAProxy adicional à frente do container Docker.
NOTA: Isso é para administradores avançados
Este guia pressupõe que você já tenha o Discourse funcionando — caso contrário, pode ser difícil saber se a configuração está funcionando corretamente.
Você não pode usar ./discourse-setup para configurar o Discourse se outro servidor estiver usando a porta 80 ou 443. Você precisará copiar e editar samples/standalone.yml com seu editor de texto favorito.
Instale o nginx fora do container
Primeiro, certifique-se de que o container não esteja em execução:
cd /var/discourse
./launcher stop app
Em seguida, instale o nginx e o certbot:
sudo apt-get update && sudo apt-get install nginx certbot python3-certbot-nginx
Altere a definição do container
É aqui que alteramos a forma como o Discourse é configurado. Não queremos que o container escute em portas — em vez disso, diremos a ele para escutar em um arquivo especial.
Você precisa editar /var/discourse/containers/app.yml para desativar o SSL e adicionar um modelo para criar o soquete do nginx. Deve ficar assim:
# modelos base usados; pode reduzir para incluir menos funcionalidades por modelo de container:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
# - "templates/web.ssl.template.yml" # remova — https será tratado pelo nginx externo
# - "templates/web.letsencrypt.ssl.template.yml" # remova — https será tratado pelo nginx externo
- "templates/web.socketed.template.yml" # <-- Adicionado
Certifique-se de remover ou comentar as portas expostas colocando um # à frente.
# quais portas expor?
# expose: comente toda a seção colocando um # à frente de cada linha
# - "80:80" # http
# - "443:443" # https
Agora você pode
/var/discourse/launcher rebuild app
para reconstruir o Discourse e tornar seus dados disponíveis para o soquete.
Se você estiver usando algum outro proxy reverso que não possa usar um soquete web, você pode expor uma porta diferente na seção acima, como - 8080:80.
Crie um “site” NGINX para o nginx externo
Crie um arquivo de site para o Discourse:
cd /etc/nginx/sites-available
cp default discourse.example.com
cd ../sites-enabled
ln -s ../sites-available/discourse.example.com
Em seguida, edite esse arquivo comentando essas linhas:
#listen 80 default_server;
#listen [::]:80 default_server;
e editando o server_name e a seção location assim:
server_name discourse.example.com; # <-- altere isso
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
Se você estiver usando uma instalação de dois containers, a linha do soquete será:
proxy_pass http://unix:/var/discourse/shared/web-only/nginx.http.sock:;
Em seguida, em um terminal:
certbot --nginx
E siga as instruções. Se você não entender os prompts, provavelmente não deveria estar fazendo isso, mas pode consultar a documentação do certbot para ajuda.
@pfaffman acha que o certbot fará isso por você, mas se você fizer alterações na configuração do nginx, precisará
sudo service nginx reload
Crie seus outros sites
Você concluiu a seção do Discourse!
Crie outros “sites” do NGINX, depois vincule e ative-os, como no último passo acima.
Dicas
sudo netstat -tulpn: Isso mostrará quais portas estão sendo usadas/var/log/nginx/error.log: É o local do log do nginx no Ubuntu. Isso mostrará qual é o erro quando você receber um erro 502 Bad Gateway.