Многопользовательское файловое облако. Сервис предоставляет RESTful API для загрузки, скачивания и управления файлами и папками.
- Core: Java 21, Spring Boot 4.0.6, Maven
- Database & Migrations: PostgreSQL 18.3, Flyway
- Cache & Sessions: Redis 8.6
- Message Broker: RabbitMQ 4.3.2
- Object Storage: MinIO 8.6.0 (S3-совместимое хранилище)
- Reverse Proxy: Nginx 1.30
- API Documentation: Swagger UI
- Testing: JUnit, Spring Boot Test, Testcontainers
- Deployment: Docker, Docker Compose
- Стиль авторизации: RPC для регистрации и аутентификации.
- Стиль работы с ресурсами: REST для остальных манипуляций.
- Базовый путь: Префикс
/api(например,/api/auth/sign-up). - Авторизация: Сессии на базе кук.
- Формат данных:
application/json(кроме бинарных файлов). - Обработка ошибок: 4xx, 5xx ошибки возвращают JSON с полем
"message".
- Docker и Docker Compose. Используется многоэтапная сборка, локальные Java/Maven не нужны.
- Настройка окружения: Создайте
.envна основе примера (cp .env.example .env). - Конфигурация Frontend: Укажите адрес backend в
frontend/public/config.js. - Запуск: Выполните команду
docker compose up -d --build.
- Frontend: http://localhost
- Backend API http://localhost:80
- Swagger: http://localhost:8080/swagger-ui/index.html#/
- MinIO Console: http://localhost:9001
- RabbitMQ Management: http://localhost:15672
POST /api/auth/sign-up— Регистрация.POST /api/auth/sign-in— Вход.POST /api/auth/sign-out— Выход.GET /api/user/me— Данные текущего пользователя.
Параметр path — путь к ресурсу, папки должны заканчиваться на /.
GET /api/resource?path=$path— Получить информацию о ресурсе.DELETE /api/resource?path=$path— Удалить ресурс.GET /api/resource/download?path=$path— Скачать (бинарный файл или ZIP папки).POST /api/resource/move?from=$from&to=$to— Переместить/переименовать.GET /api/resource/search?query=$query— Поиск.POST /api/resource?path=$path— Загрузка (multipart/form-data).GET /api/directory?path=$path— Получить содержимое папки.POST /api/directory?path=$path— Создать папку.
Проект сделан в рамках java roadmap Сергея Жукова.