# Лабораторная работа 3 - REST API, Gateway и синхронный обмен между микросервисами ## ПИбд-42 || Алейкин Артем ### Описание В данной лабораторной работе мы разворачиваем два микросервиса: ProjectEntityProject - проект содержащий логику работы с сущностью 'Проект - Project'. TaskProject - проект содержащий логику работы с сущностью 'Задача - Task'. ### Файлы-конфигурации 1. docker-compose ``` services: nginx: image: nginx depends_on: - projectservice - taskservice volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf networks: - app-network ports: - 80:80 projectservice: build: context: . dockerfile: ProjectEntityProject/Dockerfile networks: - app-network ports: - 5001:8080 taskservice: build: context: . dockerfile: TaskProject/Dockerfile networks: - app-network ports: - 5002:8080 depends_on: - projectservice networks: app-network: driver: bridge ``` nginx: Сервис, который работает как обратный прокси-сервер и маршрутизирует запросы к другим сервисам (projectservice и taskservice), слушая на порту 80. Зависит от двух других сервисов: projectservice и taskservice. Прокси-сервер использует конфигурацию, предоставленную в nginx.conf. projectservice: Сервис, отвечающий за логику работы с проектами, доступный на порту 8080 внутри контейнера (проброшен на порт 5001). Этот сервис будет обрабатывать запросы, связанные с проектами. taskservice: Сервис, отвечающий за логику работы с задачами, доступный на порту 8080 внутри контейнера (проброшен на порт 5002). Этот сервис будет обрабатывать запросы, связанные с задачами. Зависит от projectservice, так как задачи связаны с проектами. Сервис nginx будет проксировать запросы с путями /projectservice/ и /taskservice/ на соответствующие контейнеры с сервисами. 2. nginx.conf ``` server { listen 80; server_name localhost; location /projectservice/ { proxy_pass http://projectservice:5001/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; } location /taskservice/ { proxy_pass http://taskservice:5002/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; } } ``` Этот файл конфигурирует Nginx для маршрутизации запросов: location /projectservice/: Все запросы, начинающиеся с /projectservice/, будут проксироваться к сервису projectservice, который работает на порту 5001. Заголовки, такие как Host, X-Real-IP и X-Forwarded-Proto, устанавливаются для правильной передачи информации о запросе. location /taskservice/: Все запросы, начинающиеся с /taskservice/, будут проксироваться к сервису taskservice, который работает на порту 5002. Аналогично, заголовки проксируются для корректной передачи данных. Этот конфигурационный файл гарантирует, что запросы к путям /projectservice/ и /taskservice/ будут перенаправляться на соответствующие сервисы через прокси-сервер Nginx. ### Шаги для запуска: Переходим в корневую папку всего решения и пишем команду: ``` docker-compose up --build ``` Видео демонстрации работы: https://vk.com/video248424990_456239610?list=ln-Doqjb41FQlfo377LN0