Поиск по сайту:

Как установить социальную сеть Mastodon на Ubuntu 22.04


На этой странице

  1. Предпосылки
  2. Начало работы
  3. Установите Node.js
  4. Установка и настройка PostgreSQL
  5. Установить Руби
  6. Установка и настройка Mastodon
  7. Создание служебного файла Systemd для Mastodon
  8. Настройка Nginx в качестве обратного прокси-сервера
  9. Защитите Mastodon с помощью Lets Encrypt SSL
  10. Доступ к веб-интерфейсу Mastodon

Mastodon — это бесплатное программное обеспечение с открытым исходным кодом для запуска собственных социальных сетей. Он предлагает функции микроблогов, которые позволяют вам следить за другими пользователями и публиковать сообщения и изображения с Mastodon. Он написан на Ruby и JavaScript и поддерживает публикации аудио, видео и изображений, описания специальных возможностей, опросы, предупреждения о содержании, анимированные аватары, настраиваемые смайлики и многое другое. Mastodon предлагает приложение для различных платформ, таких как Android и iOS.

В этом руководстве мы покажем вам, как установить Mastodon на Ubuntu 22.04.

Обновление: руководство было обновлено и успешно повторно протестировано 30 ноября 2022 г., чтобы прояснить установку и исправить проблемы, упомянутые в комментариях, поскольку некоторые версии программного обеспечения изменились с момента написания руководства.

Существует также альтернативное руководство по установке Mastodon на Ubuntu 22.04, доступное здесь, которое использует Docker для установки Mastodon на Ubuntu.

Предпосылки

  • Сервер под управлением Ubuntu 22.04.
  • На вашем сервере настроен пароль root.
  • Действительное доменное имя указывает на IP-адрес вашего сервера.

Начиная

Во-первых, рекомендуется обновить системные пакеты до последней версии. Вы можете сделать это, выполнив следующую команду:

apt update -y
apt upgrade -y

После обновления вашей системы вам нужно будет установить некоторые зависимости, необходимые для Mastodon. Вы можете установить их все с помощью следующей команды:

apt install git software-properties-common make apt-transport-https redis-server optipng pngquant jhead jpegoptim gifsicle imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file g++ libprotobuf-dev protobuf-compiler pkg-config gcc autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev libidn11-dev libicu-dev libjemalloc-dev -y

После установки всех зависимостей можно переходить к следующему шагу.

Установите Node.js

Mastodon требует, чтобы Node.js был установлен в вашей системе. Чтобы установить Node.js, добавьте репозиторий Node.js на свой сервер с помощью следующей команды:

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

После добавления репозитория установите Node.js версии 16 с помощью следующей команды:

apt install nodejs -y

Затем загрузите и добавьте ключ Yarns GPG и включите репозиторий с помощью следующей команды:

curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | tee /etc/apt/sources.list.d/yarn.list

После добавления обновите репозиторий и установите Yarn с помощью следующих команд:

apt update -y
apt -y install yarn

Как только вы закончите, вы можете перейти к следующему шагу.

Установите и настройте PostgreSQL.

Mastodon использует PostgreSQL в качестве базы данных. Вы можете установить последнюю версию PostgreSQL с помощью следующей команды:

apt install -y postgresql postgresql-contrib

После установки PostgreSQL запустите службу PostgreSQL с помощью следующей команды:

systemctl start postgresql

Затем войдите в оболочку PostgreSQL:

sudo -u postgres -i psql

Затем создайте базу данных для Mastodon:

CREATE DATABASE mastodon;

Затем создайте пользователя базы данных с помощью следующей команды:

CREATE USER mastodon;

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

ALTER USER mastodon WITH ENCRYPTED PASSWORD 'password';

Затем установите правильное разрешение для создания базы данных:

ALTER USER mastodon createdb;

Затем установите этого пользователя в качестве владельца базы данных Mastodon:

ALTER DATABASE mastodon OWNER TO mastodon;

Наконец, выйдите из оболочки PostgreSQL с помощью следующей команды:

\q

Установить Руби

Mastodon также требует, чтобы на вашем сервере был установлен Ruby версии 2.5+. Если он не установлен, вы можете установить его с помощью следующей команды:

apt install -y ruby ruby-dev

После установки вы можете проверить версию Ruby с помощью следующей команды:

ruby -v

Вы получите версию Ruby в следующем выводе:

ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu]

Установите и настройте мастодон

Далее вам нужно будет создать выделенного пользователя для запуска Mastodon. Вы можете создать его с помощью следующей команды:

adduser mastodon --system --group --disabled-login

Затем загрузите последнюю версию Mastodon из репозитория Git:

git clone https://github.com/tootsuite/mastodon.git

Затем создайте каталог /var/www/ для Mastodon, если он не существует.

mkdir -p /var/www/

Затем переместите каталог Mastodon в каталог /var/www:

mv mastodon/ /var/www/

Затем измените владельца каталога Mastodon на mastodon:

chown -R mastodon:mastodon /var/www/mastodon/

Затем перейдите в каталог /var/www/mastodon и проверьте последнюю ветку:

cd /var/www/mastodon/
sudo -u mastodon git checkout v4.0.2

Вы получите следующий вывод:

Note: switching to 'v4.0.2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c 

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 03b0f3ac8 Bump version to 4.0.2 (#20725)

Затем установите все необходимые зависимости для Mastodon с помощью следующей команды:

gem install bundler
sudo -u mastodon bundle config deployment 'true'
sudo -u mastodon bundle config without 'development test'
sudo -u mastodon bundle install -j$(getconf _NPROCESSORS_ONLN)

Наконец, запустите мастер установки Mastodon, используя следующую команду:

sudo -u mastodon RAILS_ENV=production bundle exec rake mastodon:setup

Вас попросят указать ваше доменное имя:

Type application/netcdf is already registered as a variant of application/netcdf.
Your instance is identified by its domain name. Changing it afterward will break things.
Domain name: mastodon.linuxbuz.com

Введите имя своего домена и нажмите клавишу Enter. Вам будет предложено включить однопользовательский режим:

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

Введите Нет и нажмите клавишу Enter. Вам будет предложено использовать Docker для запуска Mastodon:

Are you using Docker to run Mastodon? no

Введите нет и нажмите клавишу Enter. Вам будет предложено предоставить данные базы данных PostgreSQL:

PostgreSQL host: /var/run/postgresql
PostgreSQL port: 5432
Name of PostgreSQL database: mastodon
Name of PostgreSQL user: mastodon
Password of PostgreSQL user: 

Укажите данные вашей базы данных PostgreSQL и нажмите клавишу Enter. Вам будет предложено предоставить данные сервера Redis:

Database configuration works! ????

Redis host: localhost
Redis port: 6379
Redis password: 

Укажите свой хост Redis, порт и оставьте поле пароля пустым, затем нажмите клавишу Enter. Вам будет предложено сохранить файлы в облаке:

Redis configuration works! ????

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

Введите Нет и нажмите клавишу Enter. Вам будет предложено отправить электронное письмо с локального хоста:

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

Укажите все необходимые данные и нажмите клавишу Enter. Вам будет предложено сохранить все конфигурации:

This configuration will be written to .env.production
Save configuration? (Y/n) Y

Введите Y и нажмите клавишу Enter. Вам будет предложено подготовить базу данных:

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? (Y/n) Y

Введите Y и нажмите клавишу Enter. Вам будет предложено скомпилировать ресурсы CSS/JS.

The final step is compiling CSS/JS assets.
This may take a while and consume a lot of RAM.
Compile the assets now? (Y/n) Y

Введите Y и нажмите клавишу Enter. Вам будет предложено установить пароль администратора:

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: 
You can login with the password: 9835fbd5e569ad149610862178580da7
You can change your password once you login.

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

Создать служебный файл Systemd для Mastodon

Mastodon поставляется с предварительно настроенным системным файлом для управления службами Mastodon. Вам нужно будет скопировать их в каталог /etc/sysetmd/system/.

cp /var/www/mastodon/dist/mastodon*.service /etc/systemd/system/

Далее вам нужно будет изменить рабочий каталог Mastodon с /home/mastodon/live/ на /var/www/mastodon/ в служебном файле. Вы можете сделать это с помощью следующей команды:

sed -i 's/home\/mastodon\/live/var\/www\/mastodon/g' /etc/systemd/system/mastodon-*.service

Вам также нужно будет изменить /home/mastodon/.rbenv/shims/bundle на /usr/local/bin/bundle в служебных файлах:

sed -i 's/home\/mastodon\/.rbenv\/shims/usr\/local\/bin/g' /etc/systemd/system/mastodon-*.service

Затем перезагрузите systemd, чтобы применить изменения конфигурации:

systemctl daemon-reload

Далее запустите и включите все сервисы Mastodon:

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

Вы можете проверить состояние всех служб с помощью следующей команды:

systemctl status mastodon-web mastodon-sidekiq mastodon-streaming

Вывод:

? mastodon-web.service - mastodon-web
     Loaded: loaded (/etc/systemd/system/mastodon-web.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-11-30 03:07:13 UTC; 19s ago
   Main PID: 10201 (ruby3.0)
      Tasks: 29 (limit: 464140)
     Memory: 249.0M
     CGroup: /system.slice/mastodon-web.service
             ??10201 "puma 5.6.5 (tcp://127.0.0.1:3000) [mastodon]" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ">
             ??10228 "puma: cluster worker 0: 10201 [mastodon]" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "">
             ??10232 "puma: cluster worker 1: 10201 [mastodon]" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "">

Nov 30 03:07:15 ubuntu22042 bundle[10201]: [10201] *  Max threads: 5
Nov 30 03:07:15 ubuntu22042 bundle[10201]: [10201] *  Environment: production
Nov 30 03:07:15 ubuntu22042 bundle[10201]: [10201] *   Master PID: 10201
Nov 30 03:07:15 ubuntu22042 bundle[10201]: [10201] *      Workers: 2
Nov 30 03:07:15 ubuntu22042 bundle[10201]: [10201] *     Restarts: (?) hot (?) phased
Nov 30 03:07:15 ubuntu22042 bundle[10201]: [10201] * Preloading application
Nov 30 03:07:27 ubuntu22042 bundle[10201]: [10201] * Listening on http://127.0.0.1:3000
Nov 30 03:07:27 ubuntu22042 bundle[10201]: [10201] Use Ctrl-C to stop
Nov 30 03:07:27 ubuntu22042 bundle[10201]: [10201] - Worker 0 (PID: 10228) booted in 0.04s, phase: 0
Nov 30 03:07:27 ubuntu22042 bundle[10201]: [10201] - Worker 1 (PID: 10232) booted in 0.01s, phase: 0

? mastodon-sidekiq.service - mastodon-sidekiq
     Loaded: loaded (/etc/systemd/system/mastodon-sidekiq.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-11-30 03:07:13 UTC; 19s ago
   Main PID: 10199 (ruby3.0)
      Tasks: 32 (limit: 464140)
     Memory: 247.1M
     CGroup: /system.slice/mastodon-sidekiq.service
             ??10199 "sidekiq 6.5.7 mastodon [0 of 25 busy]" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "">

Nov 30 03:07:29 ubuntu22042 bundle[10199]: 2022-11-30T03:07:29.202Z pid=10199 tid=cc7 uniquejobs=upgrade_locks INFO: Start - Converting v6 lo>
Nov 30 03:07:29 ubuntu22042 bundle[10199]: 2022-11-30T03:07:29.202Z pid=10199 tid=cc7 uniquejobs=upgrade_locks INFO: Done - Converting v6 loc>
Nov 30 03:07:29 ubuntu22042 bundle[10199]: 2022-11-30T03:07:29.202Z pid=10199 tid=cc7 uniquejobs=upgrade_locks INFO: Start - Deleting v6 keys
Nov 30 03:07:29 ubuntu22042 bundle[10199]: 2022-11-30T03:07:29.203Z pid=10199 tid=cc7 uniquejobs=upgrade_locks INFO: Done - Deleting v6 keys

По умолчанию Mastodon прослушивает порт 3000. Вы можете проверить это с помощью следующей команды:

ss -lnpt | grep 3000

Вывод:

LISTEN 0      1024       127.0.0.1:3000      0.0.0.0:*    users:(("ruby3.0",pid=10232,fd=5),("ruby3.0",pid=10228,fd=5),("ruby3.0",pid=10201,fd=5))

Настройте Nginx в качестве обратного прокси

Сначала установите пакет веб-сервера Nginx, используя следующую команду:

apt install nginx -y

Затем скопируйте файл конфигурации виртуального хоста Nginx в каталог Nginx:

cp /var/www/mastodon/dist/nginx.conf /etc/nginx/conf.d/mastodon.conf

Затем отредактируйте файл конфигурации виртуального хоста Mastodon:

nano /etc/nginx/conf.d/mastodon.conf

Найдите следующую строку как в блоке сервера порта 80, так и в блоке сервера порта 443:

server_name example.com;

Заменил их следующей строкой:

server_name mastodon.linuxbuz.com;

Найдите следующую строку как в блоке сервера порта 80, так и в блоке сервера порта 443.

root /home/mastodon/live/public;

Заменил его следующей строкой:

root /var/www/mastodon/public;

Найдите следующие две строки.

# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

Измените их на следующие, чтобы Nginx временно использовал самозаверяющий сертификат TLS. Мы получим действующий сертификат Let’s Encrypt позже.

ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;

Сохраните и закройте файл, затем создайте каталог кеша для Nginx:

mkdir -p /var/nginx/cache/

Затем проверьте Nginx на наличие синтаксической ошибки:

nginx -t

Вы получите следующий вывод:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Затем перезапустите службу Nginx, чтобы применить изменения:

systemctl restart nginx

Защитите Mastodon с помощью Lets Encrypt SSL

Чтобы включить HTTPS на веб-сайте Mastodon, вам необходимо установить пакет Certbot на свой сервер.

Сначала установите менеджер пакетов Snap с помощью следующей команды:

apt install snapd

Затем обновите пакет Snap до последней версии:

snap install core
snap refresh core

Затем установите пакет Certbot с помощью следующей команды:

snap install --classic certbot

Затем создайте символическую ссылку для двоичного файла Certbot на системное местоположение:

ln -s /snap/bin/certbot /usr/bin/certbot

Затем выполните следующую команду, чтобы загрузить и установить SSL-сертификаты Lets Encrypt:

certbot --nginx -d mastodon.linuxbuz.com

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

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, 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

Введите Y и нажмите клавишу Enter, чтобы загрузить и установить SSL-сертификаты для вашего домена:

Account registered.
Requesting a certificate for mastodon.linuxbuz.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mastodon.linuxbuz.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/mastodon.linuxbuz.com/privkey.pem
This certificate expires on 2023-02-28.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for mastodon.linuxbuz.com to /etc/nginx/conf.d/mastodon.conf
Congratulations! You have successfully enabled HTTPS on https://mastodon.linuxbuz.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Доступ к веб-интерфейсу Mastodon

Теперь откройте веб-браузер и введите URL-адрес https://mastodon.linuxbuz.com. Вы будете перенаправлены на следующую страницу:

Нажмите кнопку «Войти». Вы должны увидеть страницу входа Mastodon:

Теперь укажите свой адрес электронной почты и пароль администратора, которые вы создали ранее, и нажмите кнопку «Войти». Вы должны увидеть панель инструментов Mastodon на следующей странице:

Поздравляем! вы успешно установили и настроили Mastodon на сервере Ubuntu 22.04. Теперь вы можете легко создать свою собственную социальную сеть с помощью Mastodon. Не стесняйтесь спрашивать меня, если у вас есть какие-либо вопросы.