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 |