36 lines
2.8 KiB
Markdown
36 lines
2.8 KiB
Markdown
# Публикация: домены, 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 │
|
||
│ ▲ autossh (постоянно) │
|
||
│ └── Pi : app:8000 PROD │
|
||
forbidden-stars.ru ──►│ :443 (cert твой) → 127.0.0.1:9001 │
|
||
│ ▲ ssh (по требованию) │
|
||
│ └── ПК : 5173(dev)/8080(test)│
|
||
└───────────────────────────────────────────────────┘
|
||
```
|
||
|
||
- **PROD** — Pi, `forbiddenstars.ru`, туннель постоянный (autossh-служба). См. [`pi/`](pi/README.md).
|
||
- **DEV/TEST** — ПК, `forbidden-stars.ru`, туннель по требованию: в `.env` поставь
|
||
`LOCAL_PUBLIC=vps` и запусти `run.ps1` (dev → туннель на vite:5173; test → на :8080).
|
||
Dev и test делят порт `9001` — по очереди.
|
||
- Разделение окружений сохраняется на уровне приложения (свои `APP_ENV`, БД, контейнеры);
|
||
домены разные, поэтому прод и dev/test могут работать одновременно.
|
||
|
||
Настройка по шагам:
|
||
1. **VPS** — [`vps/README.md`](vps/README.md): Caddy, файрвол, пользователь `tunnel`, сертификаты, `Caddyfile`.
|
||
2. **Pi (прод)** — [`pi/README.md`](pi/README.md): Docker-приложение + autossh-служба туннеля.
|
||
3. **ПК (dev/test)** — ключ для `tunnel@VPS` (`ssh-copy-id`), затем `LOCAL_PUBLIC=vps` + `run.ps1`.
|
||
|
||
Секреты не в git: сертификаты/ключи (`*.pem`, `*.key`, SSH-ключи) живут на VPS/Pi/ПК,
|
||
в репозитории только `Caddyfile` и юнит-шаблон.
|
||
|
||
> Telegram-вход требует HTTPS-домен: у BotFather `/setdomain` укажи оба домена
|
||
> (`forbiddenstars.ru` и `forbidden-stars.ru`).
|