DevOps

Discourse como instalar e atualizar sua plataforma de forum

Quando falamos de plataforma para criar comunidades, fóruns e afins na internet, o Discourse se destaca como um grande nome por vários motivos, dentre eles a flexibilidade de uso, visto que ele pode ser usado de forma totalmente gratuita em sua própria infraestrutura ou como SaaS, utilizando os serviços oferecidos por eles. Neste cenário, vamos mostrar como fazer a instalação em ambiente produtivo. Caso queira ver como montar o ambiente de desenvolvimento, não deixe de comentar.

Pré-requisitos para Instalação

Para uma instalação fácil e sem problemas, não vamos abordar a instalação direta na máquina, mas sim o uso do Docker. Isso nos proporciona maior controle e facilidade durante o uso, e, para isso, vamos precisar de:

  • Domínio
  • Certificado SSL (Opcional)
  • Servidor de e-mail
  • Máquina virtual com pelo menos 1GB (recomendado 2GB)
  • Portas 80 e 443 liberadas no firewall

Também vamos precisar de um domínio pronto para nossa instalação. Caso não tenha, é preciso registrar um, podendo usar o squarespace. No nosso caso, vamos usar comunidade.codeinloop.com.br. Vale destacar isso, pois o Discourse não funciona com IP. Além disso, vamos usar o Let’s Encrypt como certificado SSL; caso possua um certificado próprio, o fluxo é um pouco diferente. Como servidor SMTP para envio de e-mail, vamos usar os serviços gratuitos da Brevo.

Instalação do Discourse

Para nossa instalação, vamos usar uma máquina virtual na Magalu Cloud mas poderia ser em outros lugares, como na Vultr. Não vamos abordar aqui a criação de uma máquina virtual; caso queira ver como fazer isso utilizando Terraform, Crossplane ou outra forma de automatização, deixe nos comentários. Porém, como indicamos nos requisitos, poderíamos usar uma máquina com 1GB de RAM, mas vamos usar 2GB, conforme a imagem abaixo:

Instalando o Docker e Git

Como vamos usar o Ubuntu 22.04, ele já tem todas as dependências necessárias para instalar o Docker. Caso use outro sistema operacional, recomendamos a documentação oficial.

sudo apt install docker.io git -y
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world
Bash

Uma vez que todos os comandos acima forem executados, você deve ver uma tela como esta:

Clonando o projeto Discourse Docker

Como já temos o ambiente pronto, podemos clonar o repositório dentro de /var/discourse, e nossa instalação ficará assim:

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containers
./discourse-setup
Bash

Após o clone, tivemos que ajustar as permissões da pasta containers e, em seguida, iniciar o Discourse CLI, onde ele fará as seguintes perguntas:

  • Hostname: comunidade.codeinloop.com.br
  • E-mail dos administradores separado por vírgula.
  • Servidor SMTP: smtp-relay.brevo.com
  • Porta SMTP: 587
  • Usuário e senha do servidor SMTP.
  • E-mail usado para enviar notificações.
  • E-mail para Let’s Encrypt (opcional)
  • ID da conta MaxMind (opcional)

Caso as informações estejam corretas, basta seguir com Enter ou informar ‘n’ ou Ctrl+C para cancelar a operação:

Essas informações serão gravadas no arquivo containers/app.yml. Preste muita atenção nele, pois é usado para praticamente tudo relacionado à manutenção e parametrização. Ele já é versionado pelo Discourse; porém, sempre faça uma cópia antes de alterar.

O processo de instalação leva em torno de 10 minutos. Ao final, você verá uma tela parecida com esta:

O que indica que já podemos acessar nossa instalação em: comunidade.codeinloop.com.br

Ao seguir por essa tela, será necessário criar uma conta para um dos e-mails informados na etapa anterior, e é por isso que devemos ter um servidor SMTP válido, pois ele enviará o e-mail para validar a criação da conta.

Configuração e Personalização

Agora que já temos ele instalado, teremos um assistente onde vamos iniciar com as primeiras customizações, como o nome da comunidade e outras configurações.

Agora que temos um Discourse funcional, está na hora de personalizar para deixá-lo mais próximo do nosso público. Para isso, podemos fazer personalizações através de plugins, temas, componentes e afins. Caso não tenha ideia de quais plugins instalar, na página de preços eles já dão algumas dicas do que instalar.

Apesar de mostrar que certos plugins estão disponíveis somente para a versão paga, a ideia ali é mais voltada para quem usa o SaaS deles. Como estamos na versão self-hosted, os planos não são levados em consideração. Outra fonte de plugins é o próprio fórum Meta, onde todos os plugins e temas são publicados.

Como instalar plugins no Discourse

Agora que já escolheu os primeiros plugins, vamos seguir com a instalação, que é bem simples. Precisamos saber apenas qual o repositório do GitHub em que ele está. No nosso exemplo, vamos instalar o Discourse Reactions uma vez com o repositório.

Vamos acessar nossa instalação e editar o arquivo containers/app.yml.

sudo -i 
cd /var/discourse
nano containers/app.yml
Bash

E vamos navegar até o final do arquivo, onde encontraremos os hooks. Nele, vamos adicionar o nosso plugin, ficando da seguinte forma:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-reactions.git
YAML

Caso seu plugin esteja em um repositório privado, será necessário configurar uma chave SSH ou simplesmente passar um usuário ou token. Por exemplo:

git clone https://username:[email protected]/username/repository.git
YAML

Após finalizar a edição do arquivo, basta relançar a aplicação, lembrando que durante esse processo há downtime.

cd /var/discourse
./launcher rebuild app
YAML

Durante esse processo, ele irá clonar nosso repositório, compilar tudo o que precisa e deixar o projeto pronto novamente. Portanto, seja paciente, pois essa etapa demora quase o mesmo tempo que a instalação inicial.

Ao final do processo, acesse a administração e vá para a página de plugins -> Instalado. Nela, você verá seu plugin e poderá ativá-lo ou ver suas configurações. Feito isso, podemos ir para um tópico e ver as reações.

Como instalar temas no Discourse

A instalação de componentes e temas é diferente da de plugins. Ela pode ser feita de três formas:

  • Através da Loja,
  • Fazendo upload,
  • Clonando um repositório.

A vantagem é que todas essas opções estão no mesmo lugar. Então, indo em Administração >> Personalizar >> Temas, vamos em ‘Instalar’ e escolher uma das opções. No nosso exemplo, escolhemos clonar um repositório.

Após instalar, devemos ativar o tema, podendo ser por padrão ou dando ao usuário a opção de ativá-lo. Uma vez ativo, podemos ver como ele ficou. Caso tenha dúvidas ou queira fazer mudanças antes de colocar em produção, existe uma opção que possibilita pré-visualizar o tema.

Fazendo Backup do Discourse

Existem duas formas de fazer o backup da sua instalação: via web ou via CLI. Aqui, vamos abordar as duas formas:

Backup via web

Ao acessar Administração >> Conta >> Backups, poderemos ver todos os backups, fazer novos backups e ajustar os parâmetros de backup. Como primeiro passo, vamos ajustar nossas configurações.

Indo na configuração, podemos escolher o tempo de retenção, o local, o máximo de backups, além da frequência. Revise essas informações de acordo com sua política de backup.

Uma vez configurado, fazer o backup é super simples: basta clicar no botão, escolher se deseja incluir todas as mídias e esperar o fim do backup. Para fazer o download do backup, mais uma vez, uma configuração do SMTP se faz necessária, pois será enviado um link para download do arquivo ZIP. Restaurar também é bem simples, porém, é necessário habilitar essa opção nas configurações.

Backup via CLI

Uma vez dentro do servidor, vamos nos posicionar na pasta da instalação:

cd /var/discourse
./launcher enter app
discourse backup
exit
YAML

Uma vez com o backup feito, podemos copiá-lo para outros lugares ou deixá-lo no servidor. Já para restaurar, o processo é mais complexo do que na versão web, então tome cuidado. Primeiro, faça o upload do arquivo que deseja restaurar ou escolha-o, por exemplo:

ls -la /var/discourse/shared/standalone/backups/default/
YAML

Uma vez que escolhemos nosso ponto de restauração, vamos rodar os comandos abaixo:

cd /var/discourse
./launcher enter app
discourse enable_restore
discourse restore comunidade-code-in-loop-2024-08-17-200844-v20240807024301.tar.gz
discourse disable_restore
YAML

Atualizando o Discourse

Quando falamos de atualização, não estamos nos referindo apenas à plataforma e aos plugins, mas também ao sistema operacional e ao Docker. Como este é um tema complexo, podemos fazer um artigo só para isso. Caso queira, deixe nos comentários. No entanto, como ponto básico, vamos mostrar como atualizar via web e CLI, como fizemos com o backup, e sempre recomendamos um backup antes de qualquer atualização.

Atualizado o Discourse via WEB

Em Administração -> Atualizar o Discourse, vamos ver uma página com todos os plugins instalados e as atualizações disponíveis. É importante fazer atualizações regularmente, especialmente quando houver atualização no core do Docker Manager, pois isso evita que sua instalação tenha problemas.

Atualizado o Discourse via cli

Uma vez no servidor, vamos navegar até a pasta e rodar o comando de atualização da seguinte forma:

cd /var/discourse
./launcher rebuild app
YAML

Ao final da execução, sua instalação estará atualizada.

Conclusão

O que achou dessa instalação? Achou que seria mais complexa? Está começando a usar o Discourse? Deixe nos comentários; em breve, devemos fazer um artigo automatizando alguns desses processos.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.