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

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


Это руководство существует для этих версий ОС

  • Ubuntu 22.04 (Jammy Jellyfish)
  • Ubuntu 18.04 (Bionic Beaver)

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

  1. Предпосылки
  2. Шаг 1. Установка зависимостей
  3. Шаг 2. Настройка брандмауэра
  4. Шаг 3. Установите Docker
  5. Шаг 4. Установите Docker Compose
  6. Шаг 5. Установите Mastodon
  7. Шаг 6. Установка и настройка Nginx
  8. Шаг 7. Установка и настройка Lets Encrypt
    1. Настройка автоматического обновления сертификатов 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, следуйте их документам.