# ===================================================================== # === DATABASE CONFIGURATION === # ===================================================================== # ВАЖНО: значения ниже — это плейсхолдеры-заглушки (CHANGE_ME_*), не реальный # пароль. Не копировать "как есть" — реальный пароль генерировать самостоятельно # (например `openssl rand -base64 24`) и никогда не коммитить .env с настоящим # значением (см. .gitignore — .env/.env.* уже исключены). # # ДЛЯ ЛОКАЛЬНЫХ ТЕСТОВ НА ТВОЕМ ПК: # DATABASE_URL=postgres://netrunner_admin:CHANGE_ME_DB_PASSWORD@: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