Rococo - путеводитель в мире живописи! Исследуйте уникальные картины, познакомьтесь с их авторами, загляните в музеи из разных уголков мира.
- Используемые технологии
- Архитектура приложения
- Список портов приложения
- Запуск Rococo локально в IDE
- Запуск Rococo в докере
- Запуск тестов локально
- Запуск тестов в докере
- Пример тестового отчёта
- Spring Authorization Server
- Spring OAuth 2.0 Resource Server
- Spring Data JPA
- Spring Web
- Spring Actuator
- Spring gRPC by https://github.com/yidongnan
- Apache Kafka
- Docker
- Docker-compose
- MySQL
- Svelte
- JUnit 5 (Extensions, Resolvers, etc)
- Retrofit 2
- Allure
- Selenide
- Selenoid & Selenoid-UI
- Allure-docker-service
- Java 17
- Gradle 8
- И многое другое!
Приложение Rococo построено на основе микросервисной архитектуры:
- auth - аутентификация и авторизация.
- gateway - обработка запросов клиента и вызов нужных микросервисов.
- userdata - информация о пользователе: юзернейм, имя и фамилия, аватар.
- geo - данные о странах мира.
- museum - сведения о музеях.
- artist - сведениях о художниках.
- painting - сведениях о картинах.
- frontend - интерфейс приложения, с которым взаимодействует пользователь
Напрямую пользователь общается по REST только с сервисами auth и gateway и ничего не знает о существовании других сервисов. В то время как микросервисы - ничего не знают об аутентификационных данных пользователя, ведь они общаются только с gateway-сервисом по GRPC, который получает информацию об авторизации из auth-сервиса.
Сервис | Порт |
---|---|
AUTH | 9000 (server) |
GATEWAY | 8090 (server) |
USERDATA | 8091 (grpc) |
ARTIST | 8092 (grpc) |
MUSEUM | 8093 (grpc) |
GEO | 8094 (grpc) |
PAINTING | 8095 (grpc) |
FRONTEND | 80 (server) |
Минимальные предусловия для запуска проекта локально
- На Windows рекомендуется используется терминал bash, а не powershell
- Установить Java версии 17 или новее. Это необходимо, т.к. проект не поддерживает версии <17
- Установить пакетный менеджер для сборки front-end npm
Инструкция Рекомендованная версия Node.js - 18.13.0 (LTS) - Спуллить контейнер mysql:8.0.33, zookeeper и kafka версии 7.3.2
$ docker pull mysql:8.0.33
$ docker pull confluentinc/cp-zookeeper:7.3.2
$ docker pull confluentinc/cp-kafka:7.3.2
- Создать volume для сохранения данных из БД в docker на вашем компьютере
docker volume create rococo-mysql
Запустив скрипт, для *nix:
$ bash localenv.sh
Запустив скрипт, для windows:
$ bash localenv-windows.sh
Или выполнив последовательно команды, для *nix:
docker run --name rococo-all -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret -d mysql:8.0.33
docker run --name=zookeeper -e ZOOKEEPER_CLIENT_PORT=2181 -e ZOOKEEPER_TICK_TIME=2000 -p 2181:2181 -d confluentinc/cp-zookeeper:7.3.2
docker run --name=kafka -e KAFKA_BROKER_ID=1 \
-e KAFKA_ZOOKEEPER_CONNECT=$(docker inspect zookeeper --format='{{ .NetworkSettings.IPAddress }}'):2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \
-e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
-e KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1 \
-e KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1 \
-p 9092:9092 -d confluentinc/cp-kafka:7.3.2
cd rococo-client
npm i
npm run dev
Для Windows:
docker run --name rococo-all -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret -d mysql:8.0.33
docker run --name=zookeeper -e ZOOKEEPER_CLIENT_PORT=2181 -e ZOOKEEPER_TICK_TIME=2000 -p 2181:2181 -d confluentinc/cp-zookeeper:7.3.2
docker run --name=kafka -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=$(docker inspect zookeeper --format='{{ .NetworkSettings.IPAddress }}'):2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 -e KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1 -e KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1 -p 9092:9092 -d confluentinc/cp-kafka:7.3.2
cd rococo-client
npm i
npm run dev
Фронт стартанет в браузере на порту 3000: http://127.0.0.1:3000/
Для этого зайти в меню Run -> Edit Configurations -> выбрать main класс -> в поле Environment variables указать spring.profiles.active=local
Либо перейти к main-классу каждого приложения -> кликнуть по методу ПКМ -> выбрать More Run/Debug -> Modify Run Configuration -> в поле Environment variables указать spring.profiles.active=local
$ cd rococo-auth
$ gradle bootRun --args='--spring.profiles.active=local'
Или просто перейдя к main-классу приложения RococoAuthApplication выбрать run в IDEA (предварительно удостовериться, что выполнен предыдущий пункт 2)
4. Запустить в любой последовательности другие сервисы: rococo-gateway, rococo-userdata, rococo-artist, rococo-geo, rococo-museum, rococo-painting
1. Создать бесплатную учетную запись на https://hub.docker.com/ (если отсутствует)
2. Создать в настройках своей учетной записи access_token Инструкция.
Для *nix:
$ vi /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
127.0.0.1 client.rococo.dc
127.0.0.1 auth.rococo.dc
127.0.0.1 gateway.rococo.dc
В windows файл hosts лежит по пути:
C:\Windows\System32\drivers\etc\hosts
$ cd rococo
$ bash docker-compose-dev.sh
Текущая версия docker-compose-dev.sh удалит все старые Docker контейнеры в системе, поэтому если у Вас есть созданные
контейнеры для других проектов - отредактируйте строку posh docker rm $(docker ps -a -q)
, чтобы включить в grep
только те контейнеры, которые относятся к rococo.
Rococo при запуске в докере будет работать для Вас по адресу http://client.rococo.dc:80, этот порт не нужно указывать в браузере, таким образом переходить напрямую по ссылке http://client.rococo.dc
Обратите внимание! Запуск тестов происходит в три потока. Изменить число потоков можно в файле junit-platform.properties
- Запустить приложение локально и запустить тесты из корня проекта
$ ./gradlew :rococo-tests:clean test
- После прогона тестов запустить формирование отчёта командой:
$ ./gradlew :rococo-tests:allureServe
- Добавить в файл hosts строку (как работать с файлом hosts описано в пункте Прописать в etc/hosts элиас для Docker-имени):
127.0.0.1 allure
Итоговый файл hosts должен выглядеть следующим образом:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
127.0.0.1 client.rococo.dc
127.0.0.1 auth.rococo.dc
127.0.0.1 gateway.rococo.dc
127.0.0.1 allure
- Запустить скрипт:
$ bash docker-compose-test.sh
- После того, как все контейнеры успешно соберутся и запустятся - переключиться на логи контейнера rococo-tests командой:
$ docker logs -f rococo-tests
- После прогона тестов в логах отобразится ссылка на аллюр отчёт