Инструменты пользователя

Инструменты сайта


mastodon

Установка Mastodon (основное)

Ниже приведена инструкция по развёртыванию сервера Mastodon под Ubuntu 18.04 ( адаптированный перевод официальной инструкции (CC BY-SA 4.0))

Предварительная настройка сервера (рекомендуется)

Запретите входить по ssh с паролем (оставим только вход по ключам)

Для начала убедитесь, что вы уже входите на сервер не по паролю, а с использованием ключа, инпче слепое следование нижеследующим инструкциям не позволит вам вернуться на собственный сервер. Многие хостеры позволяют загрузку открытых ключей и автоматическую настройку рутового входа по ключу для новых виртуалок.

В файле /etc/ssh/sshd_config найдите и отредактируйте строку PasswordAuthentication. Раскомментируйте её и поставьте значение no. После внесённых изменений перезапустите sshd:

systemctl restart ssh

Обновите систему

apt update && apt upgrade -y

Установите Fail2ban для блокировани попыток вломиться

apt install fail2ban

Создайте или отредактируйте файл /etc/fail2ban/jail.local, чтоб его содержимое выглядело так:

[DEFAULT]
destemail = your@email.here
sendername = Fail2Ban

[sshd]
enabled = true
port = 22

[sshd-ddos]
enabled = true
port = 22

… и перезапустите fail2ban:

systemctl restart fail2ban

Теперь настройте брандмауэр

Для начала нужно установить iptables-persistent для сохранения правил в случае презагрузки. Во время установки вас спросят, сохранять ли текущие правила. Откажитесь.

apt install -y iptables-persistent

Создайте или отредактируйте файл /etc/iptables/rules.v4, приведя его к такому содержимому:

*filter

# Разрешим локальный траффик, запретив работать по 127.0.0.0/8 с не-loopback интерфейса
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

#  Разрешим входящие пакеты от уже установленных соединений
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#  Исходящий траффик - разрешаем
-A OUTPUT -j ACCEPT

#  Разрешим HTTP и  HTTPS
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#  ... и SSH
#  Заметьте, -dport должен совпадать с портом, указанным в sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

#  Разрешим пинговать
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

#  Включим логгирование запретов
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

#  И заблокируем всё, что не разрешено.
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

Благодаря iptables-persistent, эта конфигурация будет автоматически применяться в случае перезагрузки. Но так как мы не перезагружались, применим её вручную:

iptables-restore < /etc/iptables/rules.v4

Подготовка к установке

Нам потребуется:

  • Машина под управленим Ubuntu 18.04 с рутовым доступом
  • Доменное имя для нашего сервера (например example.com)
  • Почтовый сервис (или сторонний smtp-сервер)

Команды будем выполнять от рута, так что, если вы ещё под обычным пользователем, повысьте привилегии: sudo -i

Репозитории

Для начала нам нужен curl:

apt install -y curl

Node.js

curl -sL https://deb.nodesource.com/setup_8.x | bash -

Yarn

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

И системные пакеты

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 libgdbm5 libgdbm-dev \
  nginx redis-server redis-tools postgresql postgresql-contrib \
  certbot python-certbot-nginx yarn libidn11-dev libicu-dev libjemalloc-dev
 

Теперь установим Ruby

Для более простого и удобного управления версиями воспользуемся rbenv, и выделим для этого отдельного системного пользователя:

adduser --disabled-login mastodon

Переключимся в него:

su - mastodon

И установим rbenv и 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

Теперь мы можем установить корректную версию Ruby:

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

Версия gem по умолчанию - 2.6.0, она несовместима с новым бандлером, так что нам потребуется обновиться:

gem update --system

gem install bundler --no-document

Теперь вернёмся под рута:

exit

Установка

Установка PostgreSQL

Настройка быстродействия

Для оптимального быстродействия можно воспользоваться PgTune, сгенерировав подходящий конфиг и поменяв соответствующие значения в /etc/postgresql/9.6/main/postgresql.conf, после чего перезапустить PostgreSQL командой systemctl restart postgresql

Создание пользователя

Нужно создать пользователя в СУБД PostgreSQL, от которого будет работать Mastodon. Лучше всего в данном случае использовать аутентификацию «ident» силами PostgreSQL, такой пользователь не имееет отдельного пароля и может быть доступен из-под системного пользователя с тем же именем.

Откройте консоль СУБД: sudo -u postgres psql

В ней введите:

CREATE USER mastodon CREATEDB;
\q

Всё!

Установка Mastodon

Настало время скачать исходники Mastodon. Переключитесь под пользователя mastodon:

su - mastodon

Получение кода

Воспользуемся git для загрузки последнего стабильного релиза:

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)

Установка зависимостей

Теперь нужно установить зависимости Ruby и JavaScript:

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

Создание конфигурации

Запустите интерактивный мастер установки:

RAILS_ENV=production bundle exec rake mastodon:setup

Он сделает следующее:

  • Создаст файл конфигурации
  • Запустит прекомпиляцию ассетов
  • Создаст схему БД

Конфигурация хранится в файле .env.production. Вы можете подкорректировать её под свои нужды. Подробности есть в официальной документации..

Здесь мы пока закончили, возвращаемся под рута:

exit

Установка nginx

Скопируйте шаблон конфигурации для nginx из директории 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

После этого отредактируйте /etc/nginx/sites-available/mastodon и замените example.com на своё доменное имя. Перезагрузите nginx для применения конфигурации:

systemctl reload nginx

Получение сертификата

Проще всего сделать это с помощью Let's Encrypt:

 certbot --nginx -d example.com

Утилита certbot выпустит сертификат, автоматически обновит /etc/nginx/sites-available/mastodon для использования нового сертификата, и перезагрузит nginx для применения изменений.

В этот момент вы можете открыть свою инстанцию в браузере и насладиться зрелищем слоника, тыкающего в страницу ошибки на экране. Это оттого, что мы не запустили все процессы Mastodon.

Настройка сервисов systemd

Скопируйте шаблоны сервисов из директирии Mastodon:

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

Теперь проверьте, и при необходимости отредактируйте файлы

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

на предмет соответствия путей и имён пользователей.

И, наконец, можно включить и запустить сервисы:

systemctl start mastodon-web mastodon-sidekiq mastodon-streaming
systemctl enable mastodon-*

Ура! Это всё, первоначальная установка Mastodon завершена.

Настройка

Для конфигурирования mastodon используются переменные окружения. Они могут читаться из текстового файла .env.production в директории mastodon, но их всегда можно поменять для определённого процесса. Например, сервис systemd может читать переменные окружения из файла, указанного в параметре EnvironmentFile, или из отдельно определённых в Environment переменных, что позволяет иметь разные параметры конфигурации для различных сервисов. Также переменные можно указать при вызове mastodon из командной строки.

Список параметров, доступных для настройки, можно посмотреть здесь .

Действия после установки

Использование командной строки

Интерфейс командной строки для Mastodon — исполняемый файл tootctl, лежащий в поддиректории bin директории установки Mastodon (в стандартном случае - /home/mastodon/live/bin). При запусе обязательно должна быть указана переменная окружения RAILS_ENV (для продуктовой среды — RAILS_ENV=production). Если вы не собираетесь использовать другие окружения (development, testing, staging), можете добавить объявление этой переменной, например в .bashrc пользователя mastodon:

echo «export RAILS_ENV=production» » ~/.bashrc

В этом случае вам не придётся обявлять её при каждом вызове tootctl, иначе же нужно будет задавать её каждый раз примерно так:

cd /home/mastodon/live
RAILS_ENV=production bin/tootctl help

Создание админского аккаунта

В браузере

После создания нового аккаунта через браузер вам всё равно потребуется консоль. Например, если вы завели аккаунт alice, выполните от пользователя mastodon следующую комманду:

RAILS_ENV=production bin/tootctl accounts modify alice --role admin

Из командной строки

RAILS_ENV=production bin/tootctl accounts create \
  alice \
  --email alice@example.com \
  --confirmed \
  --role admin

Сгенерированный пароль будет показан вам в терминале.

Заполнение информации о сервере

Залогиньтесь через браузер и нажмите шестерёнку слева вверху. Далее в меню «Администрирование → Настройки сайта» заполните информацию о сервере:

Строка Значение
Введите имя пользователя Ссылка на этот аккаунт будет указана в описании сервера в графе «Администратор»
Введите публичный e-mail По этому почтовому адресу с вами смогут связаться люди, не зарегистрированные на сервере, либо потерявшие аккаунт
Краткое описание узла Для чего и для кого создан ваш сервер? Отличается ли он от остальных?
Описание сайта Можно указать любую информацию, например правила поведения на сервере
mastodon.txt · Последние изменения: 2019/06/24 15:40 — admin