Files
ForbiddenStarsApp/deploy/pi

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:

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

cp .env.example .env        # заполни секреты; APP_ENV контейнер форсит в production

Проверь, что заданы параметры VPS (их читает сервис tunnel):

VPS_TUNNEL_HOST=186.246.51.17
VPS_TUNNEL_USER=tunnel

3. Запуск

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 — должен отдать прод.

Обновление

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).