From 23dfef9856ffc769921c534db628e8f7d4b3d7ac Mon Sep 17 00:00:00 2001 From: DmitriyAntonov Date: Sun, 12 Nov 2023 12:05:59 +0400 Subject: [PATCH] =?UTF-8?q?=D1=81=D1=82=D0=B0=D1=80=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 5 +- antonov_dmitry_lab_3/README.md | 67 +++++++++++++++++++ antonov_dmitry_lab_3/docker-compose.yml | 23 +++++++ antonov_dmitry_lab_3/service_a.conf | 8 +++ antonov_dmitry_lab_3/service_a/Dockerfile | 13 ++++ antonov_dmitry_lab_3/service_a/app.py | 38 +++++++++++ .../service_a/requirements.txt | 1 + antonov_dmitry_lab_3/service_b.conf | 8 +++ antonov_dmitry_lab_3/service_b/Dockerfile | 13 ++++ antonov_dmitry_lab_3/service_b/app.py | 38 +++++++++++ .../service_b/requirements.txt | 1 + 11 files changed, 212 insertions(+), 3 deletions(-) create mode 100644 antonov_dmitry_lab_3/README.md create mode 100644 antonov_dmitry_lab_3/docker-compose.yml create mode 100644 antonov_dmitry_lab_3/service_a.conf create mode 100644 antonov_dmitry_lab_3/service_a/Dockerfile create mode 100644 antonov_dmitry_lab_3/service_a/app.py create mode 100644 antonov_dmitry_lab_3/service_a/requirements.txt create mode 100644 antonov_dmitry_lab_3/service_b.conf create mode 100644 antonov_dmitry_lab_3/service_b/Dockerfile create mode 100644 antonov_dmitry_lab_3/service_b/app.py create mode 100644 antonov_dmitry_lab_3/service_b/requirements.txt diff --git a/.idea/misc.xml b/.idea/misc.xml index 6e86672..a971a2c 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,4 @@ + - - - + \ No newline at end of file diff --git a/antonov_dmitry_lab_3/README.md b/antonov_dmitry_lab_3/README.md new file mode 100644 index 0000000..4f087bf --- /dev/null +++ b/antonov_dmitry_lab_3/README.md @@ -0,0 +1,67 @@ +# Лабораторная работа №1 - Знакомство с docker и docker-compose + +Разверните 3 сервиса на выбор в контейнерах docker с помощью docker-compose. +Требования и docker-compose: + +Несколько контейнеров. +Хотя бы один volume. +Хотя бы один порт, проброшенный на хост. +При этом разворачивание системы должно пройти до конца. Например, должен быть создан +администратор и система должна корректно функционировать. Это необходимо будет предоставить +в отчёте, поэтому не забывайте делать скриншоты. + +# Выбранные сервисы + +* mediawiki - движок вики +* drupal - популярная система управления контентом +* wordpress - популярная система управления контентом. + +# Запуск + +Командой в консоли проекта "docker-compose up -d" + +# Описание работы: +Развернули три сервиса плюс базу данных к ним. +Подробное описание для docker-compose дано в комментариях. + +1. mediawiki: +- доступ на http://localhost:8080/ + +2. drupal: +- доступ на http://localhost:8081/ + +3. wordpress: +- доступ на http://localhost:8082/ + +

+

Старт сервисов
+ +

+

+

Сервисы
+ +

+

+

Images
+ +

+

+

Volumes
+ +

+

+

Сервис 1
+ +

+

+

Сервис 2
+ +

+

+

Сервис 3
+ +

+ +# Ссылка на видео +https://disk.yandex.ru/i/nG5KrHy_DsQxuw + diff --git a/antonov_dmitry_lab_3/docker-compose.yml b/antonov_dmitry_lab_3/docker-compose.yml new file mode 100644 index 0000000..b155a69 --- /dev/null +++ b/antonov_dmitry_lab_3/docker-compose.yml @@ -0,0 +1,23 @@ +version: '3' + +services: + service_a: + build: ./service_a + ports: + - "5000:5000" + + service_b: + build: ./service_b + ports: + - "5001:5001" + + nginx: + image: nginx + ports: + - "80:80" + volumes: + - ./service_a.conf:/etc/nginx/conf.d/service_a.conf + - ./service_b.conf:/etc/nginx/conf.d/service_b.conf + depends_on: + - service_a + - service_b diff --git a/antonov_dmitry_lab_3/service_a.conf b/antonov_dmitry_lab_3/service_a.conf new file mode 100644 index 0000000..cece274 --- /dev/null +++ b/antonov_dmitry_lab_3/service_a.conf @@ -0,0 +1,8 @@ +server { + listen 80; + server_name service_a; + + location / { + proxy_pass http://service_a:5000; + } +} \ No newline at end of file diff --git a/antonov_dmitry_lab_3/service_a/Dockerfile b/antonov_dmitry_lab_3/service_a/Dockerfile new file mode 100644 index 0000000..cb42ab3 --- /dev/null +++ b/antonov_dmitry_lab_3/service_a/Dockerfile @@ -0,0 +1,13 @@ +FROM python:3.8-slim + +WORKDIR /app + +COPY . /app + +RUN pip install --no-cache-dir -r requirements.txt + +EXPOSE 5000 + +ENV NAME service_a + +CMD ["python", "app.py"] diff --git a/antonov_dmitry_lab_3/service_a/app.py b/antonov_dmitry_lab_3/service_a/app.py new file mode 100644 index 0000000..f5d6095 --- /dev/null +++ b/antonov_dmitry_lab_3/service_a/app.py @@ -0,0 +1,38 @@ +from flask import Flask, jsonify, request + +app = Flask(__name__) + +# хранение данных сущности A +entity_a_data = [] + + +@app.route('/entity_a', methods=['GET']) +def get_entity_a(): + return jsonify(entity_a_data) + + +@app.route('/entity_a', methods=['POST']) +def create_entity_a(): + new_entity = request.json + entity_a_data.append(new_entity) + return jsonify(new_entity), 201 + + +@app.route('/entity_a/', methods=['PUT']) +def update_entity_a(id): + for entity in entity_a_data: + if entity['id'] == id: + entity.update(request.json) + return jsonify(entity), 200 + return jsonify({'error': 'Entity not found'}), 404 + + +@app.route('/entity_a/', methods=['DELETE']) +def delete_entity_a(id): + global entity_a_data + entity_a_data = [entity for entity in entity_a_data if entity['id'] != id] + return jsonify({'message': 'Entity deleted'}), 200 + + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5000) diff --git a/antonov_dmitry_lab_3/service_a/requirements.txt b/antonov_dmitry_lab_3/service_a/requirements.txt new file mode 100644 index 0000000..2077213 --- /dev/null +++ b/antonov_dmitry_lab_3/service_a/requirements.txt @@ -0,0 +1 @@ +Flask \ No newline at end of file diff --git a/antonov_dmitry_lab_3/service_b.conf b/antonov_dmitry_lab_3/service_b.conf new file mode 100644 index 0000000..fc397e1 --- /dev/null +++ b/antonov_dmitry_lab_3/service_b.conf @@ -0,0 +1,8 @@ +server { + listen 80; + server_name service_b; + + location / { + proxy_pass http://service_b:5001; + } +} diff --git a/antonov_dmitry_lab_3/service_b/Dockerfile b/antonov_dmitry_lab_3/service_b/Dockerfile new file mode 100644 index 0000000..54a28d8 --- /dev/null +++ b/antonov_dmitry_lab_3/service_b/Dockerfile @@ -0,0 +1,13 @@ +FROM python:3.8-slim + +WORKDIR /app + +COPY . /app + +RUN pip install --no-cache-dir -r requirements.txt + +EXPOSE 5001 + +ENV NAME service_b + +CMD ["python", "app.py"] diff --git a/antonov_dmitry_lab_3/service_b/app.py b/antonov_dmitry_lab_3/service_b/app.py new file mode 100644 index 0000000..49d7c42 --- /dev/null +++ b/antonov_dmitry_lab_3/service_b/app.py @@ -0,0 +1,38 @@ +from flask import Flask, jsonify, request + +app = Flask(__name__) + +# хранение данных сущности B +entity_b_data = [] + + +@app.route('/entity_b', methods=['GET']) +def get_entity_b(): + return jsonify(entity_b_data) + + +@app.route('/entity_b', methods=['POST']) +def create_entity_b(): + new_entity = request.json + entity_b_data.append(new_entity) + return jsonify(new_entity), 201 + + +@app.route('/entity_b/', methods=['PUT']) +def update_entity_b(id): + for entity in entity_b_data: + if entity['id'] == id: + entity.update(request.json) + return jsonify(entity), 200 + return jsonify({'error': 'Entity not found'}), 404 + + +@app.route('/entity_b/', methods=['DELETE']) +def delete_entity_b(id): + global entity_b_data + entity_b_data = [entity for entity in entity_b_data if entity['id'] != id] + return jsonify({'message': 'Entity deleted'}), 200 + + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5001) diff --git a/antonov_dmitry_lab_3/service_b/requirements.txt b/antonov_dmitry_lab_3/service_b/requirements.txt new file mode 100644 index 0000000..2077213 --- /dev/null +++ b/antonov_dmitry_lab_3/service_b/requirements.txt @@ -0,0 +1 @@ +Flask \ No newline at end of file