# Лабораторная работа №3. ## Задание - Создать 2 микросервиса, реализующих CRUD на связанных сущностях. - Реализовать механизм синхронного обмена сообщениями между микросервисами. - Реализовать шлюз на основе прозрачного прокси-сервера nginx. Вариант: геоданные и пользователи ## Выбранные сервисы Были написаны два сервиса на языке python с технологией flask: - Сервис geodata_service, хранящий геоданные и реализующий CRUD операции с ними через HTTP запросы. - Сервис user_service, хранящий данные о пользователях и реализующий CRUD операции с ними через HTTP запросы. ## Docker-файл для geodata_service ```dockerfile FROM python:3.11 WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . /app CMD ["gunicorn", "--bind", "0.0.0.0:5001", "geodata_service:app"] ``` ## Docker-файл для user_service ```dockerfile FROM python:3.11 WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . /app CMD ["gunicorn", "--bind", "0.0.0.0:5002", "user_service:app"] ``` ## Docker-файл для nginx ```dockerfile FROM nginx COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ``` ## nginx.conf ```nginx events { worker_connections 1024; } http { server { listen 80; listen [::]:80; server_name localhost; location /geodata-service/ { proxy_pass http://geodata-service:5001/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /user-service/ { proxy_pass http://user-service:5002/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } } ``` Docker-compose ```yaml version: '3.8' services: geodata-service: build: context: ./geodata_service ports: - "5001:5001" networks: - my_network restart: always user-service: build: context: ./user_service ports: - "5002:5002" networks: - my_network restart: always nginx: image: nginx:latest ports: - "80:80" depends_on: - geodata-service - user-service networks: - my_network volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf restart: always networks: my_network: driver: bridge ``` ## Запуск Командой в консоли проекта: ```bash docker-compose up -d --build ``` ## Ссылка на видео https://drive.google.com/file/d/1dXwl8p4sL60CcTIrtSztYgMNt0RL4qXe/view?usp=sharing