Skip to main content

Servidor Dedicado: Instalação do Mastodon

Este guia foi criado com os seguintes produtos:

(Os detalhes podem variar com produtos de diferentes fornecedores, mas os conceitos principais permanecem os mesmos)

Introdução

Mastodon é um software livre e open-source para rodar serviços de redes sociais auto-hospedadas.

Ele possui recursos de microblogging similares ao serviço X (antigo Twitter), oferecidos por uma grande quantidade de nós independentes, conhecidos como instâncias,
cada uma com seu próprio código de conduta, termos de serviço, política de privacidade, opções de privacidade e políticas de moderação.

informação

Este guia foca na instalação em uma distro baseada em Debian. Exemplos são Debian e Ubuntu. Este guia varia dependendo do sistema operacional que você está usando.

Requisitos do sistema

Se você quer configurar uma instância Mastodon no seu servidor, precisa atender alguns pré-requisitos:

  • Domínio
  • Servidor Linux
  • Servidor de email

Preparando seu sistema

É recomendado que você desative o login por senha no SSH antes, pois usar login por senha em servidores acessíveis pela internet é um risco de segurança.
Você pode fazer isso no painel web do seu servidor em Informação -> Acesso & Segurança -> Desativar Login por Senha

Depois disso, atualize seus pacotes com o comando:

apt update && apt upgrade -y

Agora você precisa instalar as dependências do Mastodon:

# Repositórios do sistema
apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates
# Node.JS
curl -sL https://deb.nodesource.com/setup_16.x | bash -
# PostgreSQL
wget -O /usr/share/keyrings/postgresql.asc https://www.postgresql.org/media/keys/ACCC4CF8.asc
echo "deb [signed-by=/usr/share/keyrings/postgresql.asc] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/postgresql.list

Depois de instalar as dependências do Mastodon, podemos instalar os pacotes necessários do sistema. Faça isso com os dois comandos abaixo:

apt update
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 libgdbm-dev \
nginx redis-server redis-tools postgresql postgresql-contrib \
certbot python3-certbot-nginx libidn11-dev libicu-dev libjemalloc-dev

Deixe os pacotes instalarem, isso pode levar um tempo. Depois, configure o yarn, que é um gerenciador de pacotes para o Node.JS instalado anteriormente:

corepack enable
yarn set version stable

Instalando Ruby

Vamos criar um usuário separado, pois facilita o gerenciamento das versões do Ruby. Primeiro crie um usuário chamado mastodon, com login desativado. Depois, troque para o usuário mastodon com os comandos:

# Você pode deixar os campos vazios
adduser --disabled-login mastodon
su - mastodon

Agora instalamos o gerenciador Ruby rbenv, que facilita o gerenciamento das versões do Ruby. Instale com os comandos:

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

Depois de rodar esses comandos, instale o Ruby e o bundler com:

RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.0.3
rbenv global 3.0.3
gem install bundler --no-document

Isso pode levar um tempo, então aproveite para pegar um chá ou café enquanto espera. Depois disso, podemos voltar para o usuário root com o comando exit.

Configurando o PostgreSQL

Mastodon usa PostgreSQL como sistema de banco de dados. Configure com o seguinte:

sudo -u postgres psql

Dentro do prompt do PostgreSQL, digite:

CREATE USER mastodon CREATEDB;
\q

Configurando o Mastodon

Agora volte para o usuário mastodon:

su - mastodon

Use o git para baixar a versão mais recente do Mastodon com esses comandos:

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)

Agora instale as últimas dependências para Ruby e Javascript:

bundle config deployment 'true'
bundle config without 'development test'
bundle install -j$(getconf _NPROCESSORS_ONLN)
yarn install --pure-lockfile

Crie o arquivo de configuração do Mastodon com:

RAILS_ENV=production bundle exec rake mastodon:setup
informação

Se a configuração do banco de dados falhar, faça login no postgres com sudo -u postgres psql e siga esta documentação:

https://gist.github.com/amolkhanorkar/8706915

Depois, volte para o usuário root com exit.

Configurando o servidor web

Agora vem a parte mais complexa. Você precisa configurar seu servidor web. Primeiro, crie um registro A e/ou AAAA no seu DNS apontando diretamente para seu servidor. Alternativamente, pode apontar o registro raiz para seu servidor.

Depois, use os dois comandos abaixo para copiar e ativar a configuração do servidor web do Mastodon:

cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon

Edite o arquivo /etc/nginx/sites-available/mastodon com um editor de texto como vim ou nano e troque example.com pelo seu domínio.
Agora, adquira um certificado SSL para seu domínio facilmente com:

certbot --nginx -d <seu domínio>

Digite seu domínio. Você será solicitado a fornecer algumas informações. No final, será perguntado se deseja redirecionar automaticamente requisições http para https — recomendamos que ative essa opção.

Criando um serviço Mastodon

Por fim, vamos criar um serviço do sistema para o Mastodon. É bem simples.
Copie a configuração padrão do serviço para o diretório de serviços da sua distribuição:

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

Agora habilite e inicie os novos serviços com:

systemctl daemon-reload
systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming

Após um reboot, sua configuração estará pronta. Divirta-se com sua instância!