138 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Лабораторная работа №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