GithubHelp home page GithubHelp logo

gitstanhub / rococo_op Goto Github PK

View Code? Open in Web Editor NEW

This project forked from onemanpara/rococo

0.0 0.0 0.0 7.45 MB

Graduation project of the Java Advanced course from qa.guru

Shell 1.43% JavaScript 0.24% Java 70.60% TypeScript 7.42% CSS 1.44% HTML 1.36% FreeMarker 1.18% Dockerfile 0.52% Svelte 15.82%

rococo_op's Introduction

Rococo

Logo

Rococo - путеводитель в мире живописи! Исследуйте уникальные картины, познакомьтесь с их авторами, загляните в музеи из разных уголков мира.

Оглавление

Используемые технологии

Архитектура приложения

Приложение Rococo построено на основе микросервисной архитектуры:

  • auth - аутентификация и авторизация.
  • gateway - обработка запросов клиента и вызов нужных микросервисов.
  • userdata - информация о пользователе: юзернейм, имя и фамилия, аватар.
  • geo - данные о странах мира.
  • museum - сведения о музеях.
  • artist - сведениях о художниках.
  • painting - сведениях о картинах.
  • frontend - интерфейс приложения, с которым взаимодействует пользователь

Напрямую пользователь общается по REST только с сервисами auth и gateway и ничего не знает о существовании других сервисов. В то время как микросервисы - ничего не знают об аутентификационных данных пользователя, ведь они общаются только с gateway-сервисом по GRPC, который получает информацию об авторизации из auth-сервиса. Architecture

Список портов приложения

Сервис Порт
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

Запуск Rococo локально в IDE:

1. Запустить фронтенд, БД, zookeeper и kafka командами:

Запустив скрипт, для *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/

2. Прописать run конфигурацию для всех сервисов rococo-* - Active profiles local

Для этого зайти в меню Run -> Edit Configurations -> выбрать main класс -> в поле Environment variables указать spring.profiles.active=local

Set Profile

Либо перейти к main-классу каждого приложения -> кликнуть по методу ПКМ -> выбрать More Run/Debug -> Modify Run Configuration -> в поле Environment variables указать spring.profiles.active=local

Set Profile

3. Запустить сервис rococo-auth c помощью gradle или командой Run в IDE:

$ 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

Запуск Rococo в докере:

1. Создать бесплатную учетную запись на https://hub.docker.com/ (если отсутствует)

2. Создать в настройках своей учетной записи access_token Инструкция.

3. Выполнить docker login с созданным access_token (в инструкции это описано)

4. Прописать в etc/hosts элиас для Docker-имени

frontend: 127.0.0.1 client.rococo.dc,

auth: 127.0.0.1 auth.rococo.dc

gateway: 127.0.0.1 gateway.rococo.dc

Для *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

5. Перейти в корневой каталог проекта

$ cd rococo

6. Запустить все сервисы

$ 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

  1. Запустить приложение локально и запустить тесты из корня проекта
$ ./gradlew :rococo-tests:clean test
  1. После прогона тестов запустить формирование отчёта командой:
$ ./gradlew :rococo-tests:allureServe

Запуск тестов в докере

  1. Добавить в файл 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
  1. Запустить скрипт:
$ bash docker-compose-test.sh
  1. После того, как все контейнеры успешно соберутся и запустятся - переключиться на логи контейнера rococo-tests командой:
$ docker logs -f rococo-tests
  1. После прогона тестов в логах отобразится ссылка на аллюр отчёт

Пример тестового отчета

Allure Overview

Allure Suites

rococo_op's People

Contributors

onemanpara avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.