34f75bacd3
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Деплой MedArchive
Контейнер API (FastAPI) за общим Caddy на Selectel KZ. Read-only поиск работает на
готовой SQLite-базе; приём ZIP через интерфейс (/ingest) дораспаковывает и нормализует
новые прайсы прямо на сервере, поэтому в образ включены тяжёлые зависимости (pdfplumber,
pymupdf, google-genai), а контейнеру нужен ключ Gemini.
Раскладка на сервере
/root/medarchive/— код и данные, монтируется в контейнер как/app:api/,contracts/,etl/— код (правки кода не требуют пересборки образа);web/— статический фронт (его же отдаёт Caddy);data/medarchive.db— собранная база,data/quality_report.json— отчёт сборки;data/dict_emb.npy— кэш эмбеддингов справочника (чтобы догрузка не пересчитывала его);data/reference/dictionary.xlsx— эталонный справочник услуг для нормализации.
/root/med-hackathon/— каталог Caddy:docker-compose.yml,Dockerfile,Caddyfile,site/(презентации) и.envсGEMINI_API_KEY(в публичный репозиторий не попадает).
Шаги
- Залить код и данные в
/root/medarchive/(см. раскладку выше). - Положить
docker-compose.yml,Dockerfile,Caddyfileв/root/med-hackathon/. - Создать
/root/med-hackathon/.env:GEMINI_API_KEY=… - Собрать образ и поднять стек:
cd /root/med-hackathon docker compose build api docker compose up -d - Маршруты Caddy:
/api/*→ контейнер API,/→ фронт,/demoи/day1→ презентации.
Авто-загрузка из папки
Сервис сам забирает свежие прайсы из папки без участия человека:
- Папка на хосте
/root/medarchive/inboxсмонтирована в контейнер как/app/inbox(она внутри тома/root/medarchive). - Путь задаётся в админке или запросом:
curl -X POST ".../api/settings?watch_folder=/app/inbox". - Крон на хосте дёргает обработку каждые 10 минут:
Уже обработанные файлы фиксируются в
*/10 * * * * curl -fsS -X POST https://med.secondbrain.tools/api/scan -o /dev/nullingested_fileи повторно не берутся.
Проверка
curl https://med.secondbrain.tools/api/health
curl https://med.secondbrain.tools/api/stats
# приём архива через интерфейс:
curl -X POST https://med.secondbrain.tools/api/ingest -F "file=@archive.zip"