From 287fb33386ef56d6ab72b2865533bba574826d8e Mon Sep 17 00:00:00 2001 From: maxnes3 Date: Mon, 25 Nov 2024 02:23:32 +0400 Subject: [PATCH] bondarenko_max_lab_3 --- bondarenko_max_lab_3/README.md | 108 +++++++++++++++++++++++- bondarenko_max_lab_3/docker-compose.yml | 17 +++- bondarenko_max_lab_3/nginx.conf | 6 ++ 3 files changed, 129 insertions(+), 2 deletions(-) diff --git a/bondarenko_max_lab_3/README.md b/bondarenko_max_lab_3/README.md index 88e8d6e..6bd2133 100644 --- a/bondarenko_max_lab_3/README.md +++ b/bondarenko_max_lab_3/README.md @@ -1,2 +1,108 @@ # Лабораторная работа 3 - REST API, Gateway и синхронный обмен между микросервисами -### ПИбд-42 || Бондаренко Максим \ No newline at end of file +### ПИбд-42 || Бондаренко Максим + +> Цель: +Изучение шаблона проектирования gateway, построения синхронного обмена между микросервисами и архитектурного стиля RESTful API. + +> Задачи: +1. Создать 2 микросервиса, реализующих CRUD на связанных сущностях. +2. Реализовать механизм синхронного обмена сообщениями между микросервисами. +3. Реализовать шлюз на основе прозрачного прокси-сервера nginx. + +> Описание +В данной лабораторной работе мы разворачиваем два микросервиса: + +1. Authors - микросервис для управления авторами. +2. Books - микросервис для управления книгами. + +> Файлы-конфигурации +1. docker-compose.yml +``` +version: '3.7' + +services: + authors: + build: + context: ./authors + ports: + - "3000:3000" + networks: + - app-network + + books: + build: + context: ./books + ports: + - "3001:3001" + networks: + - app-network + depends_on: + - authors + + nginx: + image: nginx:latest + ports: + - "80:80" + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf + depends_on: + - authors + - books + networks: + - app-network + +networks: + app-network: + driver: bridge +``` + +authors: Микросервис, отвечающий за управление данными об авторах, доступный на порту 3000. +books: Микросервис, отвечающий за управление данными о книгах, доступный на порту 3001. Зависит от микросервиса authors. +nginx: Сервис, работающий как обратный прокси-сервер, маршрутизирующий запросы к другим сервисам authors и books, слушая на порту 80. + +2. nginx.conf +``` +events { + worker_connections 1024; +} + +http { + upstream authors_service { + server authors:3000; + } + + upstream books_service { + server books:3001; + } + + server { + listen 80; + + location /authors { + proxy_pass http://authors_service; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /books { + proxy_pass http://books_service; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + } + } +} +``` + +location /authors: Все запросы, начинающиеся с /authors, будут проксироваться к микросервису authors, который работает на порту 3000. +location /books: Все запросы, начинающиеся с /books, будут проксироваться к микросервису books, который работает на порту 3001. + +### Шаги для запуска: +Переходим в корневую папку всего решения и пишем команду: +``` +docker-compose up --build +``` + +> Видео демонстрация работы +https://cloud.mail.ru/public/hLWs/iuqweU92e \ No newline at end of file diff --git a/bondarenko_max_lab_3/docker-compose.yml b/bondarenko_max_lab_3/docker-compose.yml index 346a925..55ef79d 100644 --- a/bondarenko_max_lab_3/docker-compose.yml +++ b/bondarenko_max_lab_3/docker-compose.yml @@ -6,16 +6,31 @@ services: context: ./authors ports: - "3000:3000" + networks: + - app-network books: build: context: ./books ports: - "3001:3001" + networks: + - app-network + depends_on: + - authors nginx: image: nginx:latest ports: - "80:80" volumes: - - ./nginx.conf:/etc/nginx/nginx.conf \ No newline at end of file + - ./nginx.conf:/etc/nginx/nginx.conf + depends_on: + - authors + - books + networks: + - app-network + +networks: + app-network: + driver: bridge diff --git a/bondarenko_max_lab_3/nginx.conf b/bondarenko_max_lab_3/nginx.conf index 83547e4..3d955cf 100644 --- a/bondarenko_max_lab_3/nginx.conf +++ b/bondarenko_max_lab_3/nginx.conf @@ -16,10 +16,16 @@ http { location /authors { proxy_pass http://authors_service; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; } location /books { proxy_pass http://books_service; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; } } } \ No newline at end of file