Обзор развертывания Mastodon на сервере¶
Предварительные требования¶
Для корректной работы приложения требуются следующие параметры и компоненты:
-
Операционная система: Ubuntu.
-
Права доступа: Необходим доступ с правами
sudoдля установки системных пакетов и создания пользователя. -
Доменное имя: Требуется настроенный домен в зоне
hostkey.in. -
Порты:
-
3000/TCP— основной веб-интерфейс (Puma). -
4000/TCP— потоковая передача данных (Streaming API). -
80/TCP— HTTP (для перенаправления на HTTPS). -
443/TCP— HTTPS.
FDQN итоговой панели на домене hostkey.in¶
| Параметр | Значение |
|---|---|
| Префикс | mastodon |
| Домен | hostkey.in |
| Полный шаблон | mastodon{Server_ID_from_Invapi}.hostkey.in |
Структура файлов и каталогов¶
Все основные данные приложения сосредоточены в директории /opt/mastodon.
-
/opt/mastodon— корневая директория приложения. -
/opt/mastodon/.env.db— конфигурация базы данных PostgreSQL. -
/opt/mastodon/.env.production— основной файл переменных окружения приложения. -
/opt/mastodon/docker-compose.yml— файл управления контейнерами Docker. -
/opt/mastodon/postgres14— данные базы данных PostgreSQL. -
/opt/mastodon/redis— данные Redis. -
/opt/mastodon/public/system— пользовательский контент (медиафайлы).
Процесс установки приложения¶
Развертывание выполняется путем автоматизированной настройки системы и запуска контейнеров:
-
Подготовка среды: Устанавливается Docker и Docker Compose. Создается системный пользователь
mastodonс домашним каталогом/opt/mastodon. -
Создание структуры: Создаются необходимые директории для данных PostgreSQL, Redis и медиафайлов с соответствующими правами доступа.
-
Настройка конфигурации:
-
Генерируются файлы переменных окружения
.env.dbи.env.production. -
Настраивается прокси-сервер Nginx для перенаправления трафика на соответствующие порты приложения.
-
Генерация секретов: С помощью временного запуска контейнера генерируются уникальные ключи безопасности:
SECRET_KEY_BASE,OTP_SECRET, а также ключи шифрования данных (ACTIVE_RECORD_ENCRYPTION) и VAPID-ключи для Web Push. -
Инициализация базы данных: Выполняется запуск контейнеров, выполнение миграций базы данных и создание начального администратора (seed data).
Права доступа и безопасность¶
-
Пользователь: Все файлы приложения в
/opt/mastodonпринадлежат пользователюmastodon. -
Безопасность данных: Файлы конфигурации
.env.dbи.env.productionимеют права доступа0600, что ограничивает доступ к ним только владельцем. -
Шифрование: Приложение использует механизмы шифрования ActiveRecord для защиты чувствительных данных в базе.
Базы данных¶
Приложение использует две системы хранения данных:
-
PostgreSQL (версия 14): Используется как основная реляционная база данных. Данные хранятся в локальной директории
./postgres14. -
Redis: Используется для управления очередями и кэшированием. Данные хранятся в директории
./redis.
Контейнеры Docker и их запуск¶
Приложение разворачивается с использованием docker-compose и включает следующие сервисы:
| Имя контейнера | Образ | Порты | Тома (Volumes) | Перезапуск |
|---|---|---|---|---|
nginx | jonasal/nginx-certbot:latest | Host mode | nginx_secrets:/etc/letsencrypt, /data/nginx/user_conf.d:/etc/nginx/user_conf.d | unless-stopped |
db | postgres:14-alpine | Внутренний (5432) | ./postgres14:/var/lib/postgresql/data | always |
redis | redis:7-alpine | Внутренний (6379) | ./redis:/data | always |
web | ghcr.io/mastodon/mastodon:v4.3.1 | 3000:3000 | ./public/system:/mastodon/public/system | always |
streaming | ghcr.io/mastodon/mastodon-streaming:v4.3.1 | 4000:4000 | — | always |
sidekiq | ghcr.io/mastodon/mastodon:v4.3.1 | — | ./public/system:/mastodon/public/system | always |
Инструкция по обновлению приложения¶
Для обновления основного приложения необходимо выполнить следующие действия в директории /opt/mastodon:
Это обновит образы до актуальных версий, указанных в конфигурации, и перезапустит контейнеры.
Расположение конфигурационных файлов и данных¶
-
Конфигурация приложения:
/opt/mastodon/.env.production -
Конфигурация базы данных:
/opt/mastodon/.env.db -
Данные пользователя (медиа):
/opt/mastodon/public/system
Доступные порты для подключения¶
-
3000— Основной веб-интерфейс. -
4000— API потоковой передачи данных.