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