build(photo-ai): loopback-порт 8081 и раздел про фото-ИИ в README
photo-ai не имел ports, а хостовый 8080 уже занят text-corrector: ручные проверки из плана попадали не туда. Проброшено 127.0.0.1:8081:8080 — только loopback, наружу ничего не публикуется. Заодно исправлен рассинхрон .env.example: там стоял пустой PHOTO_AI_URL с комментарием «пусто = контейнер photo-ai», из-за чего копирование примера молча выключало фото-ИИ (в compose дефолт http://photo-ai:8080). Теперь дефолт указан явно, пустое значение описано как «выключить сервис».
This commit is contained in:
@@ -119,6 +119,32 @@ REDIS_PASSWORD=случайная-длинная-строка
|
||||
|
||||
Имя узла Tailscale задаётся в `docker-compose.yml` (`tailscale.hostname`, по умолчанию `whatido`).
|
||||
|
||||
## ИИ-улучшение фото (photo-ai)
|
||||
|
||||
Сервис `photo-ai` (Real-ESRGAN) поднимается вместе со стеком и **включён по умолчанию**: `PHOTO_AI_URL`
|
||||
в `docker-compose.yml` равен `http://photo-ai:8080`, кнопка «🤖 ИИ» активна, а задания обрабатывает
|
||||
фоновый воркер. Работает на CPU, GPU не требуется.
|
||||
|
||||
| Переменная | По умолчанию | Назначение |
|
||||
|---|---|---|
|
||||
| `PHOTO_AI_URL` | `http://photo-ai:8080` | Адрес сервиса. **Пустое значение = сервис выключен**: кнопка «🤖 ИИ» скрыта, `POST /api/entries/:id/photo/enhance-ai` отвечает `503`, приложение при этом полностью работоспособно |
|
||||
| `PHOTO_AI_MAX_PIXELS` | `4000000` | Максимум пикселей входного изображения, вход большего размера уменьшается |
|
||||
| `PHOTO_AI_SOFT_MAX_RETRIES` | `60` | Сколько раз задание ждёт недоступный сервис, не увеличивая счётчик попыток; после исчерпания — честная ошибка |
|
||||
| `PHOTO_AI_SOFT_BACKOFF_MS` | `10000` | Первая пауза перед мягким повтором |
|
||||
| `PHOTO_AI_SOFT_BACKOFF_MAX_MS` | `300000` | Потолок паузы (задержка растёт вдвое) |
|
||||
|
||||
Порт `8081` на `127.0.0.1` — только loopback хоста, наружу ничего не публикуется (хостовый `8080` занят
|
||||
`text-corrector`). Ручные проверки сервиса:
|
||||
|
||||
```bash
|
||||
curl http://127.0.0.1:8081/health
|
||||
curl -F "image=@photo.jpg" -F "scale=2" http://127.0.0.1:8081/enhance -o out.jpg
|
||||
```
|
||||
|
||||
Состояние сервиса и воркера — в `GET /api/photo-jobs/status` (admin): `service` отдаёт health фото-сервиса
|
||||
(`configured`, `reachable`, `latency_ms`, `error`), `ai_configured` — задан ли `PHOTO_AI_URL`,
|
||||
`worker` — состояние очереди и конфигурация воркера.
|
||||
|
||||
## Публичный доступ через Tailscale
|
||||
|
||||
Стек не требует внешнего IP и проброса портов: контейнер `tailscale` запускается с `network_mode: host`, входит в вашу tailnet-сеть и через **Serve** открывает приложение внутри tailnet, а через **Funnel** — в публичном интернете.
|
||||
|
||||
Reference in New Issue
Block a user