Skip to content

Repository files navigation

Expense Tracker

Portfolio Summary

Full-stack expense tracker with a Spring Boot REST API, PostgreSQL storage, React UI and cloud deployment automation. The repository demonstrates backend development, containerization and infrastructure provisioning with Docker Compose, Terraform and Ansible.

Stack: Java, Spring Boot, PostgreSQL, React, Docker, Terraform, Ansible, Yandex Cloud.

Проект состоит из двух приложений:

  • expense-service - RESTful сервис (Spring Boot + PostgreSQL)
  • expense-web-client-react - клиентское веб-приложение на JS (React), общающееся с сервисом по REST

Функциональность

  • Добавить расход
  • Получить список расходов
  • Изменить сумму/категорию
  • Удалить расход

Запуск

Поднимает сразу PostgreSQL, backend и React UI:

docker compose up -d --build

Открыть:

  • UI: http://localhost:3000/
  • REST API: http://localhost:8081/api/expenses

Остановка:

docker compose down

Тесты

Запуск модульных тестов для backend:

mvn test

Запуск модульных тестов для frontend:

cd expense-web-client-react/
npm test

Лабораторная работа 2

Для ЛР-2 используется только облачная инфраструктура Yandex Cloud:

  • Terraform: infra/terraform/
  • Ansible: infra/ansible/
  • Yandex Container Registry

Быстрый сценарий

  1. Создать/подготовить registry в Yandex Container Registry.

  2. Собрать и загрузить образы:

yc container registry configure-docker
REGISTRY_ID=<registry_id>

docker buildx build --platform linux/amd64 -f expense-service/Dockerfile -t cr.yandex/$REGISTRY_ID/expense-service:latest --push .
docker buildx build --platform linux/amd64 -f expense-web-client-react/Dockerfile -t cr.yandex/$REGISTRY_ID/expense-web-client-react:latest --push .
  1. Подготовить VM через Terraform:
cd infra/terraform
cp terraform.tfvars.example terraform.tfvars
terraform init
terraform apply
  1. Получить строку для Ansible inventory:
terraform output ansible_host_line
  1. Настроить Ansible:
cd ../ansible
cp inventory/hosts.ini.example inventory/hosts.ini

Вставить хост в inventory/hosts.ini.

  1. Указать образы в group_vars/all.yml:
  • backend_image
  • frontend_image
  1. Установить Docker и задеплоить приложение:
ansible-playbook playbooks/install-docker.yml
YC_IAM_TOKEN="$(yc iam create-token)"
ansible-playbook playbooks/deploy-expense-app.yml -e "registry_username=iam registry_password=${YC_IAM_TOKEN}"
  1. Проверить приложение:
  • UI: http://<vm_external_ip>:3000/
  • REST API: http://<vm_external_ip>:8081/api/expenses

About

Full-stack expense tracker with Spring Boot, React, PostgreSQL, Docker, Terraform and Ansible deployment automation.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages