138 lines
3.2 KiB
Markdown
138 lines
3.2 KiB
Markdown
|
# Лабораторная работа №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
|
|||
|
|
|||
|
|
|||
|
|