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