@pfaffman editou isto extensivamente em 24/02/2022. Culpe-me se estiver quebrado.
Se você deseja executar outros sites na mesma máquina que o Discourse, você precisa configurar um proxy NGINX ou HAProxy extra na frente do contêiner Docker.
NOTA: Isso é para administradores avançados
Este guia assume que você já tem o Discourse funcionando - se não tiver, pode ser difícil saber se a configuração está funcionando ou não.
Você não pode usar ./discourse-setup para configurar o Discourse se outro servidor estiver usando as portas 80 ou 443. Você precisará copiar e editar samples/standalone.yml com seu editor de texto preferido.
Instalar nginx fora do contêiner
Primeiro, certifique-se de que o contêiner 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
Alterar a definição do contêiner
É aqui que mudamos como o Discourse é realmente configurado. Não queremos que o contêiner escute nas portas - em vez disso, diremos a ele para escutar em um arquivo especial.
Você precisa editar /var/discourse/containers/app.yml para desabilitar o ssl e adicionar o template para criar o socket nginx. Deve ficar assim:
# base templates used; can cut down to include less functionality per container templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
# - "templates/web.ssl.template.yml" # remove - https will be handled by outer nginx
# - "templates/web.letsencrypt.ssl.template.yml" # remove -- https will be handled by outer nginx
- "templates/web.socketed.template.yml" # <-- Added
Certifique-se de remover ou comentar as portas expostas colocando um # na frente.
# which ports to expose?
# expose: comment out entire section by putting a # in front of each line
# - "80:80" # http
# - "443:443" # https
Agora você pode
/var/discourse/launcher rebuild app
para reconstruir o Discourse e disponibilizar seus dados para o socket.
Se você estiver usando algum outro proxy reverso que não possa usar um web socket, você pode expor uma porta diferente na seção acima, como - 8080:80.
Criar 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 estas linhas:
#listen 80 default_server;
#listen [::]:80 default_server;
e editando o server_name e o bloco location assim:
server_name discourse.example.com; # <-- change this
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 $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
Se você estiver usando uma instalação de dois contêineres, a linha do socket será:
proxy_pass http://unix:/var/discourse/shared/web-only/nginx.http.sock:;
Em seguida, em um shell:
certbot --nginx
E siga as instruções. Se você não entender os prompts, provavelmente não deveria estar fazendo isso, mas pode verificar a documentação do certbot para obter ajuda.
@pfaffman acha que o certbot fará isso para você, mas se você fizer alterações na configuração do nginx, você precisará
sudo service nginx reload
Crie seus outros sites
Você terminou com a seção Discourse!
Crie outros “sites” NGINX, depois vincule e habilite-os, como na última etapa acima.
Dicas
sudo netstat -tulpn: Isso informará quais portas estão sendo usadas/var/log/nginx/error.log: É a localização do log do nginx no ubuntu. Isso informará qual é o erro quando você receber um erro 502 Bad Gateway.