Mastodon
Обновлено 2 августа 2021
- Подготовка LXC-контейнера
- Установка и настройка PostgreSQL
- Установка Mastodon
- Получение сертификата Let's Encrypt
- Установка и настройка Nginx
- Запуск Mastadon
- Обновление Mastodon
- Обновление Git репозитория
- Обновление Ruby
- Обновление Node.js
- Обновите зависимости Ruby и Node.js
- Обновление схемы базы данных
- Предварительная компиляция обновленных ресурсов
- Очистка кэша
- Дополнительные действия при обновлении
- Восстановление Ruby окружения после обновления системных пакетов
- Перезапуск Mastodon
Mastodon - это бесплатная децентрализованная платформа микроблогов, входящая в федеративную сеть.
Подготовка LXC-контейнера
Мы рекомендуем выполнить установку Mastodon в отдельном контейнере, настроив его согласно инструкции.
Установка и настройка PostgreSQL
Установите и настройте PostgreSQL согласно руководству.
Настройте авторизацию методом peer только для локальных подключений:
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: #host all all 127.0.0.1/32 trust # IPv6 local connections: #host all all ::1/128 trust # Allow replication connections from localhost, by a user with the # replication privilege. #local replication all trust #host replication all 127.0.0.1/32 trust #host replication all ::1/128 trust
Создайте пользователя mastodon с правом создания базы данных:
psql (12.2) Type "help" for help. postgres=# CREATE USER mastodon CREATEDB; CREATE ROLE postgres=# \q
Установка Mastodon
Установка системных пакетов
Установите вспомогательное программное обеспечение:
emerge -a dev-db/redis dev-libs/icu dev-libs/protobuf dev-python/nodeenv dev-util/pkgconfig media-gfx/imagemagick media-video/ffmpeg net-dns/libidn
Запуск Redis
Запустите Redis и добавьте его в автозагрузку:
/etc/init.d/redis start
rc-update add redis
Создание системного пользователя
Создайте системного пользователя mastodon:
mkdir -p /var/calculate/www
useradd -d /var/calculate/www/mastodon mastodon
Установка и настройка rbenv и rbenv-build
Установите и настройте rbenv и rbenv-build в директорию пользователя:
su mastodon
cd
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 2.7.2:
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 2.7.2
rbenv global 2.7.2
Версия по умолчанию gem, связанная с ruby_2.7.2, несовместима с последней версией bundler. Поэтому обновите gem:
gem update --system
И установите bundler:
gem install bundler -f --no-document
Установка Node.js и Yarn
Установите Node.js и Yarn в директорию пользователя:
nodeenv --node=12.22.4 .node-12
ln -sfT .node-12 .node-live
source .node-live/bin/activate
npm install -g yarn
echo 'source ~/.node-live/bin/activate' >> ~/.bashrc
Загрузка репозитория Git с 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)
Установка зависимостей Ruby и Node.js
Установите Ruby-зависимости:
bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test
Установите Node.js-зависимости:
yarn install --pure-lockfile
Установка и настройка Mastodon
Сгенерируйте конфигурацию для mastodon.example.org, выполнив команду:
Your instance is identified by its domain name. Changing it afterward will break things. Domain name: mastodon.example.org Single user mode disables registrations and redirects the landing page to your public profile. Do you want to enable single user mode? No 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? No SMTP server: mail.example.org SMTP port: 465 SMTP username: SMTP password: SMTP authentication: starttls SMTP OpenSSL verify mode: none E-mail address to send e-mails "from": Mastodon <notifications@mastodon.example.org> Send a test e-mail with this configuration right now? Yes Send test e-mail to: admin@example.org This configuration will be written to .env.production Save configuration? Yes Now that configuration is saved, the database schema must be loaded. If the database already exists, this will erase its contents. Prepare the database now? Yes Running `RAILS_ENV=production rails db:setup` ... Created database 'mastodon_production' ... 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` ... yarn install v1.15.2 ... 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: admin@example.org You can login with the password: e3b316f78cbc2ec0bde5118c68414d73 You can change your password once you login.
Завершите пользовательский сеанс:
exit
Получение сертификата Let's Encrypt
Получите сертификат домена mastodon.example.org для Nginx согласно руководству.
Установка и настройка Nginx
Установите и настройте веб-сервер Nginx в качестве обратного прокси согласно руководству.
Скопируйте пример настройки Nginx для Mastodon:
cp /var/calculate/www/mastodon/live/dist/nginx.conf /etc/nginx/sites-enabled/mastodon.conf
Укажите имя сервера mastodon.example.org и пути:
server { listen 80; listen [::]:80; server_name mastodon.example.org; root /var/calculate/www/mastodon/live/public; location /.well-known/acme-challenge/ { allow all; } location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name mastodon.example.org; # Uncomment these lines once you acquire a certificate: ssl_certificate /etc/letsencrypt/live/mastodon.example.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mastodon.example.org/privkey.pem; ... root /var/calculate/www/mastodon/live/public; ... }
Запуск Mastadon
Создайте сценарии OpenRC для управления сервисами:
Сценарий запуска Mastodon Web:
#!/sbin/openrc-run name="Mastodon Web daemon" description="" pidfile=/run/mastodon-web.pid extra_commands="reload" command_user=mastodon output_log=/var/log/mastodon-web.log error_log=/var/log/mastodon-web.log directory=/var/calculate/www/mastodon/live start_stop_daemon_args="-e RAILS_ENV=production -e PORT=3000" command=/var/calculate/www/mastodon/.rbenv/shims/bundle command_args="exec puma -C config/puma.rb" command_background=true depend() { use postgresql net redis } start_pre() { checkpath -f -o mastodon -m 0600 /var/log/mastodon-web.log } reload() { einfo "Reload $name" kill -USR1 $(cat $pidfile) }
Сценарий запуска Mastodon Streaming:
#!/sbin/openrc-run name="Mastodon streaming daemon" description="" pidfile=/run/mastodon-streaming.pid command_user=mastodon output_log=/var/log/mastodon-streaming.log error_log=/var/log/mastodon-streaming.log directory=/var/calculate/www/mastodon/live start_stop_daemon_args="-e NODE_ENV=production -e PORT=4000 -e STREAMING_CLUSTER_NUM=1" command=/var/calculate/www/mastodon/.node-live/bin/node command_args="./streaming" command_background=true depend() { use postgresql net redis } start_pre() { checkpath -f -o mastodon -m 0600 /var/log/mastodon-streaming.log }
Сценарий запуска Mastodon Sidekiq:
#!/sbin/openrc-run name="Mastodon Sidekiq daemon" description="" pidfile=/run/mastodon-sidekiq.pid command_user=mastodon output_log=/var/log/mastodon-sidekiq.log error_log=/var/log/mastodon-sidekiq.log directory=/var/calculate/www/mastodon/live start_stop_daemon_args="-e RAILS_ENV=production -e DB_POOL=25 -e MALLOC_ARENA_MAX=2" command=/var/calculate/www/mastodon/.rbenv/shims/bundle command_args="exec sidekiq -c 25" command_background=true depend() { use postgresql net redis } start_pre() { checkpath -f -o mastodon -m 0600 /var/log/mastodon-sidekiq.log }
Установите права на запуск сервисов Mastodon:
chmod 0755 /etc/init.d/mastodon-*
Запустите сервисы Mastodon:
/etc/init.d/mastodon-web start
/etc/init.d/mastodon-streaming start
/etc/init.d/mastodon-sidekiq start
Добавьте сервисы Mastodon в автозагрузку:
rc-update add mastodon-web
rc-update add mastodon-streaming
rc-update add mastodon-sidekiq
Обновление Mastodon
Обновление Git репозитория
Выполните обновление Git репозитория с исходным кодом Mastodon:
su - mastodon
cd ~/live
git fetch --tags
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
Проверьте, что версия исходного кода проекта изменилась:
HEAD отделён на v2.8.0
нечего коммитить, нет изменений в рабочем каталоге
Обновление Ruby
Актуальная версия Ruby, используямая Mastodon - 2.7.2. Если ваша версия Ruby меньше, то её необходимо обновить.
Выполните вход в пользовательский сеанс:
su - mastodon
Обновите окружение для управления версиями Ruby:
cd ~/.rbenv && git pull
cd ~/.rbenv/plugins/ruby-build && git pull
cd
Установите необходимую версию Ruby 2.7.2:
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 2.7.2
rbenv global 2.7.2
Версия по умолчанию gem, связанная с ruby_2.7.2, несовместима с последней версией bundler. Поэтому обновите gem:
gem update --system
И установите bundler:
gem install bundler -f --no-document
Перейдите в каталог приложения Mastodon и убедитесь, что он будет использовать версию 2.7.2:
cd ~/live && cat .ruby-version
2.7.2
Для обновления Ruby-зависимостей выполните:
bundle install --deployment --without development test
Завершите пользовательский сеанс:
exit
Обновление Node.js
При обновлении Mastodon с версии ниже 3.4 убедитесь, что используемый Node.js версии не ниже 12:
v12.22.4
Если версия ниже 12, то установите версию 12.22.4 в новое окружение .node-12
и сделайте её текущей:
nodeenv --node=12.22.4 .node-12
ln -sfT .node-12 .node-live
Если вы настраивали Mastodon по предыдущей версии руководства, то исправьте в скриптах /var/calculate/www/mastodon и /etc/init.d/mastodon-streaming .node-8 на .node-live.
Обновите зависимости Ruby и Node.js
Вам может потребоваться обновить Ruby и Node.js после обновления до новой версии Mastodon. В вышеупомянутых примечаниях к выпуску будет указано, нужно ли вам делать оставшуюся часть этого раздела.
Для обновления Ruby-зависимостей выполните:
bundle install --deployment --without development test
Для обновления Node.js-зависимостей выполните:
yarn install --pure-lockfile
Обновление схемы базы данных
Выполняйте обновление схемы базы данных при каждом обновлении до новой версии Mastodon. Это безопасно выполнять каждый раз, так как в случае отсутствия новой схемы обновление будет пропущено.
Для миграции базы данных выполните:
RAILS_ENV=production bundle exec rails db:migrate
Предварительная компиляция обновленных ресурсов
Возможно, вам придется предварительно скомпилировать обновленные ресурсы после обновления до новой версии Mastodon. В вышеупомянутых примечаниях к выпуску будет указано, нужно ли вам делать оставшуюся часть этого раздела.
Для предварительной компиляции выполните:
RAILS_ENV=production bundle exec rails assets:precompile
Предупреждение
Прекомпилятор ресурсов (Webpacker) может занимать значительное количество ресурсов, особенно оперативной памяти. Если вы обнаружите, что на вашем сервере не хватает оперативной памяти при выполнении предварительной компиляции, вы можете остановить службы Mastodon перед запуском предварительной компиляции.
Очистка кэша
Выполните очистку кэша:
RAILS_ENV=production bin/tootctl cache clear
Дополнительные действия при обновлении
Примечания к выпуску могут содержать специальные инструкции с отметкой Non-Docker, которые вам могут понадобиться при обновлении для любого нового выпуска Mastodon.
Завершите пользовательский сеанс:
exit
Восстановление Ruby окружения после обновления системных пакетов
Выполните вход в пользовательский сеанс:
su - mastodon
cd ~/live
Переустановите пакеты окружения Ruby:
bundle pristine
bundle install --deployment --without development test
Завершите пользовательский сеанс:
exit
Перезапуск Mastodon
Mastodon работает в памяти, поэтому вам нужно будет перезапустить его, чтобы любое из предыдущих обновлений вступило в силу. Для перезапуска выполните:
/etc/init.d/mastodon-web restart
/etc/init.d/mastodon-streaming restart
/etc/init.d/mastodon-sidekiq restart