99 lines
4.7 KiB
Markdown
99 lines
4.7 KiB
Markdown
|
# Лабораторная работа 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
|