591643d364
ADMIN_TG_ID нигде не читается с тех пор, как admin_guard заменили на ролевую систему (owner/staff/node_manage/partner_guard) — оставлять его в примерах вводит в заблуждение. PROXY_INTERNAL_SECRET, наоборот, обязателен (main.rs падает без него при старте), но отсутствовал во всех трёх .env*.example. Заодно поправлен src/modules/auth/README.md — описывал admin_guard, которого больше не существует.
105 lines
6.4 KiB
Bash
105 lines
6.4 KiB
Bash
# =====================================================================
|
||
# === DATABASE CONFIGURATION ===
|
||
# =====================================================================
|
||
# ВАЖНО: значения ниже — это плейсхолдеры-заглушки (CHANGE_ME_*), не реальный
|
||
# пароль. Не копировать "как есть" — реальный пароль генерировать самостоятельно
|
||
# (например `openssl rand -base64 24`) и никогда не коммитить .env с настоящим
|
||
# значением (см. .gitignore — .env/.env.* уже исключены).
|
||
#
|
||
# ДЛЯ ЛОКАЛЬНЫХ ТЕСТОВ НА ТВОЕМ ПК:
|
||
# DATABASE_URL=postgres://netrunner_admin:CHANGE_ME_DB_PASSWORD@<ip-впс>:5432/netrunner
|
||
#
|
||
# ДЛЯ ЗАПУСКА НА САМОЙ ВПС (Через Docker Compose):
|
||
# DATABASE_URL=postgres://netrunner_admin:CHANGE_ME_DB_PASSWORD@db:5432/netrunner
|
||
|
||
DATABASE_URL=postgres://netrunner_admin:CHANGE_ME_DB_PASSWORD@db:5432/netrunner
|
||
|
||
DB_USER=netrunner_admin
|
||
DB_NAME=netrunner
|
||
DB_PASSWORD=CHANGE_ME_DB_PASSWORD
|
||
|
||
# Кеш курса TON (не источник истины — если недоступен, приложение просто
|
||
# ходит в TonAPI напрямую на каждый инвойс, как раньше).
|
||
REDIS_URL=redis://redis:6379
|
||
|
||
# =====================================================================
|
||
# === SECRETS & CRYPTO SECURITY ===
|
||
# =====================================================================
|
||
JWT_SECRET=CHANGE_ME_JWT_SECRET_openssl_rand_hex_32
|
||
ARGON_SALT=CHANGE_ME_ARGON_SALT_MIN_16_CHARS
|
||
GRAFANA_PASSWORD=CHANGE_ME_GRAFANA_PASSWORD
|
||
TON_MASTER_WALLET=UQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKK8y
|
||
|
||
# =====================================================================
|
||
# === БЭКАПЫ POSTGRES (см. scripts/backup.sh, сервис `backup` в
|
||
# === docker-compose.prod.yml) ===
|
||
# =====================================================================
|
||
# Без RCLONE_REMOTE/RCLONE_CONFIG_CONTENT бэкапы всё равно снимаются каждые
|
||
# BACKUP_INTERVAL_SEC (по умолчанию 6ч) и хранятся локально в volume
|
||
# netrunner_db_backups — но только на этом же VPS. Для реальной защиты от
|
||
# падения диска/потери сервера нужна офсайт-копия:
|
||
# BACKUP_INTERVAL_SEC=21600
|
||
# BACKUP_RETENTION_DAYS=14
|
||
# RCLONE_REMOTE=b2:netrunner-backups
|
||
# RCLONE_CONFIG_CONTENT содержимое rclone.conf одной переменной, см. rclone.conf.example
|
||
|
||
# Опционально: без него оплата через @CryptoBot вернёт "provider not
|
||
# supported", остальные провайдеры продолжают работать. Токен — у @CryptoBot:
|
||
# /pay -> Create App -> Payment Token.
|
||
CRYPTOBOT_API_TOKEN=
|
||
|
||
# =====================================================================
|
||
# === TELEGRAM API INTEGRATION ===
|
||
# =====================================================================
|
||
# BOT_ENABLED=false → реальный токен не требуется (для локальной разработки).
|
||
BOT_ENABLED=true
|
||
TELOXIDE_TOKEN=123456789:YOUR_REAL_TELEGRAM_BOT_TOKEN_HERE
|
||
BOT_USERNAME=ntrnr_vpn_bot
|
||
WEB_APP_BASE_URL=https://account.netrunner-vpn.com
|
||
|
||
# =====================================================================
|
||
# === ВНУТРЕННИЙ КОНТРАКТ С ПРОКСИ-НОДАМИ (обязателен, без него старт падает) ===
|
||
# =====================================================================
|
||
# Общий секрет между бэкендом и КАЖДОЙ прокси-нодой (X-Internal-Secret на
|
||
# POST /internal/validate и /internal/usage, см. modules::proxy_internal) —
|
||
# то же самое значение прописывается на нодах при провижининге
|
||
# (NodeService::provision_node_via_ssh) и в .env.example netrunner-proxy.
|
||
PROXY_INTERNAL_SECRET=CHANGE_ME_PROXY_INTERNAL_SECRET_openssl_rand_hex_32
|
||
|
||
# =====================================================================
|
||
# === APPLICATION RUNTIME SETTINGS ===
|
||
# =====================================================================
|
||
PORT=8080
|
||
FRONTEND_DIR=frontend/dist
|
||
SUBSCRIPTION_CHECK_INTERVAL=1800
|
||
# Как часто (сек) health-check воркер TCP-пингует VPN-ноды и переоценивает online/offline.
|
||
NODE_HEALTH_CHECK_INTERVAL=60
|
||
APP_ENV=development
|
||
RUST_LOG=netrunner_control_plane=debug,axum=info,tower_http=debug,sqlx=info
|
||
|
||
# Разрешённые CORS origin'ы (через запятую): лендинг + ЛК (сабдомен) + tauri/localhost-приложение.
|
||
CORS_ALLOWED_ORIGINS=https://netrunner-vpn.com,https://account.netrunner-vpn.com,tauri://localhost,http://tauri.localhost
|
||
|
||
# Origin'ы, которым разрешено проходить CSRF-проверку cookie-сессий (Origin/Referer).
|
||
# Обычно совпадает с "браузерными" origin'ами из CORS_ALLOWED_ORIGINS выше (без Tauri).
|
||
CSRF_ALLOWED_ORIGINS=https://netrunner-vpn.com,https://account.netrunner-vpn.com
|
||
|
||
# Domain для Set-Cookie сессионных cookie. Пусто → host-only cookie (для локальной
|
||
# разработки/localhost). В проде — общий родительский домен лендинга и ЛК, чтобы одна
|
||
# сессия работала на обоих сабдоменах.
|
||
COOKIE_DOMAIN=.netrunner-vpn.com
|
||
|
||
# Secure-атрибут cookie. В проде (HTTPS) — обязательно true; false допустим только
|
||
# на стендах без TLS (см. .env.dev-remote.example) — иначе браузер молча выбросит
|
||
# такую cookie, полученную по голому HTTP, и сессия не переживёт ни одного запроса.
|
||
COOKIE_SECURE=true
|
||
|
||
# =====================================================================
|
||
# === DEPLOYMENT & REPOSITORY SETTINGS ===
|
||
# =====================================================================
|
||
GHCR_TOKEN=ghp_ТВОЙ_ТОКЕН_ОТ_ГИТХАБА_ДЛЯ_ДОСТУПА_К_РЕЕСТРУ
|
||
VPS_IP=77.110.106.113
|
||
DEPLOY_DIR=/root/netrunner-core
|
||
BINARY_NAME=netrunner-control-plane
|
||
# Образ, который тянет прод-стек (docker-compose.prod.yml).
|
||
IMAGE=ghcr.io/nineap/netrunner-control-plane:latest |