Pesquisa de site

Instale o Mastodon no Ubuntu 20.04/18.04 com o certificado SSL Let's Encrypt


Mastodon é um servidor de rede social auto-hospedado, gratuito e de código aberto, licenciado sob AGPLv3. Mastodon é semelhante em recursos ao Twitter e permite publicar links, textos, vídeos e fotos e compartilhar na comunidade de microblogging globalmente interconectada. Nesta postagem, discutiremos como instalar o Mastodon no Ubuntu 20.04/18.04 Linux protegido com certificado SSL Let’s Encrypt.

O Mastodon possui várias dependências que devem ser instaladas. Eles incluem Ruby, PostgreSQL, Node.js, Yarn, Redis, Nginx e.t.c. Nossas etapas discutirão todas as etapas necessárias para ter um Mastodon em execução no Ubuntu 20.04/18.04 LTS.

Principais recursos do Mastodonte

  • Sem dependência de fornecedor: Totalmente interoperável com qualquer plataforma compatível
  • Atualizações da linha do tempo cronológica em tempo real: veja as atualizações das pessoas que você segue aparecerem em tempo real na interface do usuário por meio de WebSockets
  • Ferramentas de segurança e moderação: postagens privadas, contas bloqueadas, filtragem de frases, silenciamento, bloqueio e todos os tipos de outros recursos, junto com um sistema de relatórios e moderação.
  • Anexos de mídia como imagens e vídeos curtos: carregue e visualize imagens e vídeos WebM/MP4 anexados às atualizações. Vídeos sem trilha de áudio são tratados como GIFs; vídeos normais ficam em loop – como vinhas!
  • OAuth2 e uma API REST simples: o Mastodon atua como um provedor OAuth2 para que aplicativos de terceiros possam usar as APIs REST e Streaming, resultando em um ecossistema de aplicativos rico com muitas opções!

Requisitos de configuração

Os seguintes softwares são necessários ao configurar o Mastodon no Ubuntu 20.04/18.04 Linux.

  • PostgreSQL 9.5+
  • Redes
  • Ruby 2.4+
  • Node.js 8+

Presumimos que você também tenha o seguinte pronto.

  • Uma máquina Ubuntu 20.04/18.04 em execução
  • Um nome de domínio (ou um subdomínio) para o servidor Mastodon, por exemplo, example.com ou social.example.com
  • Um serviço de entrega de e-mail ou outro servidor SMTP para usar em notificações.

Etapa 1: atualizar o sistema

Certifique-se de que seu servidor esteja atualizado:

sudo apt -y update && sudo apt -y upgrade
sudo reboot

Etapa 2: instalar Node.js e Yarn

Instale o Node.js.

curl -sL https://deb.nodesource.com/setup_8.x | sudo bash -
sudo apt-get install -y nodejs

Confirme a instalação bem-sucedida verificando a versão:

$ nodejs --version
v8.10.0

Instale o fio:

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt -y install yarn

Etapa 3: instale outros pacotes de dependência

Existem vários pacotes de dependência do sistema necessários para executar o Mastodon no Ubuntu 20.04/18.04. Vamos garantir que esses pacotes sejam instalados localmente.

sudo apt install -y imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev nginx redis-server redis-tools certbot python-certbot-nginx yarn libidn11-dev libicu-dev libjemalloc-dev

Passo 4: Instale Ruby

A maneira preferida de executar Ruby é com rbenv, pois permite gerenciar múltiplas versões facilmente. Criaremos um usuário Mastodon para ser usado nessas operações.

sudo adduser --disabled-login mastodon
sudo su - mastodon

Em seguida, instale rbenv e rbenv-build:

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec bash
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

Feito isso, podemos instalar a versão correta do Ruby:

RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 2.6.5
rbenv global 2.6.5

A versão padrão do gem fornecida com ruby_2.6.0 é incompatível com o bundler mais recente, então precisamos atualizar o gem e instalar o bundler.

gem update --system
gem install bundler --no-document
exit

Etapa 5: Instale o servidor de banco de dados PostgreSQL

Use nosso guia de instalação do PostgreSQL:

Instale o banco de dados PostgreSQL Ubuntu

Criando um usuário:

sudo -u postgres psql
CREATE USER mastodon CREATEDB;
\q

Etapa 6: configurando o Mastodon

É hora de baixar o código do Mastodon. Primeiro mude de root ou sua conta de usuário para o usuário mastodon:

sudo apt -y install git
sudo su - mastodon

Clone o código do Mastodon:

git clone https://github.com/tootsuite/mastodon.git live && cd live
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

Instalando as últimas dependências:

gem install bundler:1.17.3
bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test
yarn install --pure-lockfile

Execute o assistente interativo para gerar uma configuração:

RAILS_ENV=production bundle exec rake mastodon:setup

Preencha as informações necessárias:

/home/mastodon/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/bundler-1.17.3/lib/bundler/rubygems_integration.rb:200: warning: constant Gem::ConfigMap is deprecated
Your instance is identified by its domain name. Changing it afterward will break things.
Domain name: example.com

Single user mode disables registrations and redirects the landing page to your public profile.
Do you want to enable single user mode? yes

Are you using Docker to run Mastodon? no

PostgreSQL host: /var/run/postgresql
PostgreSQL port: 5432
Name of PostgreSQL database: mastodon_production
Name of PostgreSQL user: mastodon
Password of PostgreSQL user: 
Database configuration works! 🎆

Redis host: localhost
Redis port: 6379
Redis password: 
Redis configuration works! 🎆

Do you want to store uploaded files on the cloud? No

Do you want to send e-mails from localhost? yes
E-mail address to send e-mails "from": Mastodon <[email >
Send a test e-mail with this configuration right now? no

This configuration will be written to .env.production
Save configuration? Yes

Concorde em compilar ativos quando solicitado:

Done!

The final step is compiling CSS/JS assets.
This may take a while and consume a lot of RAM.
Compile the assets now? Yes
Running `RAILS_ENV=production rails assets:precompile` ...


/home/mastodon/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/bundler-1.17.3/lib/bundler/rubygems_integration.rb:200: warning: constant Gem::ConfigMap is deprecated
/home/mastodon/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/bundler-1.17.3/lib/bundler/rubygems_integration.rb:200: warning: constant Gem::ConfigMap is deprecated
/home/mastodon/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/bundler-1.17.3/lib/bundler/rubygems_integration.rb:200: warning: constant Gem::ConfigMap is deprecated
yarn install v1.21.1
[1/6] Validating package.json...
[2/6] Resolving packages...
[3/6] Fetching packages...
info [email : The platform "linux" is incompatible with this module.
info "[email " is an optional dependency and failed compatibility check. Excluding it from installation.
info [email : The platform "linux" is incompatible with this module.
info "[email " is an optional dependency and failed compatibility check. Excluding it from installation.
[4/6] Linking dependencies...
warning " > [email " has incorrect peer dependency "react-redux@^3.0.0 || ^4.0.0 || ^5.0.0".
[5/6] Building fresh packages...
[6/6] Cleaning modules...
Done in 12.60s.
.....

Concorde em criar uma conta de administrador

Done!

All done! You can now power on the Mastodon server 🐘

Do you want to create an admin user straight away? Yes
Username: admin
E-mail: [email 
You can login with the password: 1b417e401f44c3db5d30f2f2f2a2328b
You can change your password once you login.

Atualizar fio:

yarn upgrade

Etapa 7: Configurando o nginx para Mastodon

Usaremos o Nginx como proxy reverso para nosso aplicativo Mastodon. Verifique se o serviço nginx está em execução:

$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-01-07 08:25:31 UTC; 7h ago
     Docs: man:nginx(8)
 Main PID: 14626 (nginx)
    Tasks: 2 (limit: 2361)
   CGroup: /system.slice/nginx.service
           ├─14626 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─14629 nginx: worker process

Agora copie o modelo de configuração para nginx do diretório Mastodon:

sudo cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon.conf

Edite o arquivo para definir o nome DNS correto para seu aplicativo:

sudo vim /etc/nginx/sites-available/mastodon.conf

Feito isso, ative a configuração:

sudo ln -s /etc/nginx/sites-available/mastodon.conf /etc/nginx/sites-enabled/mastodon.conf
sudo systemctl restart nginx

Se você tiver o firewall ufw em execução, permita a porta de serviço:

sudo ufw allow 'Nginx Full'

Usando o certificado SSL Let's Encrypt

Se você quiser usar um certificado Let’s Encrypt, execute o comando abaixo:

sudo certbot --nginx -d example.com

Exemplo de saída:

$ sudo certbot --nginx -d social.computingforgeeks.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for social.computingforgeeks.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/mastodon.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/mastodon.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled
https://social.computingforgeeks.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=social.computingforgeeks.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/social.computingforgeeks.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/social.computingforgeeks.com/privkey.pem
   Your cert will expire on 2020-04-06. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Substituindo example.com pelo seu nome de domínio real para o aplicativo Mastodon.

Etapa 8: Configurando serviços systemd

Copie os modelos de serviço systemd do diretório Mastodon:

sudo cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/

Em seguida, edite os arquivos para garantir que o nome de usuário e os caminhos estejam corretos:

    /etc/systemd/system/mastodon-web.service
    /etc/systemd/system/mastodon-sidekiq.service
    /etc/systemd/system/mastodon-streaming.service

Finalmente, inicie e habilite os novos serviços do systemd:

sudo systemctl daemon-reload
for i in web sidekiq streaming; do sudo systemctl enable mastodon-$i && sudo systemctl restart mastodon-$i; done

Verifique o status de todos os serviços:

for i in web sidekiq streaming; do systemctl status mastodon-$i; done

Etapa 9: acesse o painel do Mastodon

Agora visite seu domínio no navegador para acessar o painel do Mastodon.

Clique no botão de login para fazer login. Usarei o endereço de e-mail do nome de usuário admin e a senha gerada anteriormente.

Siga o tutorial inicial para concluir a configuração.

Agora você deve ser saudado com um incrível painel do Mastodon.

Viva!, Você instalou o Mastodon com sucesso no Ubuntu 20.04/18.04 Linux.

Referência:

  • Documentação do mastodonte

Artigos relacionados: