# ===================================================================== # DEV VPS (docker-compose.dev-remote.yml). Скопируй в .env прямо на # сервере (в DEPLOY_DIR) — файл гитигнорится, в репозиторий не попадает. # # ВАЖНО: Telegram Login Widget не работает на голом IP — /setdomain в # BotFather принимает только доменное имя. На этот dev VPS (45.76.161.137) # заведён DNS A-record dev.netrunner-vpn.com — используй его во всех # URL ниже (и в аналогичном .env для netrunner-landing), а не IP напрямую. # # ВАЖНО #2: Telegram Web Apps (кнопки бота "Личный Кабинет"/"Тарифы"/ # "Синдикат") требуют https:// URL, а Telegram Login Widget в обычном браузере # требует именно порт 443 (его CSP frame-ancestors не учитывает порт и всегда # подразумевает дефолтный для схемы) — оба жёсткие требования платформы, не # нашего кода. HTTPS для dev поднят через Caddy (docker-compose.dev-remote.yml) # на порту 443, сертификат — через DNS-01 challenge (Cloudflare, порт 80 # закрыт — обычный HTTP-01 не пройдёт). Нужен CF_API_TOKEN ниже. Порт 443 # раньше занимала VPN-нода — перенесена на другой порт на этом же VPS. # ===================================================================== DB_USER=netrunner_admin DB_PASSWORD=CHANGE_ME_DEV_DB_PASSWORD DB_NAME=netrunner # Токен Cloudflare для DNS-01 (выпуск TLS-сертификата Caddy'ем без открытых # 80/443) — создать в Cloudflare: My Profile → API Tokens → Create Token → # шаблон "Edit zone DNS", ограниченный зоной netrunner-vpn.com. НЕ Global API Key. CF_API_TOKEN=CHANGE_ME_CLOUDFLARE_DNS_EDIT_TOKEN JWT_SECRET=CHANGE_ME_DEV_JWT_SECRET ARGON_SALT=CHANGE_ME_DEV_ARGON_SALT_MIN_16_CHARS TON_MASTER_WALLET=UQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKK8y # Общий секрет с прокси-нодами этого dev-стенда (--require-auth) — обязателен, # без него бэкенд не стартует. То же значение должно быть в .env.example # netrunner-proxy на самих нодах. PROXY_INTERNAL_SECRET=CHANGE_ME_DEV_PROXY_INTERNAL_SECRET # Опционально: без него оплата через @CryptoBot просто вернёт "provider not # supported", остальное продолжает работать как раньше. Токен берётся у # @CryptoBot: /pay -> Create App -> Payment Token (лучше завести отдельное # приложение для dev, чтобы инвойсы не путались с прод-платежами). CRYPTOBOT_API_TOKEN=CHANGE_ME_CRYPTOBOT_API_TOKEN CRYPTOBOT_TESTNET=true BOT_ENABLED=true # ОТДЕЛЬНЫЙ dev-бот, не прод-бот: у прод-бота в BotFather уже прописан # прод-домен через /setdomain, и один бот не может обслуживать два разных # домена одновременно. Заведи через @BotFather нового бота специально для # dev и здесь, и в BOT_USERNAME у netrunner-landing (см. её .env на этом # же сервере) укажи именно его username — иначе виджет логина молча # использует прод-бота и Telegram ответит "Bot domain invalid". TELOXIDE_TOKEN=123456789:YOUR_DEV_BOT_TOKEN_HERE BOT_USERNAME=your_dev_bot_username # https, порт 443 — через Caddy (см. выше), не порт 8080 напрямую: WebApp # от Telegram по http:// открывать откажется. WEB_APP_BASE_URL=https://dev.netrunner-vpn.com SUBSCRIPTION_CHECK_INTERVAL=1800 RUST_LOG=netrunner_control_plane=debug,axum=info,tower_http=debug,sqlx=warn # dev.netrunner-vpn.com:3000 — netrunner-landing, задеплоенный на этот же dev # VPS (docker-compose.dev-remote.yml в репозитории netrunner-landing), обычный # HTTP. dev.netrunner-vpn.com — сам бэкенд через Caddy (см. выше). # COOKIE_DOMAIN нарочно пуст: host-only cookie уже расшаривается между # портами одного и того же хоста браузером — Domain нужен только для # реальных сабдоменов (прод). CORS_ALLOWED_ORIGINS=http://localhost:1420,http://localhost:5173,tauri://localhost,http://tauri.localhost,http://dev.netrunner-vpn.com:3000,https://dev.netrunner-vpn.com CSRF_ALLOWED_ORIGINS=http://localhost:1420,http://localhost:5173,http://dev.netrunner-vpn.com:3000,https://dev.netrunner-vpn.com COOKIE_DOMAIN= # true (как в проде): теперь у бэкенда есть настоящий TLS через Caddy на 443. # Прямой доступ на голый :8080 (без Caddy) для браузерных auth-флоу больше не # годится — Secure-cookie по нему браузер по-прежнему отбросит, это ожидаемо: # все клиентские сценарии (бот, лендинг) идут через Caddy на 443. COOKIE_SECURE=true