3feb2f431c
backend будет жить на отдельном, ещё не арендованном VPS — свой контейнер `db` и бэкапы (scripts/backup.sh) здесь больше не нужны и переехали в netrunner-data, где Postgres теперь физически стоит. DATABASE_URL собирается из DB_HOST/DB_PORT (внешний IP того VPS) с обязательным sslmode=require — трафик пересекает публичную сеть между двумя разными серверами. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
101 lines
6.5 KiB
Bash
101 lines
6.5 KiB
Bash
# =====================================================================
|
||
# === DATABASE CONFIGURATION ===
|
||
# =====================================================================
|
||
# ВАЖНО: значения ниже — это плейсхолдеры-заглушки (CHANGE_ME_*), не реальный
|
||
# пароль. Не копировать "как есть" — реальный пароль генерировать самостоятельно
|
||
# (например `openssl rand -base64 24`) и никогда не коммитить .env с настоящим
|
||
# значением (см. .gitignore — .env/.env.* уже исключены).
|
||
#
|
||
# Postgres физически стоит НЕ на этом VPS, а на отдельном сервере вместе с
|
||
# Vaultwarden (см. netrunner-data/docker-compose.yml, сервис `db`) — этот
|
||
# бэкенд подключается к нему по сети. Полный DATABASE_URL собирает сам
|
||
# docker-compose.prod.yml из DB_USER/DB_PASSWORD/DB_HOST/DB_PORT/DB_NAME ниже
|
||
# (не пишите его здесь отдельной строкой — env_file не подставляет ${...},
|
||
# в отличие от самого docker-compose, так что отдельная строка DATABASE_URL
|
||
# тут просто не сработает). sslmode=require обязателен: без него подключение
|
||
# к hostssl-правилу в pg_hba.conf того сервера будет отклонено.
|
||
|
||
DB_USER=netrunner_admin
|
||
DB_NAME=netrunner
|
||
DB_PASSWORD=CHANGE_ME_DB_PASSWORD
|
||
# IP VPS, где физически стоит Postgres (netrunner-data). Совпадает с DATA_VPS_IP
|
||
# в CI-переменных netrunner-data.
|
||
DB_HOST=CHANGE_ME_DB_HOST_IP
|
||
DB_PORT=5432
|
||
|
||
# Кеш курса 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 (pg_dump + опциональный rclone) теперь настраиваются в
|
||
# netrunner-data/.env (там же, где физически стоит БД) — см.
|
||
# netrunner-data/scripts/backup.sh. Здесь их больше нет.
|
||
|
||
# Опционально: без него оплата через @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=CHANGE_ME_VPS_IP
|
||
DEPLOY_DIR=/root/netrunner-core
|
||
BINARY_NAME=netrunner-control-plane
|
||
# Образ, который тянет прод-стек (docker-compose.prod.yml).
|
||
IMAGE=ghcr.io/nineap/netrunner-control-plane:latest |