Рекомендуемые материалы к просмотру (прочтению):
Схема проекта Niffler 2.0
Во-первых, и в-главных, необходимо использовать bash terminal, а не powershell. Полезное и короткое видео о git bash Во-вторых, если у вас что-то не работает - пишите в TG чат группы - будем вместе дополнять README, т.к. изначально проект разработан под nix
Мы будем использовать docker для БД (Postgres), кроме того, будем запускать микросервисы в едином docker network при помощи docker-compose
Установка на Mac (Для ARM и Intel разные пакеты)
После установки и запуска docker daemon необходимо убедиться в работе команд docker, например docker -v
:
User-MacBook-Pro ~ % docker -v
Docker version 20.10.14, build a224086
docker pull postgres:15.1
docker pull confluentinc/cp-zookeeper:7.3.2
docker pull confluentinc/cp-kafka:7.3.2
После pull
вы увидите спуленный image командой docker images
mitriis-MacBook-Pro ~ % docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres 15.1 9f3ec01f884d 10 days ago 379MB
confluentinc/cp-kafka 7.3.2 db97697f6e28 12 months ago 457MB
confluentinc/cp-zookeeper 7.3.2 6fe5551964f5 7 years ago 451MB
docker volume create pgdata
Запустив скрипт (Для Windows необходимо использовать bash terminal: gitbash, cygwin или wsl)
User-MacBook-Pro niffler % bash localenv.sh
Или выполнив последовательно команды, для *nix:
docker run --name niffler-all -p 5432:5432 -e POSTGRES_PASSWORD=secret -e CREATE_DATABASES=niffler-auth,niffler-currency,niffler-spend,niffler-userdata -v pgdata:/var/lib/postgresql/data -v ./postgres/init-database.sh:/docker-entrypoint-initdb.d/init-database.sh -d postgres:15.1 --max_prepared_transactions=100
docker run --name=zookeeper -e ZOOKEEPER_CLIENT_PORT=2181 -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
Для Windows (Необходимо использовать bash terminal: gitbash, cygwin или wsl):
docker run --name niffler-all -p 5432:5432 -e POSTGRES_PASSWORD=secret -e CREATE_DATABASES=niffler-auth,niffler-currency,niffler-spend,niffler-userdata -v pgdata:/var/lib/postgresql/data -v ./postgres/init-database.sh:/docker-entrypoint-initdb.d/init-database.sh -d postgres:15.1 --max_prepared_transactions=100
docker run --name=zookeeper -e ZOOKEEPER_CLIENT_PORT=2181 -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
Если вы используете Windows и контейнер с БД не стартует с ошибкой в логе:
server started
/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init-database.sh
/usr/local/bin/docker-entrypoint.sh: /docker-entrypoint-initdb.d/init-database.sh: /bin/bash^M: bad interpreter: No such file or directory
То необходимо выполнить следующие команды в каталоге /postgres :
sed -i -e 's/\r$//' init-database.sh
chmod +x init-database.sh
Версию установленной Java необходимо проверить командой java -version
User-MacBook-Pro ~ % java -version
openjdk version "21.0.1" 2023-10-17 LTS
OpenJDK Runtime Environment Temurin-21.0.1+12 (build 21.0.1+12-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.1+12 (build 21.0.1+12-LTS, mixed mode)
Если у вас несколько версий Java одновременно - то хотя бы одна из них должна быть 21 Если java не установлена вовсе, то рекомендую установить OpenJDK (например, из https://adoptium.net/en-GB/temurin/releases/)
Инструкция. Рекомендованная версия Node.js - 22.6.0
для REST:
User-MacBook-Pro niffler % cd niffler-ng-client
или для GraphQL (временно недоступно):
User-MacBook-Pro niffler % cd niffler-ng-client-gql
User-MacBook-Pro niffler-ng-client % npm i
User-MacBook-Pro niffler-ng-client % npm run build:dev
Если требуется dev режим (вы собираетесь править frontend и на лету видеть изменения), запускаем командой npm run dev
Для этого зайти в меню Run -> Edit Configurations -> выбрать main класс -> указать Active profiles: local Инструкция.
User-MacBook-Pro niffler % cd niffler-auth
User-MacBook-Pro niffler-auth % gradle bootRun --args='--spring.profiles.active=local'
Или просто перейдя к main-классу приложения NifflerAuthApplication выбрать run в IDEA (предварительно удостовериться что выполнен предыдущий пункт)
Фронтенд Niffler при запуске локально будет работать для вас по адресу http://127.0.0.1:3000/, OpenAPI (Swagger) сервиса niffler-gateway доступен по адресу: http://127.0.0.1:8090/swagger-ui/index.html GraphiQL интерфейс сервиса niffler-gateway доступен по адресу: http://127.0.0.1:8090/graphiql WSDL сервиса niffler-userdata доступен по адресу: http://127.0.0.1:8089/ws/userdata.wsdl
User-MacBook-Pro niffler % 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 frontend.niffler.dc
127.0.0.1 auth.niffler.dc
127.0.0.1 gateway.niffler.dc
User-MacBook-Pro niffler % cd niffler
для REST:
User-MacBook-Pro niffler % bash docker-compose-dev.sh
для GraphQL (временно недоступно):
User-MacBook-Pro niffler % bash docker-compose-dev.sh gql
Текущая версия docker-compose-dev.sh
удалит все запущенные Docker контейнеры в системе, поэтому если у вас есть
созданные
контейнеры для других проектов - отредактируйте строку posh docker rm $(docker ps -a -q)
, чтобы включить в grep
только те контейнеры, что непосредственно относятся к niffler.
Фронтенд Niffler при запуске в докере будет работать для вас по адресу http://frontend.niffler.dc, OpenAPI (Swagger) сервиса niffler-gateway доступен по адресу: http://gateway.niffler.dc:8090/swagger-ui/index.html GraphiQL интерфейс сервиса niffler-gateway доступен по адресу: http://gateway.niffler.dc:8090/graphiql WSDL сервиса niffler-userdata доступен по адресу: http://localhost:8089/ws/userdata.wsdl
Если при выполнении скрипта docker-compose-dev.sh
вы получили ошибку:
* What went wrong:
Execution failed for task ':niffler-auth:jibDockerBuild'.
> com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException:
Build to Docker daemon failed, perhaps you should make sure your credentials for 'registry-1.docker.io...
То необходимо убедиться, что в $USER/.docker/config.json
файле отсутствует запись "credsStore": "desktop"
При наличии такого ключа в json, его надо удалить.
Если файл пустой, то возможно не выполнен docker login
. Если выполнялся, то надо создать файл руками по пути
$USER/.docker/config.json
с содержимым,
{
"auths": {
"https://index.docker.io/v1/": {}
},
"currentContext": "desktop-linux"
}
Если вы не можете подключиться к БД в docker, указывая верные login и password, то возможно у вас поднята другая база на том же порту 5432 . Это известная проблема, что Postgres в docker может стартануть при зянятом порту 5432, надо убедиться что у вас не поднят никакой другой Postgres на этом порту.
Если вы используете Windows и контейнер с БД не стартует с ошибкой в логе:
server started
/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init-database.sh
/usr/local/bin/docker-entrypoint.sh: /docker-entrypoint-initdb.d/init-database.sh: /bin/bash^M: bad interpreter: No such file or directory
То необходимо выполнить следующие команды в каталоге /postgres :
sed -i -e 's/\r$//' init-database.sh
chmod +x init-database.sh
Допустим, что ваш username на https://hub.docker.com - foobazz
User-MacBook-Pro niffler % cd niffler
для REST:
User-MacBook-Pro niffler % bash docker-compose-dev.sh push
для GraphQL (временно недоступно):
User-MacBook-Pro niffler % bash docker-compose-dev.sh gql push
User-MacBook-Pro niffler % cd niffler
для REST:
User-MacBook-Pro niffler % bash docker-compose-e2e.sh
для GraphQL:
User-MacBook-Pro niffler % bash docker-compose-e2e.sh gql