Банк умеет делать следующее:
- Регистрироваться в системе по логину и паролю (заводить аккаунт);
- Добавлять счета в различных валютах;
- Класть виртуальные деньги на счёт и снимать их;
- Переводить деньги между своими счетами с учётом конвертации в различные валюты;
- Переводить деньги на другой счёт с учётом конвертации в различные валюты.
Приложение состоит из следующих микросервисов:
- Front (фронт);
- Accounts (аккаунты со счетами);
- Cash (обналичивание денег);
- Transfer (перевод между счетами одного или двух аккаунтов);
- Exchange (конвертация валют);
- Exchange Generator (генератор курсов валют);
- Blocker (блокировщик подозрительных операций);
- Notifications (уведомления).
Приложение написано на Java 21, использует Spring Boot 3, Gradle, Thymeleaf, WebFlux, Flyway,
Spring Security,
JUnit 5, Mockito, Testcontainers, Docker, API соответствует REST, данные хранятся в БД **PostgreSQL
**, тесты выполняются в PostgreSQL.
Тестовое покрытие кода - 24% строк кода.
Для запуска приложения:
gradle clean builddocker-compose upВ директории build/libs проекта появится jar-архив сервиса
-
Установите Minikube: https://kubernetes.io/ru/docs/tasks/tools/install-minikube/
-
Инициализируйте
minikube start --driver=docker
- Добавьте ингресс, чтобы была маршрутизация запросов к нашим сервисам
minikube addons enable ingress
Проверьте, что появился ingress-controller
kubectl get pods -n ingress-nginx
- Соберите docker образы
eval $(minikube docker-env)
docker-compose build accounts blocker cash exchange-generator exchange front notification transfer
- Обновите зависимости helm чарта
cd .deployment
helm dependency update .
- Установите keycloak
cd ..
kubectl apply -f keycloak-deployment.yaml
## для удаления
kubectl delete -f keycloak-deployment.yaml
- Установите kafka
cd ..
kubectl apply -f kafka-deployment.yaml
## для удаления
kubectl delete -f kafka-deployment.yaml
- Добавьте записи в
/etc/hosts
sudo nano /etc/hostsДобавьте:
127.0.0.1 keycloak.test.local
127.0.0.1 front.test.local
-
Используйте
minikube tunnel -
Импортируйте скоупы и клиенты для keycloak
cd .docker/keycloak-config-loader/scripts
sh upload-scopes-to-keycloak.sh
sh upload-clients-to-keycloak.sh
- Задеплойте сервисы с помощью helm чартов
cd .deployment
# for install
helm install bankapp .
# for update
helm upgrade bankapp .
# for delete
helm uninstall bankapp
- Перейдите по ссылке
http://front.test.local
- перейти в папку
.deploymentи выполнить комманды:
helm lint .
helm install --dry-run bankapp .
helm test bankapp
- Установите зависимости
Для запуска проекта вам понадобятся:
- Docker Desktop
- Включённый Kubernetes в Docker Desktop (настройка → Kubernetes → Enable Kubernetes)
- Установленный Git
Устанавливать Helm или kubectl локально не нужно — они уже установлены в Jenkins-контейнере.
- Создайте файл
jenkins_kubeconfig.yaml
Jenkins будет использовать этот файл для доступа к Kubernetes.
Выполните в терминале:
cp ~/.kube/config jenkins_kubeconfig.yamlЗатем отредактируйте файл:
Замените server на:
server: https://host.docker.internal:6443Добавьте:
insecure-skip-tls-verify: trueЭто нужно, чтобы Jenkins внутри контейнера смог обратиться к вашему локальному кластеру и проигнорировал самоподписанные сертификаты.
- Установите Ingress Controller в кластер
Ingress Controller — это компонент, который позволяет обращаться к сервисам Kubernetes через удобные HTTP-домены (
например, http://order.test.local).
Мы используем ingress-nginx. Установите его в кластер:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --create-namespace- Создайте
.envфайл
Создайте файл .env в корне проекта:
# Путь до локального kubeconfig-файла
KUBECONFIG_PATH=/Users/username/.kube/jenkins_kubeconfig.yaml
# Параметры для GHCR
GITHUB_USERNAME=your-username
GITHUB_TOKEN=ghp_...
GHCR_TOKEN=ghp_...
# Docker registry (в данном случае GHCR)
DOCKER_REGISTRY=ghcr.io/your-username
GITHUB_REPOSITORY=your-username/<проект>
# Пароль к базе данных PostgreSQL
DB_PASSWORD=your-db-passwordУбедитесь, что ваш GitHub Token имеет права
write:packages,read:packagesиrepo.
- Запустите Jenkins
cd jenkins
docker compose up -d --buildJenkins будет доступен по адресу: http://localhost:8080
- Откройте Jenkins: http://localhost:8080
- Перейдите в задачу
YandexHelmApp→Build Now - Jenkins выполнит:
- сборку и тесты
- сборку Docker-образов
- публикацию образов в GHCR
- деплой в Kubernetes в два namespace:
testиprod
sudo nano /etc/hostsДобавьте:
127.0.0.1 keycloak.test.local
127.0.0.1 front.test.local
curl -s http://front.test.local/actuator/healthОжидаемый ответ:
{
"status": "UP",
"groups": [
"liveness",
"readiness"
]
}Если вы хотите полностью остановить Jenkins, удалить namespace'ы test и prod, а также все установленные ресурсы,
используйте скрипт nuke-all.sh.
Он находится в папке jenkins:
cd jenkins
./nuke-all.sh