Как установить социальную сеть Mastodon с Docker на Ubuntu 18.04 LTS
Это руководство существует для этих версий ОС
- Ubuntu 22.04 (Jammy Jellyfish)
- Ubuntu 18.04 (Bionic Beaver)
На этой странице
- Предпосылки
- Шаг 1. Установка зависимостей
- Шаг 2. Настройка брандмауэра
- Шаг 3. Установите Docker
- Шаг 4. Установите Docker Compose
- Шаг 5. Установите Mastodon
- Шаг 6. Установка и настройка Nginx
- Шаг 7. Установка и настройка Lets Encrypt
- Настройка автоматического обновления сертификатов SSL
Mastodon — бесплатная, децентрализованная социальная сеть с открытым исходным кодом. Он был создан как альтернатива Twitter. Как и в Twitter, люди могут подписываться друг на друга, публиковать сообщения, изображения и видео. Но, в отличие от Твиттера, здесь нет центрального хранилища или авторитета для контента.
Вместо этого Mastodon работает на тысячах разных серверов, на каждом из которых работают разные члены сообщества. Пользователи, зарегистрированные на одном сервере, могут легко подключаться к пользователям в другой сети и следить друг за другом в разных экземплярах.
Любой может установить свой собственный экземпляр сервера Mastodon. В этом руководстве вы узнаете, как настроить экземпляр Mastodon на сервере с Ubuntu 18.04 с помощью Docker.
Предпосылки
-
An Ubuntu 18.04 based server with a non-root sudo user.
-
Ensure your system is up to date.
$ sudo apt update $ sudo apt upgrade
-
Mastodon sends email notifications to users. One option to make it work is to set up your own mail server. You can do it on the same server as you will be installing mastodon or on a different server. Doing it is out of the scope of this guide.
We will recommend you to use a 3rd party Transactional mail service like Mailgun, Sendgrid, Amazon SES or Sparkpost. The instructions in the guide will be using Mailgun as your SMTP provider.
-
Make sure you have a domain name pointing to the server. For this tutorial, we will be using example.com as the domain.
Шаг 1 — Установка зависимостей
Прежде чем мы установим Mastodon, нам нужно убедиться, что на нашем сервере установлено определенное программное обеспечение, которое необходимо установить правильно. Выполните следующие команды, чтобы установить зависимости.
$ sudo apt update $ sudo apt install ca-certificates curl ufw apt-transport-https software-properties-common git -y
Некоторое из вышеперечисленного программного обеспечения может быть предварительно установлено для вас.
Поскольку мы установили Git, мы должны настроить его, прежде чем продолжить.
$ git config --global user.name "Your Name" $ git config --global user.email ""
Шаг 2 — Настройка брандмауэра
На предыдущем шаге мы установили ufw (несложный брандмауэр). Прежде чем мы сможем приступить к установке Mastodon, нам нужно его настроить.
Включите SSH и порт, который мы только что создали, чтобы нас не заблокировали.
$ sudo ufw allow OpenSSH
Включите брандмауэр ufw.
$ sudo ufw enable
Нам также необходимо включить http и https для работы Mastodon.
$ sudo ufw allow http $ sudo ufw allow https
Проверьте состояние брандмауэра.
$ sudo ufw status
Вы должны увидеть результат, подобный следующему.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443/tcp ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443/tcp (v6) ALLOW Anywhere (v6)
Шаг 3 — Установите Докер
Добавьте ключ Dockers GPG в свою систему.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Проверьте отпечаток загруженного ключа.
$ sudo apt-key fingerprint 0EBFCD88
Вы должны увидеть результат, подобный следующему.
pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) <> sub rsa4096 2017-02-22 [S]
Добавьте репозиторий Docker.
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Обновите базу данных пакетов.
$ sudo apt update
Установите Docker-CE. CE — это Community Edition Docker.
$ sudo apt install docker-ce -y
Докер должен быть установлен сейчас. Проверьте, что он работает.
$ sudo systemctl status docker
Вывод должен быть похож на следующий.
? docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2019-10-22 18:26:29 UTC; 25min ago Docs: https://docs.docker.com Main PID: 3574 (dockerd) Tasks: 8 CGroup: /system.slice/docker.service ??3574 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Нажмите q, чтобы выйти.
Добавьте свою ограниченную учетную запись пользователя Linux в группу docker, чтобы вы могли запускать docker без sudo.
sudo usermod -aG docker $USER
Переменная $USER выберет и добавит текущего вошедшего пользователя в группу докеров. Замените $USER фактическим именем пользователя, если вы еще не вошли в систему под этим пользователем.
Переключитесь на пользователя, которого мы только что добавили. Даже если вы уже вошли в систему, вам все равно нужно будет снова переключиться на нее, чтобы перезагрузить разрешения.
$ su - ${USER}
Убедитесь, что все работает нормально, запустив встроенную программу «Hello World».
$ docker run hello-world
Вы должны увидеть следующий вывод, который сообщит, что Docker установлен и работает правильно.
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly.
Шаг 4 — Установите Docker Compose
Можно пропустить этот шаг и продолжить, но установка Docker Compose значительно упростит запуск Mastodon, особенно если вы хотите сделать это на нескольких серверах.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
На момент написания этого руководства 1.24.1 является текущим стабильным выпуском Docker Compose. Вы можете проверить последнюю версию выпуска на их странице Github.
Примените разрешения на выполнение к бинарному файлу docker compose.
$ sudo chmod +x /usr/local/bin/docker-compose
Добавьте автозавершение команд в Docker Compose.
$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
Убедитесь, что ваша установка прошла успешно.
$ docker-compose --version
Он распечатает следующий вывод.
docker-compose version 1.24.1, build 4667896b
Шаг 5 - Установите мастодон
Клонируйте репозиторий Mastodons на свой сервер.
$ git clone https://github.com/tootsuite/mastodon
Перейдите в каталог, в который мы только что скопировали файлы.
$ cd mastodon
Mastodon поставляется с образцом файла конфигурации. Нам нужно переименовать его, чтобы Mastodon заработал.
$ cp .env.production.sample .env.production
Нам нужно сгенерировать секретные ключи для нашего файла конфигурации. Но перед этим нам нужно собрать образ Docker.
$ docker-compose build
Теперь, когда образ успешно собран, нужно создать несколько ключей, необходимых для настройки Mastodon.
Сначала сгенерируйте SECRET_KEY_BASE.
$ SECRET_KEY_BASE=$(docker-compose run --rm web bundle exec rake secret)
Вставьте указанный выше ключ в файл конфигурации.
$ sed -i -e "s/SECRET_KEY_BASE=/&${SECRET_KEY_BASE}/" .env.production
Сгенерируйте и вставьте OTP_SECRET в файл конфигурации.
$ OTP_SECRET=$(docker-compose run --rm web bundle exec rake secret) $ sed -i -e "s/OTP_SECRET=/&${OTP_SECRET}/" .env.production
Создайте и вставьте PAPERCLIP_SECRET в файл конфигурации.
$ PAPERCLIP_SECRET=$(docker-compose run --rm web bundle exec rake secret) $ sed -i -e "s/PAPERCLIP_SECRET=/&${PAPERCLIP_SECRET}/" .env.production
Создайте значения для VAPID_PRIVATE_KEY и VAPID_PUBLIC_KEY.
$ docker-compose run --rm web bundle exec rake mastodon:webpush:generate_vapid_key
Откройте файл .env.production.
$ sudo nano ./.env.production
Найдите VAPID_PRIVATE_KEY и VAPID_PUBLIC_KEY в файле и скопируйте вывод предыдущей команды.
Найдите переменную LOCAL_DOMAIN и измените ее значение с example.com на доменное имя, которое вы выбрали для своей установки Mastodon.
Введите значения, полученные от вашего SMTP-провайдера.
SMTP_SERVER = smtp.mailgun.org SMTP_PORT = 587 SMTP_LOGIN = username SMTP_PASSWORD = password SMTP_FROM_ADDRESS =
Нажмите Ctrl + X и сохраните файл, когда закончите.
Вам нужно снова собрать образ Docker, чтобы применить все изменения, сделанные выше.
$ docker-compose build
Настройте базу данных.
$ docker-compose run --rm web rails db:migrate
Предварительно скомпилируйте активы Mastodons.
$ docker-compose run --rm web rails assets:precompile
Запустите следующую команду, чтобы запустить контейнер.
$ docker-compose up -d
Шаг 6 — Установите и настройте Nginx
Следующим шагом в нашем руководстве является установка сервера Nginx, чтобы веб-сайт Mastodons работал.
Выполните следующую команду, чтобы установить сервер Nginx.
$ sudo apt install nginx -y
Nginx поставляется с настроенным сайтом по умолчанию. Удалите это.
$ sudo rm /etc/nginx/sites-available/default
Также удалите символическую ссылку для сайта по умолчанию.
$ sudo rm /etc/nginx/sites-enabled/default
Создайте файл конфигурации Nginx для Mastodon.
$ sudo touch /etc/nginx/sites-available/mastodon
Создайте символическую ссылку для конфигурации Mastodons.
$ sudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon
Откройте конфигурацию Mastodons в редакторе Nano. (Вы можете выбрать любой редактор, который хотите)
$ sudo nano /etc/nginx/sites-available/mastodon
Скопируйте и вставьте в него следующий текст.
map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; listen [::]:80; server_name example.com; root /home/user/mastodon/public; # Useful for Let's Encrypt 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 example.com; ssl_protocols TLSv1.2; ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; keepalive_timeout 70; sendfile on; client_max_body_size 80m; root /home/user/mastodon/public; gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; add_header Strict-Transport-Security "max-age=31536000"; location / { try_files $uri @proxy; } location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) { add_header Cache-Control "public, max-age=31536000, immutable"; try_files $uri @proxy; } location /sw.js { add_header Cache-Control "public, max-age=0"; try_files $uri @proxy; } location @proxy { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header Proxy ""; proxy_pass_header Server; proxy_pass http://127.0.0.1:3000; proxy_buffering off; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; tcp_nodelay on; } location /api/v1/streaming { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header Proxy ""; proxy_pass http://127.0.0.1:4000; proxy_buffering off; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; tcp_nodelay on; } error_page 500 501 502 503 504 /500.html; }
Приведенная выше конфигурация предполагает, что вы используете Lets encrypt в качестве поставщика SSL. Если вы используете другую службу SSL, вам нужно отредактировать расположение ключей и пропустить следующий раздел руководства.
Шаг 7 — Установите и настройте Lets Encrypt
Убедитесь, что Nginx остановлен.
$ sudo systemctl stop nginx
Добавьте репозиторий Certbot.
$ sudo add-apt-repository ppa:certbot/certbot
Обновление системных пакетов.
$ sudo apt update
Установите инструмент Certbot.
$ sudo apt install certbot
Вам нужно создать сертификат дважды: один раз с помощью метода TLS SNI и второй раз с помощью метода webroot.
sudo certbot certonly --standalone -d example.com
Теперь создайте сертификат, используя метод webroot. Для этого потребуется, чтобы Nginx работал.
sudo systemctl start nginx sudo certbot certonly --webroot -d example.com -w /home/user/mastodon/public/
Инструмент спросит вас, хотите ли вы сохранить сертификат или обновить его. Выберите вариант продления.
Настройка автоматического обновления SSL-сертификатов
Сертификаты Lets Encrypt имеют срок действия 90 дней. После этого нужно снова их продлевать. Для этого вы можете создать задание cron, которое сделает это автоматически.
Создайте задание cron.
$ sudo nano /etc/cron.daily/letsencrypt-renew
Скопируйте и вставьте следующее в файл.
#!/usr/bin/env bash certbot renew systemctl reload nginx
Сохраните и закройте файл, нажав Ctrl + X и введя Y при появлении запроса.
Сделайте скрипт исполняемым и перезапустите демон cron, чтобы наш скрипт запускался ежедневно.
$ sudo chmod +x /etc/cron.daily/letsencrypt-renew $ sudo systemctl restart cron
Шаг 8 - Создайте своего пользователя Mastodon
Посетите свой сайт мастодонта в браузере. Вы должны увидеть следующий экран.
Введите желаемое имя пользователя, адрес электронной почты и пароль, чтобы создать новую учетную запись на вашем экземпляре Mastodon. Ваше полное имя пользователя, которое вам понадобится для подключения к пользователям других серверов Mastodon, — howtoforge
@example.com. Mastodon отправит вам письмо с подтверждением регистрации.
Вы также можете подтвердить регистрацию вручную. Для этого вам потребуется подключиться по SSH к вашему экземпляру Docker. Список всех текущих экземпляров Docker.
$ docker ps
Вы увидите вывод, как показано ниже.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 32f2c4cd2598 tootsuite/mastodon "/tini -- bash -c 'r…" 16 hours ago Up 16 hours (healthy) 127.0.0.1:3000->3000/tcp mastodon_web_1 76beca2b858d tootsuite/mastodon "/tini -- node ./str…" 16 hours ago Up 16 hours (healthy) 127.0.0.1:4000->4000/tcp mastodon_streaming_1 08f7a42b75ac tootsuite/mastodon "/tini -- bundle exe…" 16 hours ago Up 16 hours mastodon_sidekiq_1 bacaa8c09a85 redis:5.0-alpine "docker-entrypoint.s…" 17 hours ago Up 17 hours (healthy) mastodon_redis_1 62e9b2175a53 postgres:9.6-alpine "docker-entrypoint.s…" 17 hours ago Up 17 hours (healthy) mastodon_db_1
Чтобы внести необходимые изменения, нам нужно получить доступ к потоковому контейнеру. SSH в контейнер mastodon_streaming_1.
$ docker exec -it mastodon_streaming_1 /bin/bash
Это запустит оболочку Bash внутри вашего контейнера.
Выполните следующую команду, чтобы утвердить только что созданное имя пользователя.
:~$ RAILS_ENV=production bin/tootctl accounts modify howtoforge --confirm
Выполните следующую команду, чтобы сделать вашу вновь созданную учетную запись администратором.
:~$ RAILS_ENV=production bin/tootctl accounts modify howtoforge --role admin
Выйдите из контейнера.
:~$ exit
Войдите в свой экземпляр с вашим именем пользователя и паролем, и вы увидите следующий экран.
Нажмите Lets Go, и вы перейдете к следующим страницам, которые расскажут вам об основных принципах работы Mastodon.
Нажмите «Завершить обучение», чтобы открыть домашнюю страницу Mastodons, где вы можете начать публиковать сообщения, которые вам нравятся.
Вы можете получить доступ к настройкам и области администрирования из меню «Настройки».
Шаг 9 - Техническое обслуживание
Чтобы просмотреть производительность и журналы вашего экземпляра Mastodon, перейдите по ссылке https://example.com/sidekiq/.
Здесь вы можете просмотреть список различных процессов и запланированных задач, связанных с вашим экземпляром Mastodon. Вы также можете проверить наличие невыполненных задач в разделе «Мертвые» или «Повторные попытки». Он также сообщит вам об использовании памяти вашим экземпляром.
Вы можете проверить состояние своей базы данных экземпляров на странице https://example.com/pghero/.
Вы можете выполнять обслуживание базы данных, выполнять SQL-запросы и удалять неиспользуемые индексы.
Если ваш сайт по какой-то причине вообще не загружается, вы можете проверить журналы, созданные Docker.
Для этого сначала закройте контейнеры.
$ docker-compose down
Запустите Docker compose в подключенном состоянии, чтобы вы могли просматривать журналы, созданные каждым контейнером.
$ docker-compose up
Шаг 10. Модернизация вашего мастодонта
Перейдите в каталог мастодонтов.
$ cd /home/user/mastdon
Загружайте обновления из репозитория
$ git fetch
Если вы по какой-то причине изменили файл docker-compose.yml, вам нужно сначала выполнить следующую команду.
$ git status
Это расскажет вам обо всех изменениях, внесенных в него. Если файл изменен, сначала сохраните свои изменения.
$ git stash
Ознакомьтесь с последней версией Mastodon. Проверьте последнюю версию на странице релизов.
$ git checkout <version/tag>
Если вы запускали git stash ранее, выполните следующую команду, чтобы повторить изменения в файле docker-compose.yml.
$ git stash pop
Создайте образ докера.
$ docker-compose build
Выполнение миграций базы данных.
$ docker-compose run --rm web rails db:migrate
Предварительно скомпилируйте активы Mastodons.
$ docker-compose run --rm web rails assets:precompile
Запустите следующую команду, чтобы запустить контейнер.
$ docker-compose up -d
Вот и все для этого урока. Чтобы узнать больше о Mastodon, следуйте их документам.