Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 33 additions & 23 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ============================================================
# Шаблон переменных окружения для nowym.
# Шаблон переменных окружения для nowspot.
# Скопируй в .env и заполни значения. НЕ коммить настоящий .env.
# ============================================================

Expand All @@ -14,24 +14,43 @@ TELEGRAM_CHANNEL_ID=
# в личку). Узнать: напиши боту @userinfobot.
ADMIN_USER_ID=

# ---- Spotify ------------------------------------------------
# Client ID приложения Spotify. Создать на developer.spotify.com/dashboard →
# Create app. Redirect URI зависит от того, как ты подключаешь бота:
# • webhook-режим (задан WEBHOOK_HOST ниже): используй
# https://<твой-домен>/spotify/callback — бот сам ловит callback.
# • long-polling / paste-режим: используй http://127.0.0.1:8888/callback,
# юзер после авторизации пришлёт боту значение параметра code= из
# адресной строки. Локальный сервер поднимать не нужно — Spotify просто
# редиректит браузер, ошибка соединения ожидаема, важно взять `code=`.
# Client Secret Spotify для PKCE не нужен (используется code_challenge/verifier).
SPOTIFY_CLIENT_ID=

# Интервал polling'а /me/player/currently-playing в мс. Меньше = быстрее
# обновляется карточка «сейчас играет», больше нагрузка на Spotify API.
# SPOTIFY_NP_POLL_MS=3000
# Интервал между произвольными запросами к API (сек) и число ретраев на 429.
# SPOTIFY_RATE_LIMIT_INTERVAL=0.2
# SPOTIFY_MAX_RETRIES=3

# ---- Postgres ----------------------------------------------
# Две изолированные БД: users (токены, encrypted) и cache (file_id треков).
# install.sh накатывает роли и прописывает эти DSN сам. Руками — создание
# см. в README, формат:
# POSTGRES_USERS_DSN=postgresql://nowym_users_app:PASSWORD@127.0.0.1:5432/nowym_users
# POSTGRES_CACHE_DSN=postgresql://nowym_cache_app:PASSWORD@127.0.0.1:5432/nowym_cache
# POSTGRES_USERS_DSN=postgresql://nowspot_users_app:PASSWORD@127.0.0.1:5432/nowspot_users
# POSTGRES_CACHE_DSN=postgresql://nowspot_cache_app:PASSWORD@127.0.0.1:5432/nowspot_cache
POSTGRES_USERS_DSN=
POSTGRES_CACHE_DSN=
DB_POOL_MIN=1
DB_POOL_MAX=5

# Только для docker-compose: пароли, которыми docs/sql/docker-init.sh создаёт
# роли nowym_users_app/nowym_cache_app при первом старте postgres-контейнера.
# роли nowspot_users_app/nowspot_cache_app при первом старте postgres-контейнера.
# Должны совпадать с паролями внутри POSTGRES_USERS_DSN/POSTGRES_CACHE_DSN
# выше (там host будет `postgres`, не 127.0.0.1). При bare-metal через
# install.sh — не нужны, не трогай.
NOWYM_USERS_PASSWORD=
NOWYM_CACHE_PASSWORD=
NOWSPOT_USERS_PASSWORD=
NOWSPOT_CACHE_PASSWORD=

# ---- Redis ---------------------------------------------------
# Пусто = ioredis-дефолт (127.0.0.1:6379) — то, что нужно для install.sh.
Expand Down Expand Up @@ -63,18 +82,8 @@ MAX_SEARCH_RESULTS=5
HTTP_CONNECTION_LIMIT=100
HTTP_LIMIT_PER_HOST=30

# ---- Яндекс.Музыка -----------------------------------------
# Интервал между запросами к API (секунды). Меньше — агрессивнее, выше шанс 429.
YANDEX_RATE_LIMIT_INTERVAL=1.0
YANDEX_MAX_RETRIES=3

# OAuth Device Flow. Дефолты те же, что использует библиотека yandex-music —
# переопредели только если Яндекс отзовёт ключ или нужны свои.
# YANDEX_OAUTH_CLIENT_ID=23cabbbdc6cd418abb4b39c32c41195d
# YANDEX_OAUTH_CLIENT_SECRET=53bc75238f0c4d08a118e51fe9203300

# ---- Параллелизм скачивания -------------------------------
# Сколько треков качается параллельно суммарно
# Сколько треков (yt-dlp) качается параллельно суммарно
DOWNLOAD_QUEUE_CONCURRENCY=6
# Сколько треков альбома готовятся параллельно для одного пользователя
ALBUM_PARALLEL_TRACKS=4
Expand All @@ -99,8 +108,10 @@ BOT_API_BASE_URL=
# ---- Webhook (нужен ТОЛЬКО если не задан BOT_API_BASE_URL выше) --------
# Публичный URL домена, на который Telegram шлёт апдейты. Пример:
# WEBHOOK_HOST=https://your-domain.example
# Если задан — Spotify OAuth-callback ждём тут же (/spotify/callback), без
# paste-кода в чат.
WEBHOOK_HOST=
WEBHOOK_PATH=/webhook/nowym
WEBHOOK_PATH=/webhook/nowspot
# На каком интерфейсе/порту слушает встроенный http(s)-сервер. Telegram
# разрешает вебхуки на портах 443/80/88/8443.
WEBAPP_HOST=0.0.0.0
Expand All @@ -117,18 +128,17 @@ WEBHOOK_SSL_KEY=
WEBHOOK_SECRET=

# ---- Лирика --------------------------------------------------
# Ключ Genius (genius.com/api-clients) — точнее находит текст по фразе,
# чем фолбэк на Yandex. Пусто — лирика всё равно работает, просто только
# через Yandex (покрытие андеграунда/рэпа заметно хуже).
# Ключ Genius (genius.com/api-clients) — единственный источник лирики
# (Spotify API текста песен не отдаёт). Пусто = лирики не будет вовсе.
GENIUS_TOKEN=

# ---- Now-playing endpoint ----------------------------------
# Bearer-токен для GET /now-playing. Пусто = endpoint всегда отдаёт 401.
# install.sh генерит сам. Руками:
# node -e 'console.log(require("crypto").randomBytes(32).toString("base64url"))'
NOW_PLAYING_TOKEN=
# user_id владельца, под чьим Yandex-токеном держим ws с Ynison.
# По умолчанию = ADMIN_USER_ID. Переопредели если хочешь другого юзера.
# user_id владельца, под чьим Spotify-токеном идёт polling
# /me/player/currently-playing. По умолчанию = ADMIN_USER_ID.
# OWNER_ID=

# ---- Иконки кнопок ------------------------------------------
Expand Down
Loading