https://github.com/xujxxs/task-tracker
pet project
https://github.com/xujxxs/task-tracker
docker docker-compose java microservices mongodb postgresql protobuf rabbitmq redis s3-storage spring spring-boot spring-cache spring-security spring-session
Last synced: 11 months ago
JSON representation
pet project
- Host: GitHub
- URL: https://github.com/xujxxs/task-tracker
- Owner: xujxxs
- License: mit
- Created: 2025-01-10T20:35:17.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-03-06T18:44:41.000Z (11 months ago)
- Last Synced: 2025-03-06T19:32:52.331Z (11 months ago)
- Topics: docker, docker-compose, java, microservices, mongodb, postgresql, protobuf, rabbitmq, redis, s3-storage, spring, spring-boot, spring-cache, spring-security, spring-session
- Language: Java
- Homepage:
- Size: 870 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# task-tracker
Проект представляет собой систему, состоящую из двух микросервисов для управления задач связанных с пользователем, с разделением пользователей по ролям. На данные момент проект находится **в разработке** и будет дополняться.
## Архитектура
Проект состоит из 2 микросервисов **Profile Service** и **Task Service**:

### [Profile Service](profile/README.md)
Сервис профиля управляет пользовательскими данными, их аватарами и сессиями. При удалении профиля через **RabbitMQ** отправляется сообщение в **Task Service** для удаления всех связанных задач и подзадач.
Используется **Spring Session** в связке с **MongoDB** для хранения сессий, **PostgreSQL** для данных пользователей и **Amazon S3** для хранения аватаров.
В системе предусмотрены две роли: **User** (пользователь) и **Admin** (администратор), где **User** может управлять только своим профилем, а Admin — всеми профилями.
### [Task Service](task/README.md)
**Task Service** — это микросервис, отвечающий за управление задачами и подзадачами в экосистеме приложения для отслеживания задач. Он предоставляет API для создания, обновления и удаления задач, а также для работы с подзадачами. Данные о задачах и подзадачах хранятся в **PostgreSQL**. Сервис интегрируется с **RabbitMQ** для получения сообщений, при удалении профиля пользователя, когда сервис задач удаляет все связанные с ним задачи и подзадачи.
В качестве кеша используется **Redis** с кастомным сериализатором для **protobuf**, что позволило уменьшить вес кешируемых объектов.
В системе предусмотрены две роли: **User**, который может управлять только своими задачами, и **Admin**, который имеет доступ для управления задачами всех пользователей.
## Технологии
Проект использует следующие технологии:
* [JDK 17](https://openjdk.org/projects/jdk/17/) - основная версия Java для разработки
* [Gradle](https://gradle.org/) - инструмент автоматизации сборки
* [PostgreSQL](https://www.postgresql.org/) - SQL база данных
* [MongoDB](https://www.mongodb.com/) - NoSQL база данных
* [Redis](https://www.mongodb.com/) - NoSQL база данных для кеширования
* [RabbitMQ](https://www.rabbitmq.com/) - брокер сообщений
* [Git](https://git-scm.com/) - система контроля версий
* [Docker](https://www.docker.com/) - используется для контейнеризации всех компонентов проекта
## Зависимости
Зависимости которые используются в проекте.
Для **Profile Service** и **Task Service**:
- [Spring Web](https://docs.spring.io/spring-boot/reference/web/index.html) - Для создания RESTful веб-приложения с помощью Spring MVC. Использует Apache Tomcat в качестве встроенного веб-сервера по умолчанию.
- [Spring for RabbitMQ](https://docs.spring.io/spring-amqp/reference/) - Предоставляет общую платформу для отправки и получения сообщений между сервисами.
- [Spring Data JPA](https://docs.spring.io/spring-data/jpa/reference/) - Хранение данных в SQL бд.
- [Spring Data MongoDB](https://docs.spring.io/spring-data/mongodb/reference/) - Хранение данных в NoSQL бд.
- [Spring Data Redis](https://docs.spring.io/spring-data/redis/reference/) - Обеспечивает подключение Redis и поддержку репозитория для базы данных Redis. Это упрощает разработку приложений с помощью согласованной модели программирования, которым необходим доступ к источникам данных Redis.
- [Spring Cache](https://docs.spring.io/spring-boot/reference/io/caching.html) - Фреймворк для абстрактного управления кэшем в приложениях Spring. Предоставляет аннотации, такие как `@Cacheable`, `@CacheEvict` и `@CachePut`, для простого кэширования методов, что улучшает производительность приложений за счёт сокращения дорогостоящих операций.
- [PostgreSQL Driver](https://jdbc.postgresql.org/) - Драйвер JDBC и R2DBC, который позволяет программам Java подключаться к базе данных PostgreSQL.
- [Spring Security](https://docs.spring.io/spring-security/reference/) - Настраиваемая среда аутентификации и контроля доступа для приложений Spring
- [Spring Session](https://docs.spring.io/spring-session/reference/) - Предоставляет API и реализации для управления информацией о сеансе пользователя.
- [Lombok](https://projectlombok.org/) - Библиотека аннотаций Java, которая помогает сократить шаблонный код.
Для **Profile Service**:
- [AWS S3](https://docs.aws.amazon.com/s3/) - облачный сервис, позволяющий хранить файлы любого типа и объема.
Для **Task Service**:
- [Protobuf](https://protobuf.dev/) - протокол сериализации (передачи) структурированных данных, предложенный Google как эффективная бинарная альтернатива текстовому формату XML.
## Использование
Этот пример поможет вам быстро начать работу с проектом.
### Предварительное условие
Перед тем, как начать использовать проект, убедитесь, что у вас установлены следующие инструменты:
* [Docker]()
* [Docker Compose]()
Также необходимо облачное хранилище, совместимое с **AWS S3**. В данном проекте используется **Backblaze B2**.
### Запуск проекта
Для того чтобы развернуть проект на своем локальном окружении, выполните следующие шаги:
1. Склонируйте репозиторий:
```bash
git clone https://github.com/xujxxs/task-tracker.git
```
2. Перейдите в каталог проекта:
```bash
cd task-tracker
```
3. В корневой папке проекта создайте 5 файлов:
- `s3_access_key.txt`
- `s3_bucket_name.txt`
- `s3_endpoint.txt`
- `s3_region.txt`
- `s3_secret_key.txt`
Заполните их значениями, соответствующими вашему облачному хранилищу, совместимому с **AWS S3**.
4. Соберите и запустите проект с помощью Docker Compose:
```bash
docker compose up -d --build
```
5. Сервер будет доступен по адресу: http://localhost:80
## Дорожная карта
- [x] Реализовать сервис **profile**
- [x] Реализовать сервис **task**
- [x] Настроить **nginx.conf** и **docker-compose.yaml**
- [x] Добавить **RabbitMQ** для межсервисного взаимодействия
- [x] Добавить скрипты автоматической конфигурации **init-scripts**
- [x] Сделать **README.md**
- [x] Добавить кеширование с помощью **Redis**
- [x] Переход с **Java Serialization** на **Protobuf** в сервисе **task** для кеша
- [x] Добавить хранение файлов для сервиса **profile** в облако
- [X] Сделать **README.md** для **Profile Service** и **Task Service**
- [ ] Внедрить **ELK** для подробного мониторинга
## Лицензия
Распространяется по **MIT** лицензии. См. **LICENSE.txt** для получения дополнительной информации.
## Контакты
👤 **Алексей**
* Telegram: [@xujxxs](https://t.me/x_ujxxs)
* Github: [@xujxxs](https://github.com/xujxxs)