Files
ForbiddenStarsApp/deploy/README.md
T

4.0 KiB
Raw Blame History

Публикация: домены, VPS, туннели

Приложение крутится дома (Pi — прод) и на твоём ПК (dev/test). Дома белого IP нет (CGNAT), поэтому наружу выставляем через VPS-привратник: на нём Caddy терминирует HTTPS твоими сертификатами и проксирует трафик в SSH reverse-туннели, которые приложение само открывает к VPS.

                       ┌──────────── VPS 186.246.51.17 (Caddy) ───────────┐
 forbiddenstars.ru ───►│ :443 (cert твой) → 127.0.0.1:9000               │
                       │                        ▲ туннель-КОНТЕЙНЕР        │
                       │                        └── Pi : app:8000   PROD   │
 forbidden-stars.ru ──►│ :443 (cert твой) → 127.0.0.1:9001               │
                       │                        ▲ контейнер (test) ИЛИ     │
                       │                        ▲ ssh с ПК (dev)           │
                       │                        ├── ПК test : app:8000     │
                       │                        └── ПК dev  : vite:5173     │
                       └───────────────────────────────────────────────────┘
  • PROD — Pi. docker compose up -d поднимает два сервиса: app + tunnel. У app портов на хост нет — наружу его выставляет только туннель-контейнер (ssh -R 9000:app:8000 к VPS). Постоянно, Docker сам переподключает. См. pi/.
  • TEST — ПК. То же самое: docker compose -f docker-compose.test.yml up поднимает app + tunnel (ssh -R 9001:app:8000). Портов на хост нет — тест виден только на forbidden-stars.ru. Обычно запускается лаунчером при APP_ENV=test.
  • DEV — ПК, нативно (uvicorn+vite). По умолчанию только на localhost; при LOCAL_PUBLIC=vps лаунчер (run.ps1) дополнительно поднимает SSH-туннель с ПК (ssh -R 9001:localhost:5173) → дев виден на forbidden-stars.ru.
  • DEV и TEST делят слот 9001 (forbidden-stars.ru) → поднимай что-то одно за раз. PROD на отдельном слоте 9000 (forbiddenstars.ru) — работает независимо.

Ключ туннеля — deploy/tunnel/id_tunnel (приватный, в git не идёт). Его публичную часть добавь в authorized_keys пользователя tunnel на VPS. Один и тот же ключ годится для контейнерного туннеля (Pi/ПК) и для dev-туннеля run.ps1.

Настройка по шагам:

  1. VPS — vps/README.md: Caddy, файрвол, пользователь tunnel, сертификаты, Caddyfile.
  2. Pi (прод) — pi/README.md: ключ в deploy/tunnel/id_tunnel, .env, docker compose up -d.
  3. ПК (dev/test) — тот же ключ в deploy/tunnel/id_tunnel (для test-контейнера) и/или ключ по умолчанию для dev (run.ps1); pubkey — в authorized_keys у tunnel@VPS.

Секреты не в git: сертификаты/ключи (*.pem, *.key, id_tunnel*) живут на VPS/Pi/ПК, в репозитории только Caddyfile, deploy/tunnel/ (образ туннеля) и шаблоны.

Telegram-вход требует HTTPS-домен: у BotFather /setdomain укажи оба домена (forbiddenstars.ru и forbidden-stars.ru).