Este método de instalação não é oficialmente endossado. Use por sua conta e risco.
A equipe do Discourse recomenda apenas a instalação usando o guia de instalação oficial
Esta é uma instalação sem suporte, adequada para quem tem experiência com o CloudPanel, é administrador de sistemas experiente, está confortável com Docker, proxies reversos e já completou com sucesso uma instalação padrão.
Por que o CloudPanel
Por que você pode querer instalar um Fórum Discourse em um VPS ou Servidor Dedicado rodando CloudPanel?
Aqui estão minhas razões:
Eu prefiro usar uma interface gráfica para administração do servidor e do site. Já usei a maioria dos painéis de controle de hospedagem web em algum momento.
Em comparação com os demais, o CloudPanel é muito leve e minimalista e descomplicado. Tem todos os recursos que preciso, apresentados de forma muito simples e intuitiva. E é isso. Não tem nada que eu não precise.
Eu desenvolvo, hospedo e gerencio muitos blogs Ghost, sites Wordpress, sites Drupal e outros tipos de sites, além de fóruns Discourse. Eu realmente preciso apenas de um servidor onde posso hospedar meus fóruns Discourse junto com meus blogs Ghost e meus sites Wordpress e Drupal. (Eu não quero pagar e manter um servidor separado para cada instância do Discourse.)
O CloudPanel inclui (direto da caixa) Nginx embutido e uma interface simples para configurar e gerenciar Proxies Reversos, que são necessários para rodar uma ou mais instâncias do Discourse no mesmo servidor ou junto com outros tipos de sites.
A equipe do Discourse (e a equipe do fórum Meta aqui) não oferece suporte para ambientes de servidor alternativos como Cpanel, Plesk ou (como neste caso) CloudPanel, ou outros que surgem a partir da linha de comando.
Então, pensei em compartilhar minha configuração e meu processo, caso haja outras pessoas que possam achar útil.
[Se alguém tentar este método, por favor, me avise como funcionou para você, ou se posso melhorar este tutorial!
]
Instalar o Docker
No Putty (ou outro terminal), a partir do diretório raiz, execute:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt-get install docker-ce docker-ce-cli docker-compose containerd.io
Criar um Site de Proxy Reverso no CloudPanel
→ Clicamos no botão + Adicionar Site…
Para minha instância do Discourse, estou usando meu domínio noobish.me, então daqui para frente, sempre que vir isso nas instruções restantes, substitua noobish.me pelo seu domínio real (por exemplo, seusite.com)
→ Criamos um novo “Site de Proxy Reverso” no CloudPanel para o domínio onde queremos hospedar nosso fórum Discourse (obviamente, o registro A do DNS do domínio precisa estar apontando para o mesmo endereço IP do nosso CloudPanel.)
Preparar o Domínio e Configurar o SSL
Para meu site, estou usando os servidores de nomes do Cloudflare para apontar o domínio. No Cloudflare, configurei o SSL como Full ou Full (estrito).
Também criei uma Regra de Página do Cloudflare. Visite este post para saber o motivo.
Estou também usando um Certificado de Origem SSL gratuito do Cloudflare para meu domínio, que eu “Importei” no CloudPanel nas configurações do site “SSL/TLS” para aquele site (simplesmente colando tanto o Certificado quanto a Chave Privada que eu havia baixado para aquele nome de domínio da minha conta Cloudflare.)
Instalar o Discourse
De volta ao Putty (ou outro terminal), a partir do diretório raiz (c d Enter para voltar à raiz) → Instale a Instalação Padrão do Discourse usando estes comandos…
git clone https://github.com/discourse/discourse_docker.git /var/discourse
Enter
cd /var/discourse
Enter
chmod 700 containers
Copiar a Configuração Standalone
Agora copiamos o arquivo /var/discourse/standalone.yml para /var/discourse/containers/ como app.yml antes de editá-lo de acordo com as configurações do nosso site.
cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml
Editar o arquivo app.yml
Além de modificar o arquivo app.yml de acordo com nossas configurações específicas do site, precisamos alterar 3 coisas a mais naquele arquivo antes de salvá-lo…
Na seção templates:, precisamos adicionar:
- "templates/web.socketed.template.yml"
Como estou usando o Cloudflare, na seção templates:, também adiciono:
- "templates/cloudflare.template.yml"
Na seção expose:, precisamos comentar:
#- "80:80" # http
#- "443:443" # https
Na seção env:, precisamos adicionar:
DISCOURSE_FORCE_HTTPS: true
Para referência, você pode Clicar Aqui para ver o conteúdo do meu app.yml funcional em noobish.me, onde estou usando tanto o Cloudflare quanto o Mailgun...
## este é o modelo de container Docker Discourse tudo-em-um, standalone ## ## Após fazer alterações neste arquivo, você DEVE reconstruir ## /var/discourse/launcher rebuild app ## ## TENHA *MUITO* CUIDADO AO EDITAR! ## ARQUIVOS YAML SÃO SUPER SUPER SENSÍVEIS A ERROS DE ESPAÇAMENTO OU ALINHAMENTO! ## visite http://www.yamllint.com/ para validar este arquivo conforme necessário templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" - "templates/web.ratelimited.template.yml" - "templates/web.socketed.template.yml" - "templates/cloudflare.template.yml" params: db_default_text_search_config: "pg_catalog.english" ## Defina db_shared_buffers para no máximo 25% da memória total. ## será definido automaticamente pelo bootstrap com base na RAM detectada, ou você pode substituir db_shared_buffers: "4096MB" ## pode melhorar o desempenho de ordenação, mas adiciona uso de memória por conexão #db_work_mem: "40MB" ## Qual revisão do Git este container deve usar? (padrão: tests-passed) #version: tests-passed env: LC_ALL: en_US.UTF-8 LANG: en_US.UTF-8 LANGUAGE: en_US.UTF-8 # DISCOURSE_DEFAULT_LOCALE: en DISCOURSE_FORCE_HTTPS: true ## Quantas solicitações web concorrentes 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 substituir UNICORN_WORKERS: 8 ## 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: 'noobish.me' ## Descomente se quiser que o container seja iniciado com o mesmo ## hostname (opção -h) especificado acima (padrão "$hostname-$config") #DOCKER_USE_HOSTNAME: true ## TODO: Lista de e-mails separados por vírgula que serão feitos administradores e desenvolvedores ## no cadastro inicial, exemplo 'user1@example.com,user2@example.com' DISCOURSE_DEVELOPER_EMAILS: 'admin@noobish.me' ## TODO: O servidor de e-mail 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: postmaster@noobish.me DISCOURSE_SMTP_PASSWORD: pYdRLyQW #DISCOURSE_SMTP_ENABLE_START_TLS: true # (opcional, padrão true) #DISCOURSE_SMTP_DOMAIN: noobish.me # (obrigatório por alguns provedores) DISCOURSE_NOTIFICATION_EMAIL: noreply@noobish.me # (endereço para enviar notificações) ## O endereço 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 endereço IP do geolocalização Maxmind para consulta de endereço IP ## veja https://meta.discourse.org/t/-/137387/23 para detalhes #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456 ## 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 ## Plugins vão aqui ## veja https://meta.discourse.org/t/19157 para detalhes hooks: after_code: - exec: cd: $home/plugins cmd: - git clone https://github.com/discourse/docker_manager.git ## Quaisquer comandos personalizados para executar após a construção run: - exec: echo "Início dos comandos personalizados" ## Se quiser definir o endereço de e-mail 'De' para seu primeiro cadastro, descomente e altere: ## Após obter o primeiro e-mail de cadastro, recomente a linha. Só precisa rodar uma vez. #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'" - exec: echo "Fim dos comandos personalizados"
Então salvamos e saímos do arquivo app.yml…
CTRL-X
y
Enter
Em seguida, definimos as permissões para o arquivo app.yml…
chmod o-rwx containers/app.yml
então…
Inicializar o App
cd /var/discourse
./launcher bootstrap app
Isso levará um tempo considerável. No final do processo de inicialização, você será solicitado a:
./launcher start app
Editar o Arquivo Vhost
Agora voltamos ao nosso CloudPanel e colamos o código abaixo no “Editor Vhost” para nosso site Discourse (sobrescrevendo o que já está lá). Obviamente, substitua seusite.com pelo seu domínio real.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
{{ssl_certificate_key}}
{{ssl_certificate}}
server_name yoursite.com;
{{root}}
{{nginx_access_log}}
{{nginx_error_log}}
if ($scheme != "https") {
rewrite ^ https://$host$uri permanent;
}
location ~ /.well-known {
auth_basic off;
allow all;
}
{{settings}}
add_header Cache-Control no-transform;
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;
}
}
Reiniciar o Nginx
Em seguida, precisamos reiniciar o Nginx, o que podemos fazer clicando em um botão na Área Administrativa do CloudPanel…
Parabéns!
Agora, no nosso navegador, podemos ir ao URL do nosso site e executar o Assistente de Configuração do Discourse…
Coexistir em Paz
Agora posso auto-hospedar e gerenciar meu site Discourse junto com meus sites Ghost, Wordpress, Drupal e outros tipos, usando um painel de gerenciamento limpo e enxuto, com necessidade mínima de usar o terminal/linha de comando daqui para frente.
Para Instalar Instâncias Adicionais do Discourse…








