Files
inventory/README.md
2026-07-21 16:11:09 +05:00

3.6 KiB
Raw Permalink Blame History

Инвентаризация

Сервис учёта инвентаря: объекты (инвентарный номер, описание, фото) складываются в ящики (с вложенностью), у каждого объекта и ящика есть QR-код — сканирование обычной камерой телефона открывает публичную страницу с описанием и фото, без установки приложений. Правки защищены простым admin-логином, просмотр — публичный.

Стек: FastAPI + SQLAlchemy (async) + PostgreSQL, MinIO (S3) для фото, React + Vite + Tailwind на фронте, всё поднимается через Docker Compose.

Быстрый старт (локально)

  1. Скопируйте .env.example в .env и при желании поменяйте пароли/секреты:
    cp .env.example .env
    
  2. Поднимите весь стек:
    docker compose up -d --build
    
    Первый запуск: поднимутся Postgres и MinIO, применятся миграции (сервис migrate), создастся бакет MinIO с публичным доступом на чтение (сервис minio-init), затем стартуют backend и frontend.
  3. Создайте первого администратора:
    docker compose exec backend uv run python -m app.cli --username admin
    
    (спросит пароль интерактивно; логин без прав — без него нельзя добавлять/редактировать объекты и ящики).
  4. Откройте:

Публичные страницы объекта/ящика (/objects/:id, /boxes/:id) открываются без авторизации — именно на них ведут QR-коды.

Разработка

Исходники backend/ и frontend/ смонтированы в контейнеры (см. docker-compose.override.yml), оба сервиса перезапускаются на лету (uvicorn --reload, vite). Изменения в коде подхватываются без пересборки образа; пересборка (--build) нужна только при изменении зависимостей (pyproject.toml/package.json) или Dockerfile.

Новая миграция после изменения моделей:

docker compose exec backend uv run alembic revision --autogenerate -m "..."
docker compose exec backend uv run alembic upgrade head

Тесты бэкенда:

docker compose exec backend uv run pytest

Прод-деплой

Пока не настроен (нет docker-compose.prod.yml, реверс-прокси и TLS) — это следующий шаг, когда сервис будет готов выкатывать на сервер с доменом. Тогда потребуется поменять в .env PUBLIC_BASE_URL и MINIO_PUBLIC_URL на реальный домен (они зашиты в QR-коды и ссылки на фото) и добавить реверс-прокси (например, Caddy) для HTTPS.