Сервис управления документами на Spring Boot с хранением файлов в S3-совместимом хранилище (MinIO) и метаданными в PostgreSQL.
- загружает и отдает документы;
- хранит бинарные файлы в S3 (MinIO);
- хранит метаданные документов в PostgreSQL;
- запускает связанные бизнес-процессы через Camunda;
- отдает служебные endpoint'ы Actuator и метрики Prometheus.
- Java 17
- Spring Boot 2.7.x
- Spring Web, Spring Data JPA
- PostgreSQL + Flyway
- MinIO (S3)
- Spring Actuator + Prometheus (Micrometer)
- Maven
- Docker / Docker Compose
В docker-compose.yml поднимаются:
document-service- приложение;document-service-postgres- PostgreSQL;document-service-minio- S3-совместимое хранилище MinIO;document-service-minio-init- init-контейнер для создания bucket.
docker compose up --build -dПосле запуска:
- API:
http://localhost:8081 - Swagger UI:
http://localhost:8081/swagger-ui/ - OpenAPI spec:
http://localhost:8081/v3/api-docs - Health:
http://localhost:8081/actuator/health - Prometheus metrics:
http://localhost:8081/actuator/prometheus - MinIO API:
http://localhost:9000 - MinIO Console:
http://localhost:9001 - PostgreSQL:
localhost:5433
docker compose downС удалением томов:
docker compose down -vНиже ключевые переменные из docker-compose.yml (с дефолтами):
DOCUMENT_POSTGRES_DB=document_serviceDOCUMENT_POSTGRES_USER=postgresDOCUMENT_POSTGRES_PASSWORD=postgresDOCUMENT_POSTGRES_HOST=document-service-postgresDOCUMENT_SERVICE_POSTGRES_NODEPORT=5433
DOCUMENT_SERVICE_PORT=8081
DOCUMENT_MINIO_ROOT_USER=minioadminDOCUMENT_MINIO_ROOT_PASSWORD=minioadminDOCUMENT_MINIO_API_PORT=9000DOCUMENT_MINIO_CONSOLE_PORT=9001DOCUMENT_MINIO_REGION=us-east-1DOCUMENT_MINIO_BUCKET_NAME=document-service-documentsDOCUMENT_MINIO_ENDPOINT=http://document-service-minio:9000
INTEGRATION_CAPABILITY_SERVER_URL=http://capability-serviceINTEGRATION_AUTH_SERVER_URL=http://auth-serviceINTEGRATION_DOCUMENT_SERVER_URL=http://document-serviceINTEGRATION_PRODUCT_SERVER_URL=http://product-service
Также в коде используются:
integration.camunda.server.urlintegration.pack-loader-server-urlaws.s3.regionaws.s3.access.keyaws.s3.secret.keyaws.s3.endpointaws.s3.bucket.name
Базовый префикс API: /api/v1.
Основные маршруты:
GET /api/v1/documents/{id}GET /api/v1/documents/importGET /api/v1/documents/exportPOST /api/v1/import/{entityType}POST /api/v1/documents/{path_name}/{doc_type}GET /api/v1/documents/versions/{documentationsTypeId}/{targetId}GET /api/v1/documents/{documentationTypeId}/{targetId}PATCH /api/v1/export/{doc_id}POST /api/v1/export/{entity_type}GET /api/v1/documentations/{entity-type}GET /(welcome endpoint)
В проекте подключен Springfox (OpenAPI 3). После запуска сервиса используйте:
- Swagger UI:
http://localhost:8081/swagger-ui/ - OpenAPI JSON:
http://localhost:8081/v3/api-docs
Если UI не открывается по первому адресу, проверьте также:
http://localhost:8081/swagger-ui/index.html
Для локального окружения S3 реализован через MinIO.
- Откройте MinIO Console:
http://localhost:9001 - Войдите с учетными данными:
- login:
minioadmin(илиDOCUMENT_MINIO_ROOT_USER) - password:
minioadmin(илиDOCUMENT_MINIO_ROOT_PASSWORD)
- login:
- Откройте bucket:
document-service-documents(или значениеDOCUMENT_MINIO_BUCKET_NAME) - Внутри bucket можно просматривать, скачивать и удалять объекты.
Можно открыть объект напрямую по URL:
http://localhost:9000/<bucket>/<object-key>
Пример:
http://localhost:9000/document-service-documents/import/sql.xlsx
Примечание: путь обязательно должен содержать имя bucket, иначе S3 вернет ошибку.
- Flyway включен.
- Рабочая схема:
documents. - Миграции:
src/main/resources/db/migration. - Основные таблицы:
documents.s3_doc,documents.documentation_type.
- Actuator endpoints:
health,info,metrics,prometheus. - Health endpoint используется в healthcheck контейнера.
Логи сервиса:
docker compose logs -f document-serviceПерезапуск только приложения:
docker compose up -d --build document-service