- Обзор
- Архитектура
- Технологический стек
- Микросервисы
- База данных
- Admin-Panel
- Начало работы
- Структура проекта
- API
- Разработка
- Развертывание
- Лицензия
- Авторы
CompressRankSystem - это комплексный облачный сервис для управления, сжатия и ранжирования изображений и манги. Система построена на микросервисной архитектуре, что обеспечивает высокую масштабируемость, отказоустойчивость и гибкость разработки.
- 🖼️ Управление изображениями: загрузка, хранение, просмотр и удаление изображений
- 🗜️ Сжатие изображений: оптимизация размера изображений с разными уровнями компрессии
- 📊 Статистика и рейтинг: отслеживание популярности контента по просмотрам и скачиваниям
- 🔒 Аутентификация и авторизация: многоуровневая система ролей и прав доступа
- 🖥️ Административная панель: современный реактивный интерфейс для управления системой
- 📚 Управление мангой: создание, редактирование и публикация манги с многоуровневой структурой (тома, главы, страницы)
- 🌐 Многоязычная поддержка: локализация контента и интерфейса
Система построена на принципах микросервисной архитектуры с использованием асинхронной связи через сообщения (Kafka) для обеспечения высокой масштабируемости и отказоустойчивости.
-
API Gateway - единая точка входа для всех клиентских запросов
- Маршрутизация запросов к соответствующим микросервисам
- Балансировка нагрузки
- Аутентификация и авторизация
- Агрегация данных от разных сервисов
- Кеширование часто запрашиваемых данных
- Ограничение частоты запросов (rate limiting)
-
Микросервисы - независимо развертываемые сервисы для конкретных бизнес-функций
- Изолированная бизнес-логика
- Отдельные базы данных (Database per Service)
- Независимое масштабирование
- Устойчивость к сбоям
-
Kafka - распределенная платформа потоковой обработки данных
- Асинхронный обмен сообщениями между сервисами
- Последовательная и надежная доставка сообщений
- Масштабируемая обработка событий
- Интеграция с внешними системами
- Тематические каналы (topics) для различных типов событий:
image-upload-events- события загрузки новых изображенийcompression-events- события сжатия изображенийuser-activity-events- события активности пользователейstatistics-events- события для сбора статистикиnotification-events- события для генерации уведомлений
-
PostgreSQL - реляционные базы данных для хранения данных микросервисов
- Отдельная база данных для каждого сервиса (Database per Service)
- Транзакционная целостность данных
- Сложные запросы и аналитика
-
MinIO - объектное хранилище для изображений
- S3-совместимый API
- Высокая доступность и масштабируемость
- Версионирование объектов
- Политики хранения и жизненного цикла
-
Redis - распределенное хранилище данных в памяти
- Кеширование часто запрашиваемых данных
- Управление сессиями пользователей
- Ограничение частоты запросов (rate limiting)
- Временное хранение очередей задач
┌─────────────┐ HTTP ┌───────────────┐
│ Web Client │────────────▶ │ API Gateway │
└─────────────┘ └───────┬───────┘
│
▼
┌───────────────┬────────────┬──────────────┬──────────────┐
│ │ │ │ │
┌────▼───┐ ┌────▼────┐ ┌────▼─────┐ ┌────▼─────┐ ┌────▼────┐
│ Auth │ │ Image │ │Compression│ │Statistics│ │ Admin │
│ Service│ │ Storage │ │ Service │ │ Service │ │ Panel │
└────┬───┘ └────┬────┘ └────┬─────┘ └────┬─────┘ └─────────┘
│ │ │ │
└───────┬───────┴────────────┴──────┬──────┘
│ │
▼ ▼
┌────────────┐ ┌───────────────┐
│ PostgreSQL │ │ Kafka │
│ Databases │ │Event Streaming│
└────────────┘ └───────────────┘
- Java 21
- Новейшие возможности языка (Records, Pattern Matching, Virtual Threads)
- Улучшенная производительность и эффективность GC
- Spring Boot 3.4
- Spring WebFlux для реактивной обработки запросов
- Spring Security для аутентификации и авторизации
- Spring Data JPA для работы с данными
- Spring Cloud Gateway
- Динамическая маршрутизация
- Предикаты и фильтры запросов
- Интеграция с Service Discovery
- Spring Data JPA
- Автоматическое создание репозиториев
- Декларативные запросы
- Оптимизированная работа с БД
- Kafka Client
- Асинхронная обработка событий
- Producer и Consumer API
- Streams API для сложной обработки данных
- PostgreSQL
- Надежное хранение реляционных данных
- JSON(B) типы для гибкого хранения
- Полнотекстовый поиск
- H2 Database (для разработки)
- Встроенная БД для тестирования
- Совместимость с PostgreSQL
- MinIO (S3-совместимое хранилище)
- Хранение и доступ к объектам
- Версионирование и бэкапы
- WebP - технология сжатия изображений
- Высокое качество при малом размере
- Поддержка прозрачности и анимации
- Swagger/OpenAPI - документирование API
- Интерактивная документация
- Автоматическая генерация клиентов
- React 18
- Современная компонентная архитектура
- Concurrent Mode для улучшенной производительности
- Server Components для оптимизированной загрузки
- TypeScript
- Строгая типизация для улучшения качества кода
- Автодополнение и валидация во время разработки
- Material UI
- Готовые компоненты с материальным дизайном
- Адаптивный и отзывчивый интерфейс
- Темная и светлая темы
- React Router
- Клиентская маршрутизация
- Ленивая загрузка компонентов
- React Hook Form
- Эффективное управление формами
- Валидация и обработка ошибок
- Axios
- Удобный HTTP-клиент
- Перехватчики запросов и ответов
- Docker
- Контейнеризация сервисов и зависимостей
- Изоляция сред выполнения
- Docker Compose
- Управление многоконтейнерными приложениями
- Оркестрация для разработки
- Gradle
- Автоматизация сборки и тестирования
- Управление зависимостями
- Spring Boot Actuator
- Мониторинг работоспособности сервисов
- Сбор метрик и статистики
- Prometheus и Grafana (опционально)
- Сбор и визуализация метрик
- Настраиваемые дашборды
- ELK Stack (опционально)
- Централизованное управление логами
- Анализ и визуализация логов
API Gateway служит единой точкой входа для всех клиентских запросов, обеспечивая следующие функции:
- Маршрутизация запросов к соответствующим микросервисам на основе URL-путей и предикатов
- Балансировка нагрузки между экземплярами микросервисов
- Аутентификация и авторизация с проверкой JWT-токенов
- Агрегация данных от разных микросервисов для формирования комплексных ответов
- Кеширование часто запрашиваемых данных для ускорения работы
- Rate Limiting для защиты от перегрузки и DoS-атак
- Логирование и мониторинг всех входящих запросов
- Трансформация запросов и ответов при необходимости
- Обработка CORS для веб-клиентов
- Реализация паттерна Circuit Breaker для обеспечения отказоустойчивости
API Gateway настраивается с помощью Spring Cloud Gateway и использует Spring Security для обеспечения безопасности.
Сервис для хранения и управления изображениями. Обеспечивает следующие возможности:
- Загрузка изображений с валидацией типов и размеров
- Получение изображений с различными параметрами (размер, формат, качество)
- Управление метаданными изображений (категории, теги, описания)
- Удаление изображений с каскадной очисткой связанных данных
- Организация изображений в категории и коллекции
- Управление правами доступа к изображениям
- Интеграция с MinIO для объектного хранилища
- Публикация событий в Kafka о загрузке, изменении и удалении изображений
- Поиск изображений по метаданным и тегам
Сервис хранит метаданные изображений в собственной базе данных PostgreSQL, а сами файлы размещает в MinIO.
Сервис выполняет сжатие изображений с использованием технологии WebP и других алгоритмов. Функционал включает:
- Сжатие изображений с настраиваемыми параметрами качества
- Конвертация изображений между различными форматами (JPEG, PNG, WebP)
- Изменение размеров изображений с сохранением пропорций
- Оптимизация изображений для веб с учетом современных стандартов
- Пакетная обработка множества изображений
- Планирование задач сжатия на основе приоритетов
- Сохранение истории версий сжатых изображений
- Генерация превью и миниатюр разных размеров
- Потребление событий из Kafka для автоматического сжатия новых изображений
- Публикация событий о завершении сжатия
Сервис использует нативные библиотеки WebP и другие инструменты оптимизации, интегрированные через JNI.
Сервис статистики и рейтингов. Собирает и анализирует данные о пользовательской активности. Функционал:
- Сбор данных о просмотрах и загрузках изображений и манги
- Формирование рейтингов популярности контента
- Анализ тенденций в просмотрах и загрузках
- Отслеживание активности пользователей (с анонимизацией данных)
- Генерация рекомендаций на основе истории просмотров
- Создание периодических отчетов о популярности контента
- Расчет метрик эффективности сжатия изображений
- Потребление событий активности из Kafka
- Предоставление API для получения статистики и рейтингов
Сервис использует свою БД PostgreSQL для хранения статистических данных и предоставляет API для доступа к агрегированной информации.
Сервис аутентификации и авторизации обеспечивает безопасность системы. Функционал включает:
- Регистрация и управление пользователями с различными ролями
- Аутентификация с использованием логина/пароля и JWT-токенов
- Управление ролями и разрешениями пользователей
- Проверка и валидация токенов для всех защищенных ресурсов
- Обновление токенов с использованием механизма refresh tokens
- Безопасное хранение паролей с использованием современных алгоритмов хеширования
- Блокировка и разблокировка учетных записей при подозрительной активности
- Логирование действий пользователей для аудита безопасности
- Интеграция с внешними системами аутентификации (OAuth2, OpenID Connect)
- Управление сессиями пользователей с возможностью принудительного завершения
Сервис хранит данные пользователей в своей БД PostgreSQL, соблюдая строгие требования к безопасности.
Веб-интерфейс для администрирования системы, разработанный на React и TypeScript. Подробное описание в разделе Admin-Panel.
Система использует архитектурный подход "Database per Service", где каждый микросервис имеет свою собственную базу данных, что обеспечивает изоляцию данных и независимое масштабирование. Все базы данных используют PostgreSQL для хранения реляционных данных.
-
users
id(UUID) - первичный ключusername(VARCHAR) - уникальное имя пользователяpassword_hash(VARCHAR) - хеш пароляemail(VARCHAR) - уникальный emailfirst_name(VARCHAR) - имя пользователяlast_name(VARCHAR) - фамилия пользователяrole(ENUM) - роль пользователя (ADMIN, MODERATOR, READER)active(BOOLEAN) - статус активацииcreated_at(TIMESTAMP) - дата созданияupdated_at(TIMESTAMP) - дата обновленияlast_login_at(TIMESTAMP) - дата последнего входа
-
refresh_tokens
id(UUID) - первичный ключuser_id(UUID) - внешний ключ к users.idtoken(VARCHAR) - токен обновленияexpires_at(TIMESTAMP) - срок действия токенаcreated_at(TIMESTAMP) - дата созданияrevoked(BOOLEAN) - статус отзыва токенаrevoked_reason(VARCHAR) - причина отзыва токена (если есть)
-
permissions
id(UUID) - первичный ключname(VARCHAR) - название разрешенияdescription(TEXT) - описание разрешения
-
role_permissions
role(ENUM) - роль пользователяpermission_id(UUID) - внешний ключ к permissions.id- PRIMARY KEY (role, permission_id)
-
user_activity_log
id(UUID) - первичный ключuser_id(UUID) - внешний ключ к users.idactivity_type(VARCHAR) - тип активностиdescription(TEXT) - описание действияip_address(VARCHAR) - IP-адресuser_agent(VARCHAR) - информация о браузереcreated_at(TIMESTAMP) - дата и время активности
-
images
id(UUID) - первичный ключuser_id(UUID) - идентификатор пользователя-владельцаfilename(VARCHAR) - оригинальное имя файлаstorage_path(VARCHAR) - путь хранения в MinIOmime_type(VARCHAR) - MIME-тип изображенияsize_bytes(BIGINT) - размер в байтахwidth(INT) - ширина изображения в пикселяхheight(INT) - высота изображения в пикселяхdescription(TEXT) - описание изображенияis_public(BOOLEAN) - флаг публичного доступаcreated_at(TIMESTAMP) - дата созданияupdated_at(TIMESTAMP) - дата обновленияdeleted_at(TIMESTAMP) - дата логического удаления (NULL для активных)
-
image_versions
id(UUID) - первичный ключimage_id(UUID) - внешний ключ к images.idversion_type(ENUM) - тип версии (ORIGINAL, COMPRESSED, THUMBNAIL)storage_path(VARCHAR) - путь хранения в MinIOmime_type(VARCHAR) - MIME-тип версии изображенияsize_bytes(BIGINT) - размер в байтахwidth(INT) - ширина изображения в пикселяхheight(INT) - высота изображения в пикселяхcompression_quality(INT) - уровень качества сжатия (0-100)created_at(TIMESTAMP) - дата создания
-
image_categories
id(UUID) - первичный ключname(VARCHAR) - название категорииdescription(TEXT) - описание категорииparent_id(UUID) - внешний ключ к image_categories.id (для иерархии)created_at(TIMESTAMP) - дата созданияupdated_at(TIMESTAMP) - дата обновления
-
image_category_mapping
image_id(UUID) - внешний ключ к images.idcategory_id(UUID) - внешний ключ к image_categories.id- PRIMARY KEY (image_id, category_id)
-
image_tags
id(UUID) - первичный ключname(VARCHAR) - название тегаcreated_at(TIMESTAMP) - дата создания
-
image_tag_mapping
image_id(UUID) - внешний ключ к images.idtag_id(UUID) - внешний ключ к image_tags.id- PRIMARY KEY (image_id, tag_id)
-
manga
id(UUID) - первичный ключtitle(VARCHAR) - название мангиdescription(TEXT) - описание мангиauthor(VARCHAR) - автор мангиartist(VARCHAR) - художник мангиstatus(ENUM) - статус (ONGOING, COMPLETED, HIATUS, CANCELED)cover_image_id(UUID) - внешний ключ к images.id (для обложки)published(BOOLEAN) - флаг публикацииview_count(BIGINT) - счетчик просмотровcreated_at(TIMESTAMP) - дата созданияupdated_at(TIMESTAMP) - дата обновленияgenres(VARCHAR) - жанры, разделенные запятыми
-
manga_volumes
id(UUID) - первичный ключmanga_id(UUID) - внешний ключ к manga.idvolume_number(INT) - номер томаtitle(VARCHAR) - название томаcover_image_id(UUID) - внешний ключ к images.id (для обложки)created_at(TIMESTAMP) - дата созданияupdated_at(TIMESTAMP) - дата обновления
-
manga_chapters
id(UUID) - первичный ключvolume_id(UUID) - внешний ключ к manga_volumes.idchapter_number(DECIMAL) - номер главыtitle(VARCHAR) - название главыcreated_at(TIMESTAMP) - дата созданияupdated_at(TIMESTAMP) - дата обновленияpage_count(INT) - количество страниц
-
manga_pages
id(UUID) - первичный ключchapter_id(UUID) - внешний ключ к manga_chapters.idimage_id(UUID) - внешний ключ к images.idpage_number(INT) - номер страницыcreated_at(TIMESTAMP) - дата созданияupdated_at(TIMESTAMP) - дата обновления
-
compression_tasks
id(UUID) - первичный ключimage_id(UUID) - идентификатор изображенияstatus(ENUM) - статус задачи (PENDING, PROCESSING, COMPLETED, FAILED)compression_type(ENUM) - тип сжатия (WEBP, JPEG, PNG, AVIF)quality(INT) - уровень качества (0-100)original_size_bytes(BIGINT) - размер оригинала в байтахcompressed_size_bytes(BIGINT) - размер после сжатия в байтахcompression_ratio(DECIMAL) - коэффициент сжатияerror_message(TEXT) - сообщение об ошибке (если есть)started_at(TIMESTAMP) - дата начала обработкиcompleted_at(TIMESTAMP) - дата завершения обработкиcreated_at(TIMESTAMP) - дата создания задачиpriority(INT) - приоритет задачи (0-10)
-
compression_settings
id(UUID) - первичный ключname(VARCHAR) - название настройкиcompression_type(ENUM) - тип сжатия (WEBP, JPEG, PNG, AVIF)quality(INT) - уровень качества (0-100)resize_width(INT) - ширина для изменения размера (NULL для сохранения)resize_height(INT) - высота для изменения размера (NULL для сохранения)maintain_aspect_ratio(BOOLEAN) - сохранять пропорцииis_default(BOOLEAN) - настройка по умолчанию для типаcreated_at(TIMESTAMP) - дата созданияupdated_at(TIMESTAMP) - дата обновления
-
compression_presets
id(UUID) - первичный ключname(VARCHAR) - название пресетаdescription(TEXT) - описание пресетаsettings_id(UUID) - внешний ключ к compression_settings.idcreated_at(TIMESTAMP) - дата созданияupdated_at(TIMESTAMP) - дата обновления
-
image_views
id(UUID) - первичный ключimage_id(UUID) - идентификатор изображенияuser_id(UUID) - идентификатор пользователя (NULL для анонимных)view_date(TIMESTAMP) - дата и время просмотраip_hash(VARCHAR) - хеш IP-адреса (для анонимной аналитики)user_agent(VARCHAR) - информация о браузереreferer(VARCHAR) - источник перехода
-
image_downloads
id(UUID) - первичный ключimage_id(UUID) - идентификатор изображенияuser_id(UUID) - идентификатор пользователя (NULL для анонимных)version_type(ENUM) - тип версии (ORIGINAL, COMPRESSED, THUMBNAIL)download_date(TIMESTAMP) - дата и время скачиванияip_hash(VARCHAR) - хеш IP-адреса (для анонимной аналитики)user_agent(VARCHAR) - информация о браузере
-
manga_views
id(UUID) - первичный ключmanga_id(UUID) - идентификатор мангиchapter_id(UUID) - идентификатор главы (может быть NULL)user_id(UUID) - идентификатор пользователя (NULL для анонимных)view_date(TIMESTAMP) - дата и время просмотраip_hash(VARCHAR) - хеш IP-адреса (для анонимной аналитики)pages_viewed(INT) - количество просмотренных страницtime_spent_seconds(INT) - время, проведенное на странице
-
daily_statistics
id(UUID) - первичный ключdate(DATE) - дата статистикиimage_views_count(INT) - количество просмотров изображенийimage_downloads_count(INT) - количество скачиваний изображенийmanga_views_count(INT) - количество просмотров мангиnew_users_count(INT) - количество новых пользователейtotal_compression_bytes_saved(BIGINT) - объем сэкономленного местаaverage_compression_ratio(DECIMAL) - средний коэффициент сжатия
-
popular_items
id(UUID) - первичный ключitem_id(UUID) - идентификатор элемента (изображение или манга)item_type(ENUM) - тип элемента (IMAGE, MANGA, CHAPTER)date(DATE) - датаviews_count(INT) - количество просмотровdownloads_count(INT) - количество скачиваний (для изображений)rank_position(INT) - позиция в рейтинге
Admin-Panel представляет собой современное React-приложение для управления всеми аспектами системы CompressRankSystem. Реализованное с использованием TypeScript и Material UI, приложение обеспечивает интуитивный пользовательский интерфейс для администраторов системы.
-
Управление изображениями
- Просмотр списка всех изображений с фильтрацией и сортировкой
- Загрузка новых изображений с предварительным просмотром
- Редактирование метаданных изображений (название, описание, теги, категории)
- Просмотр детальной информации об изображении (размер, формат, разрешение)
- Удаление изображений с подтверждением
- Проверка статуса сжатия и компрессии
-
Управление мангой
- Создание и редактирование манги с полным описанием
- Организация структуры манги по томам, главам и страницам
- Загрузка страниц манги с автоматической нумерацией
- Изменение порядка страниц с интерфейсом drag-and-drop
- Управление обложками для манги и томов
- Публикация и снятие с публикации манги
-
Управление пользователями
- Просмотр списка всех пользователей с фильтрацией по ролям
- Создание новых пользователей с назначением ролей
- Редактирование информации о пользователях
- Блокировка и разблокировка пользователей
- Сброс паролей пользователей
- Просмотр активности пользователей
-
Управление ролями и правами
- Просмотр существующих ролей в системе
- Настройка прав доступа для каждой роли
- Создание пользовательских ролей с выборочными правами
-
Системные настройки
- Настройка параметров сжатия изображений
- Управление категориями изображений
- Установка ограничений на размеры загружаемых файлов
- Настройка квот хранения для пользователей
- Управление настройками безопасности
-
Мониторинг и статистика
- Просмотр общей статистики системы на главной панели
- Детальная статистика по просмотрам и загрузкам
- Графики популярности контента по времени
- Анализ эффективности сжатия изображений
- Отчеты по активности пользователей
-
Отзывчивый дизайн
- Адаптация для мобильных устройств, планшетов и десктопов
- Корректное отображение на экранах любого размера
-
Темная и светлая темы
- Автоматическое определение системных предпочтений
- Возможность ручного переключения темы
- Сохранение выбора в локальном хранилище
-
Оптимизация производительности
- Ленивая загрузка компонентов (React.lazy)
- Мемоизация компонентов для снижения избыточных рендеров
- Виртуализация списков для эффективного отображения больших наборов данных
- Оптимизированная загрузка изображений с lazy loading
-
Удобство использования
- Интуитивно понятный интерфейс с подсказками
- Drag-and-drop для загрузки файлов и изменения порядка
- Контекстные меню для быстрого доступа к часто используемым функциям
- Клавиатурные сочетания для повышения эффективности работы
- Уведомления об успешных действиях и ошибках
-
Безопасность
- Защита от CSRF-атак
- Проверка ролей и прав на стороне клиента
- Защищенные маршруты с редиректом на страницу входа
- Автоматический выход при истечении сессии
- Подтверждение критических действий
-
Архитектура приложения
- Component-Based Architecture для переиспользуемых элементов UI
- Context API для глобального состояния (тема, аутентификация)
- React Router для маршрутизации и навигации
- Hooks для управления состоянием и побочными эффектами
-
Управление состоянием
- React Hooks (useState, useEffect, useContext) для локального состояния
- Контекст для глобально доступных данных (AuthContext)
- Использование кастомных хуков для инкапсуляции логики
-
API-взаимодействие
- Централизованные сервисы для взаимодействия с бэкендом
- Axios для HTTP-запросов с перехватчиками для токенов и ошибок
- Абстракция API в отдельном слое сервисов
- Кеширование запросов для оптимизации производительности
-
Обработка форм
- React Hook Form для эффективного управления формами
- Yup для валидации данных
- Контролируемые и неконтролируемые компоненты в зависимости от сценария
-
Стилизация
- Material UI как библиотека компонентов
- ThemeProvider для глобального управления темой
- CSS-in-JS с использованием styled-components или emotion
- Адаптивная верстка с использованием Grid и Flexbox
- Docker и Docker Compose
- Java 21 JDK
- Node.js (для разработки фронтенда)
- Gradle (опционально, можно использовать Gradle Wrapper)
- Клонировать репозиторий
git clone https://github.com/your-username/CompressRankSystem.git
cd CompressRankSystem- Запуск с помощью Docker Compose
docker-compose up -dЭто запустит все микросервисы, базы данных и дополнительные сервисы в контейнерах Docker.
- Проверка работоспособности
curl http://localhost:8082/api/system/health- Доступ к административной панели
Откройте в браузере: http://localhost:3000
# Запуск ApiGateway
cd ApiGatewayCompressionRankSystem
./gradlew bootRun
# Запуск ImageStorageService
cd ../ImageStorageService
./gradlew bootRun
# ... и так далее для каждого сервисаcd admin-panel
npm install
npm startCompressRankSystem/
│
├── ApiGatewayCompressionRankSystem/ # API Gateway
│
├── ImageStorageService/ # Сервис хранения изображений
│
├── CompressionService/ # Сервис сжатия изображений
│
├── StatisticsRankingService/ # Сервис статистики и рейтингов
│
├── AuthService/ # Сервис аутентификации
│
├── admin-panel/ # Административная панель (React)
│
├── webp_binaries/ # Бинарные файлы WebP для сжатия
│
├── data/ # Директория для хранения данных
│
├── docker-compose.yml # Конфигурация Docker Compose
│
└── README.md # Документация проекта
Система предоставляет REST API для управления изображениями, сжатия и получения статистики.
GET /api/images- Получение списка всех изображенийGET /api/images/{id}- Получение изображения по IDGET /api/images/{id}/metadata- Получение метаданных изображенияPOST /api/images- Загрузка нового изображенияDELETE /api/images/{id}- Удаление изображенияGET /api/images/statistics- Получение статистики по изображениямGET /api/images/{id}/statistics- Получение статистики по конкретному изображению
POST /api/compression/{id}- Сжатие изображенияPOST /api/compression/{id}/restore- Восстановление оригинала изображенияGET /api/compression/{id}/original-size- Получение размера оригинального изображения
GET /api/system/health- Проверка состояния системыGET /api/system/info- Информация о системе и версияхGET /api/docs- Документация APIGET /api/metrics/aggregated- Агрегированные метрики по всем сервисам
Подробная документация API доступна по адресу:
- Swagger UI: http://localhost:8082/swagger-ui.html
- Пользовательская документация: http://localhost:8082/api/docs
- Создайте новый проект Spring Boot
- Добавьте необходимые зависимости для работы с Kafka
- Реализуйте бизнес-логику
- Создайте Dockerfile для сервиса
- Добавьте сервис в docker-compose.yml
# Запуск всех тестов
./gradlew test
# Запуск тестов для конкретного сервиса
cd ImageStorageService
./gradlew testДля локального развертывания используйте Docker Compose:
docker-compose up -dДля развертывания в Kubernetes можно использовать файлы манифестов из директории k8s/:
kubectl apply -f k8s/Этот проект распространяется под лицензией Apache 2.0. Подробности см. в файле LICENSE.
- ShadowShift Studio - Начальная работа - ShadowShift
- Команда Spring Boot и Spring Cloud за замечательные фреймворки
- Сообщество WebP за технологию сжатия изображений
- Всем контрибьюторам, которые помогают развивать проект
© 2025 ShadowShift Studio
