Files
ForbiddenStarsApp/deploy/pi/README.md
T

47 lines
2.3 KiB
Markdown

# Raspberry Pi — ПРОД (`forbiddenstars.ru`)
Pi запускает приложение **и туннель** в Docker: `docker compose up` поднимает два сервиса —
`app` (FastAPI + SPA) и `tunnel` (ssh-контейнер). У `app` **портов на хост нет**, наружу он
доступен только через туннель-контейнер (`ssh -R 9000:app:8000` к VPS). Публичная точка —
VPS, домен `forbiddenstars.ru`. Снаружи Pi недоступен (CGNAT) — туннель сам стучится наружу.
## 1. Ключ для туннеля
Туннель-контейнер ходит на `tunnel@VPS` по ключу из `deploy/tunnel/id_tunnel` (gitignored).
Создай ключ и добавь его pubkey в `authorized_keys` пользователя `tunnel` на VPS:
```bash
ssh-keygen -t ed25519 -f deploy/tunnel/id_tunnel -N ""
ssh-copy-id -i deploy/tunnel/id_tunnel.pub tunnel@186.246.51.17
# (или вручную: содержимое deploy/tunnel/id_tunnel.pub -> /home/tunnel/.ssh/authorized_keys на VPS)
```
## 2. .env
```bash
cp .env.example .env # заполни секреты; APP_ENV контейнер форсит в production
```
Проверь, что заданы параметры VPS (их читает сервис `tunnel`):
```
VPS_TUNNEL_HOST=186.246.51.17
VPS_TUNNEL_USER=tunnel
```
## 3. Запуск
```bash
docker compose up -d --build # поднимет app + tunnel
docker compose ps # оба up; tunnel стартует после healthy app
docker compose logs -f tunnel # ждём строку: [tunnel] -R 9000:app:8000 -> tunnel@...
```
Открой `https://forbiddenstars.ru` — должен отдать прод.
## Обновление
```bash
git pull
docker compose up -d --build
```
## Бэкап БД
`scripts/backup.sh` (консистентная онлайн-копия SQLite; по cron на хосте). Том БД — `db-data`.
Логи: `docker compose logs -f app` / `... tunnel`. Если `https://forbiddenstars.ru` отдаёт
502 — значит туннель не поднят: смотри `docker compose logs tunnel` (чаще всего ключ не в
`authorized_keys` на VPS или не заданы `VPS_TUNNEL_*` в `.env`).