Все настройки хранятся в базе данных в формате key-value (таблица settings). Управлять ими можно через админ-панель → Настройки или программно через tRPC (trpc.admin.settings).
При первом запуске настройки заполняются значениями по умолчанию из packages/database/src/schema/common.ts.
Настройки с пометкой публичная доступны на клиенте без авторизации. Остальные — только на сервере.
Категория (category) в базе данных определяет, к какой группе настройка относится для целей доступа и хранения, а не обязательно соответствует разделу в этом справочнике. Например, секретные ключи (S3 access/secret key, секреты платёжных систем, OAuth-секреты) относятся к категории security, хотя описаны рядом с соответствующей функцией.
Общие (general)
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
site.name | string | Minecraft CMS | да | Название сайта. |
site.description | string | Современная CMS для Minecraft серверов | да | Описание сайта. |
download.windows | string | — | да | Ссылка на скачивание лаунчера для Windows. |
download.macos | string | — | да | Ссылка на скачивание лаунчера для macOS. |
download.linux | string | — | да | Ссылка на скачивание лаунчера для Linux. |
S3-хранилище
Настройки для подключения к S3-совместимому хранилищу (AWS S3, MinIO, Selectel и др.). Используется для загрузки аватаров, скинов, плащей и вложений.
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
storage.s3.endpoint | string | — | нет | Пользовательский endpoint для S3-совместимого хранилища. |
storage.s3.publicUrl | string | — | нет | Публичный домен/URL для доступа к файлам S3. |
storage.s3.bucket | string | — | нет | Название bucket для хранения файлов. |
storage.s3.region | string | us-east-1 | нет | Регион S3 (по умолчанию us-east-1). |
storage.s3.accessKey | string | — | нет | Access Key для доступа к S3. |
storage.s3.secretKey | string | — | нет | Secret Key для доступа к S3. |
storage.s3.forcePathStyle | boolean | true | нет | Использовать path-style URLs (полезно для MinIO и совместимых сервисов). |
storage.s3.useSSL | boolean | true | нет | Использовать HTTPS при обращении к S3. |
Для MinIO установите storage.s3.forcePathStyle в true и укажите endpoint вашего MinIO-сервера.
Безопасность (security)
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
security.password_hash_algorithm | argon2 | bcrypt | argon2 | нет | Алгоритм хеширования паролей (argon2 или bcrypt). Argon2 рекомендуется как более безопасный. |
security.session_lifetime_days | number | 30 | нет | Срок действия сессии в днях. |
security.max_login_attempts | number | 5 | нет | Максимальное количество попыток входа. |
security.lockout_duration_minutes | number | 15 | нет | Длительность блокировки после превышения попыток входа (минуты). |
security.require_email_verification | boolean | false | да | Требовать обязательное подтверждение email при регистрации. |
connections.oauth_state_secret | string | — | нет | Секрет для подписи состояния OAuth при подключении внешних аккаунтов. |
Смена security.password_hash_algorithm не перехеширует существующие пароли. Новый алгоритм применяется только к новым паролям и при смене пароля.
Email и SMTP (email)
Настройки для отправки писем: подтверждение email, сброс пароля, уведомления.
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
email.smtp_host | string | — | нет | SMTP сервер для отправки email (например, smtp.gmail.com). |
email.smtp_port | number | 25 | нет | Порт SMTP сервера (25, 587 для STARTTLS, 465 для SSL). |
email.smtp_user | string | — | нет | Логин для SMTP авторизации. |
email.smtp_pass | string | — | нет | Пароль для SMTP авторизации. |
email.from_name | string | — | нет | Имя отправителя (если пусто, используется название сайта). |
Для Gmail используйте пароль приложения (App Password), а не основной пароль аккаунта.
Платежи (payment)
Настройки платёжных систем. Каждый провайдер настраивается отдельно.
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
payment.client_redirect_url | string | http://localhost:3000/payment | нет | URL для редиректа после оплаты. |
payment.webhook_base_url | string | http://localhost:3001 | нет | Базовый URL сервера для вебхуков платёжных систем. |
payment.default_currency | string | RUB | нет | Валюта по умолчанию для платежей. |
payment.min_amount | number | 10 | да | Минимальная сумма пополнения. |
payment.max_amount | number | 100000 | да | Максимальная сумма пополнения. |
Freekassa
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
payment.freekassa.enabled | boolean | false | да | Включить Freekassa. |
payment.freekassa.merchant_id | string | — | нет | ID магазина Freekassa. |
payment.freekassa.secret_key | string | — | нет | Первый секретный ключ Freekassa (для создания платежа). |
payment.freekassa.secret_key_2 | string | — | нет | Второй секретный ключ Freekassa (для обработки вебхука). |
payment.freekassa.allowed_ips | string[] | список IP Freekassa | нет | Разрешённые IP-адреса Freekassa для вебхуков. |
ЮKassa
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
payment.yookassa.enabled | boolean | false | да | Включить ЮKassa. |
payment.yookassa.shop_id | string | — | нет | ID магазина ЮKassa. |
payment.yookassa.secret_key | string | — | нет | Секретный ключ ЮKassa. |
payment.yookassa.allowed_ips | string[] | список IP/подсетей ЮKassa | нет | Разрешённые IP-адреса/подсети ЮKassa для вебхуков. |
Тинькофф
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
payment.tinkoff.enabled | boolean | false | да | Включить Тинькофф. |
payment.tinkoff.terminal_id | string | — | нет | ID терминала Тинькофф. |
payment.tinkoff.password | string | — | нет | Пароль терминала Тинькофф. |
Unitpay
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
payment.unitpay.enabled | boolean | false | да | Включить Unitpay. |
payment.unitpay.public_key | string | — | нет | Публичный ключ Unitpay. |
payment.unitpay.secret_key | string | — | нет | Секретный ключ Unitpay. |
payment.unitpay.allowed_ips | string[] | список IP Unitpay | нет | Разрешённые IP-адреса Unitpay для вебхуков. |
Anypay
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
payment.anypay.enabled | boolean | false | да | Включить Anypay. |
payment.anypay.merchant_id | string | — | нет | ID магазина Anypay. |
payment.anypay.secret_key | string | — | нет | Секретный ключ Anypay. |
payment.anypay.allowed_ips | string[] | список IP Anypay | нет | Разрешённые IP-адреса Anypay для вебхуков. |
Payok
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
payment.payok.enabled | boolean | false | да | Включить Payok. |
payment.payok.shop_id | string | — | нет | ID магазина Payok. |
payment.payok.secret_key | string | — | нет | Секретный ключ Payok. |
Enot.io
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
payment.enotio.enabled | boolean | false | да | Включить Enot.io. |
payment.enotio.shop_id | string | — | нет | ID магазина Enot.io. |
payment.enotio.secret_key | string | — | нет | Секретный ключ Enot.io. |
Лаунчер (launcher)
Настройки интеграции с лаунчером GravitLauncher и авторизации лаунчера через сайт.
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
launcher.api_secret | string | — | нет | Секретный ключ для API авторизации лаунчера GravitLauncher. |
launcher.enabled | boolean | false | нет | Включить интеграцию с GravitLauncher. |
launcher.site_auth.enabled | boolean | false | нет | Включить авторизацию лаунчера через сайт. |
launcher.site_auth.auto_approve | boolean | false | нет | Автоматически подтверждать запросы авторизации лаунчера для вошедшего пользователя. |
launcher.site_auth.token_ttl_hours | number | 24 | нет | Срок действия токена сессии лаунчера, выданного через авторизацию на сайте (часы). |
launcher.site_auth.request_ttl_minutes | number | 10 | нет | Срок действия запроса авторизации лаунчера до подтверждения (минуты). |
launcher.site_auth.poll_interval_seconds | number | 3 | нет | Рекомендованный интервал опроса статуса авторизации лаунчером (секунды). |
launcher.site_auth.delivery_mode | string | poll | нет | Способ доставки токена лаунчеру по умолчанию (poll или redirect). |
launcher.site_auth.allowed_redirect_schemes | string[] | [] | нет | Разрешённые URI-схемы для доставки токена через deep-link лаунчера. |
launcher.site_auth.code_secret | string | — | нет | Секрет для подписи одноразового кода авторизации лаунчера через сайт. |
launcher.site_auth.bind_ip | boolean | false | нет | Привязывать запрос авторизации лаунчера к IP-адресу. |
launcher.site_auth.bind_hwid | boolean | false | нет | Привязывать запрос авторизации лаунчера к HWID. |
launcher.site_auth.branding_text | string | Лаунчер запрашивает доступ к вашему аккаунту | нет | Текст на экране подтверждения авторизации лаунчера. |
Minecraft (minecraft)
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
minecraft.default_skins | string[] | 2 стандартных скина | нет | Список URL дефолтных скинов для новых пользователей. |
minecraft.default_capes | string[] | 1 стандартный плащ | нет | Список URL дефолтных плащей для новых пользователей. |
Внешний вид (appearance)
Настройки оформления сайта, текстов главной страницы и ссылки на социальные сети.
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
appearance.themePreset | string | default | да | Пресет цветовой темы сайта. |
appearance.layoutPreset | string | floating | да | Пресет расположения блоков на сайте. |
hero.title | string | Модовый Minecraft-проект нового поколения | да | Заголовок на главной странице. |
hero.description | string | (текст по умолчанию) | да | Описание на главной странице. |
footer.description | string | (текст по умолчанию) | да | Описание в футере сайта. |
social.discord | string | — | да | Ссылка на Discord сервер. |
social.telegram | string | — | да | Ссылка на Telegram канал/группу. |
social.vk | string | — | да | Ссылка на группу ВКонтакте. |
social.youtube | string | — | да | Ссылка на YouTube канал. |
social.twitch | string | — | да | Ссылка на Twitch канал. |
Подключения и OAuth (integrations)
Настройки OAuth-провайдеров для привязки внешних аккаунтов, а также интеграций уведомлений и LiteBans.
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
connections.client_app_url | string | http://localhost:3000 | нет | Базовый URL клиентского приложения для редиректов после авторизации через внешние сервисы. |
connections.discord.client_id | string | — | нет | Идентификатор приложения Discord для OAuth-подключения аккаунтов. |
connections.discord.client_secret | string | — | нет | Секрет приложения Discord для OAuth-подключения аккаунтов. |
connections.discord.redirect_uri | string | http://localhost:3001/connections/discord/callback | нет | Redirect URI, зарегистрированный в приложении Discord. |
connections.discord.scopes | string[] | ['identify', 'email'] | нет | Список OAuth-скоупов Discord, запрашиваемых при подключении аккаунта. |
connections.vk.client_id | string | — | нет | Идентификатор приложения VK для OAuth-подключения аккаунтов. |
connections.vk.client_secret | string | — | нет | Секрет приложения VK для OAuth-подключения аккаунтов. |
connections.vk.redirect_uri | string | http://localhost:3001/connections/vk/callback | нет | Redirect URI, зарегистрированный в приложении VK. |
connections.vk.scopes | string[] | ['email'] | нет | Список OAuth-скоупов VK, запрашиваемых при подключении аккаунта. |
connections.vk.api_version | string | 5.199 | нет | Версия VK API для запросов. |
connections.telegram.bot_token | string | — | нет | Токен Telegram бота для авторизации через Telegram Login Widget. |
connections.telegram.bot_id | string | — | нет | ID Telegram бота (числовой, можно получить из токена или @userinfobot). |
connections.google.client_id | string | — | нет | Идентификатор приложения Google для OAuth-подключения аккаунтов. |
connections.google.client_secret | string | — | нет | Секрет приложения Google для OAuth-подключения аккаунтов. |
connections.google.redirect_uri | string | http://localhost:3001/connections/google/callback | нет | Redirect URI, зарегистрированный в приложении Google. |
connections.google.scopes | string[] | scopes profile + email | нет | Список OAuth-скоупов Google, запрашиваемых при подключении аккаунта. |
connections.yandex.client_id | string | — | нет | Идентификатор приложения Yandex для OAuth-подключения аккаунтов. |
connections.yandex.client_secret | string | — | нет | Секрет приложения Yandex для OAuth-подключения аккаунтов. |
connections.yandex.redirect_uri | string | http://localhost:3001/connections/yandex/callback | нет | Redirect URI, зарегистрированный в приложении Yandex. |
Уведомления
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
notifications.discord_bot_token | string | — | нет | Токен Discord бота для отправки уведомлений в ЛС. |
notifications.push_vapid_public_key | string | — | да | VAPID публичный ключ для Web Push уведомлений. |
notifications.push_vapid_private_key | string | — | нет | VAPID приватный ключ для Web Push уведомлений. |
notifications.push_vapid_subject | string | mailto:admin@example.com | нет | VAPID subject (email или URL). |
LiteBans
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
punishments.litebans.enabled | boolean | false | нет | Включить интеграцию с LiteBans. |
punishments.litebans.syncInterval | number | 60 | нет | Интервал синхронизации с LiteBans (секунды). |
Redirect URI для каждого провайдера формируется по шаблону: {API_URL}/connections/{provider}/callback. Например: https://api.myserver.com/connections/discord/callback.
Наказания и платный разбан (security)
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
punishments.enabled | boolean | true | нет | Включить систему наказаний. |
punishments.unban.enabled | boolean | false | да | Разрешить платный разбан в личном кабинете. |
punishments.unban.allowedTypes | string[] | ['ban'] | нет | Типы наказаний, которые можно снять платно (ban, mute, warn). |
punishments.unban.allowHwidBans | boolean | false | нет | Разрешить платный разбан для HWID-банов. |
punishments.unban.allowIpBans | boolean | true | нет | Разрешить платный разбан для IP-банов. |
punishments.unban.basePrice | number | 100 | да | Базовая цена разбана (в рублях). |
punishments.unban.allowRepeatPurchase | boolean | true | нет | Разрешить повторную покупку разбана. |
punishments.unban.repeatPriceFormula | string | multiply | нет | Формула цены повторного разбана: multiply (умножение), power (степень), fixed (фиксированная). |
punishments.unban.repeatPriceMultiplier | number | 2 | нет | Множитель/степень для формулы цены повторного разбана. |
Логирование (logging)
| Ключ | Тип | По умолчанию | Публичная | Описание |
|---|
logging.channels | string[] | ['console'] | нет | Каналы для отправки логов (console, telegram, discord). |
logging.telegram.bot_token | string | — | нет | Токен Telegram бота для отправки логов. |
logging.telegram.chat_id | string | — | нет | ID чата Telegram для отправки логов. |
logging.discord.bot_token | string | — | нет | Токен Discord бота для отправки логов. |
logging.discord.channel_id | string | — | нет | ID канала Discord для отправки логов. |