c617c05233
CI (build/deploy) и рантайм самого бэкенда (провижининг новых нод через NodeService::provision_node_via_ssh — раньше читал GHCR_TOKEN, теперь GITEA_REGISTRY_TOKEN) теперь используют gitea.netrunner-vpn.com вместо ghcr.io. .github/workflows остались нетронутыми — та копия для настоящего GitHub CI, там ghcr.io уместен и дальше (свой GITHUB_TOKEN, не наш секрет).
131 lines
8.9 KiB
Bash
131 lines
8.9 KiB
Bash
# =====================================================================
|
||
# ЭТОТ ФАЙЛ БОЛЬШЕ НЕ КОПИРУЕТСЯ РУКАМИ НА СЕРВЕР. .env на проде (и на
|
||
# dev-стенде) теперь целиком собирается .gitea/workflows/deploy.yml (job
|
||
# deploy-prod/deploy-dev) из repo Variables/Secrets этого репозитория при
|
||
# каждом деплое — см. комментарии в самом deploy.yml, там точная карта
|
||
# "какая переменная .env ← какой vars.*/secrets.*". Файл ниже остаётся
|
||
# только как справочник по тому, какие ключи вообще существуют, и для
|
||
# локальной разработки (docker-compose.yml, см. .env.dev.example).
|
||
# =====================================================================
|
||
|
||
# =====================================================================
|
||
# === 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
|
||
TON_MASTER_WALLET=UQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKK8y
|
||
|
||
# Бэкапы Postgres (pg_dump + опциональный rclone) теперь настраиваются в
|
||
# netrunner-data/.env (там же, где физически стоит БД) — см.
|
||
# netrunner-data/scripts/backup.sh. Здесь их больше нет.
|
||
|
||
# =====================================================================
|
||
# === НАБЛЮДАЕМОСТЬ ===
|
||
# =====================================================================
|
||
# Prometheus/Loki/Grafana теперь единым стеком на VPS с данными (см.
|
||
# netrunner-data/docker-compose.observability.yml) — GRAFANA_PASSWORD
|
||
# больше не нужен здесь. Этот бэкенд только пушит логи туда через тонкий
|
||
# promtail (сервис `promtail` в docker-compose.prod.yml) — публичный адрес
|
||
# того VPS, порт 3100 (обязательно зафайрволенный там на IP этого хоста).
|
||
LOKI_PUSH_URL=http://CHANGE_ME_DATA_VPS_IP:3100
|
||
|
||
# Публичный URL Grafana за auth-гейтом Caddy (см.
|
||
# netrunner-data/observability/Caddyfile) — отдаётся фронту через
|
||
# GET /api/v1/config для встройки в ObservabilityPage.tsx (frontend/src/).
|
||
# Не задан — страница просто не показывает дашборды. Ставить ТОЛЬКО после
|
||
# того, как в Caddyfile настоящий backend-URL вместо CHANGE_ME_BACKEND_PUBLIC_URL —
|
||
# иначе будет вести на нерабочий auth-гейт.
|
||
GRAFANA_PUBLIC_URL=https://CHANGE_ME_GRAFANA_DOMAIN
|
||
|
||
# Опционально: без него оплата через @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 ===
|
||
# =====================================================================
|
||
# Токен Gitea (право write:package) — нужен самому бэкенду в рантайме для
|
||
# провижининга новых нод (см. NodeService::provision_node_via_ssh, шлёт этот
|
||
# же токен на ноду, чтобы она тоже могла тянуть образ с Gitea Registry).
|
||
GITEA_REGISTRY_TOKEN=CHANGE_ME_GITEA_REGISTRY_TOKEN
|
||
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 |