Files
netrunner-backend/.env.example
T
nineap 591643d364 Чинит .env.example: убирает мёртвый ADMIN_TG_ID, добавляет PROXY_INTERNAL_SECRET
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,
которого больше не существует.
2026-07-09 15:33:33 +07:00

105 lines
6.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =====================================================================
# === 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