DAS_2024_1/aleikin_artem_lab_3/readme.md

4.7 KiB
Raw Blame History

Лабораторная работа 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/ на соответствующие контейнеры с сервисами.

  1. 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