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