Обзор развертывания Mastodon на сервере¶
Предпосылки и предварительные требования¶
Для успешного развертывания приложения необходимо наличие сервера с операционной системой Ubuntu. Требуется наличие прав суперпользователя (root) для установки программного обеспечения и настройки сети.
Необходимы следующие сетевые ресурсы: - Доменное имя в формате {{ prefix }}{{ server_id }}.{{ zone }}. - Открытые порты 80 и 443 для веб-трафика и SSL-сертификатов. - Доступ к интернету для загрузки образов Docker и компонентов системы.
Структура файлов и каталогов¶
Все файлы приложения и конфигурации размещаются в директории /opt/mastodon. Структура каталогов включает: - /opt/mastodon — корневая директория приложения. - /opt/mastodon/postgres14 — хранилище данных базы данных PostgreSQL. - /opt/mastodon/redis — хранилище данных кэша Redis. - /opt/mastodon/public/system — директория для хранения загружаемых пользователем файлов. - /opt/mastodon/.env.db — файл конфигурации для базы данных. - /opt/mastodon/.env.production — основной файл конфигурации приложения. - /opt/mastodon/docker-compose.yml — файл описания контейнеров.
Файлы конфигурации веб-сервера Nginx размещаются в /data/nginx/user_conf.d/. Сертификаты SSL хранятся в /etc/letsencrypt/.
Процесс установки приложения¶
Установка выполняется через развертывание контейнеров Docker. Версия приложения определяется переменной mastodon_version в конфигурации.
Процесс включает следующие этапы: 1. Установка Docker и Docker Compose на сервер. 2. Создание пользователя mastodon и группы для запуска сервисов. 3. Создание необходимых директорий с правами доступа. 4. Генерация секретных ключей для безопасности: - SECRET_KEY_BASE - OTP_SECRET - VAPID_PRIVATE_KEY и VAPID_PUBLIC_KEY - Ключи шифрования записей базы данных (ACTIVE_RECORD_ENCRYPTION_*). 5. Наполнение файла .env.production сгенерированными секретами. 6. Запуск миграций базы данных перед и после развертывания. 7. Создание начального административного пользователя.
Контейнеры Docker и их запуск¶
Приложение состоит из нескольких контейнеров, описанных в файле docker-compose.yml.
Список контейнеров: - db — база данных PostgreSQL версии 14 (образ postgres:14-alpine). - redis — кэш Redis версии 7 (образ redis:7-alpine). - web — основной веб-сервер приложения (образ ghcr.io/mastodon/mastodon). - streaming — сервис потоковой передачи данных (образ ghcr.io/mastodon/mastodon-streaming). - sidekiq — фоновый обработчик задач (образ ghcr.io/mastodon/mastodon). - nginx — веб-сервер и прокси (образ jonasal/nginx-certbot:latest).
Контейнеры запускаются в двух сетях: - external_network — для доступа извне. - internal_network — для внутренней связи между сервисами.
Команда для запуска всех сервисов:
Базы данных¶
В качестве базы данных используется PostgreSQL. Конфигурация подключения хранится в файле .env.db и .env.production.
Параметры подключения: - Хост: db - Порт: 5432 - Пользователь: postgres - Имя базы данных: postgres - Пароль: задается через переменную окружения ansible_ssh_pass.
Данные базы данных сохраняются в том postgres14 внутри директории /opt/mastodon.
Прокси серверы¶
Для обработки входящего трафика и управления SSL-сертификатами используется контейнер Nginx с поддержкой Certbot.
Конфигурация Nginx включает: - Перенаправление трафика с порта 80 на порт 443 (HTTPS). - Настройка SSL-сертификатов для домена {{ prefix }}{{ server_id }}.{{ zone }}. - Проксирование запросов к веб-серверу на порт 3000. - Проксирование запросов к API потоковой передачи на порт 4000.
Файл конфигурации Nginx размещается по пути /data/nginx/user_conf.d/{{ prefix }}{{ server_id }}.{{ zone }}.conf.
Сертификаты автоматически генерируются и обновляются через Certbot, используя email hkadm@hostkey.com.
Настройки прав¶
Права доступа к файлам и директориям настроены следующим образом: - Директория /opt/mastodon и все поддиректории принадлежат пользователю mastodon и группе mastodon. - Режим доступа к директориям: 0755. - Файлы конфигурации .env.db и .env.production имеют режим доступа 0600 (доступно только владельцу). - Файл docker-compose.yml имеет режим доступа 0644. - Файл конфигурации Nginx имеет владельца root и режим доступа 0644.
Запуск, остановка и обновление¶
Управление сервисами осуществляется через команды Docker Compose в директории /opt/mastodon.
Запуск всех сервисов:
Остановка всех сервисов:
Перезапуск всех сервисов:
Выполнение миграций базы данных:
Создание начального административного пользователя:
Проверка готовности базы данных: