diff --git a/bondarenko_max_lab_2/.gitignore b/bondarenko_max_lab_2/.gitignore new file mode 100644 index 0000000..5a451dc --- /dev/null +++ b/bondarenko_max_lab_2/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +*.log \ No newline at end of file diff --git a/bondarenko_max_lab_2/README.md b/bondarenko_max_lab_2/README.md new file mode 100644 index 0000000..a93eb27 --- /dev/null +++ b/bondarenko_max_lab_2/README.md @@ -0,0 +1,55 @@ +# Лабораторная работа 2 - Разработка простейшего распределённого приложения +### ПИбд-42 || Бондаренко Максим + +# Описание работы + +> Задача: +В данной лабораторной работе изучить способы создания и развертывания простого распределённого приложения. + +### Первая программа лабораторной работы. +``` +Вариант - 2: Формирует файл /var/result/data.txt из первых строк всех файлов каталога /var/data. +Для реализации программы я буду использовать JavaScript с Node.js +``` + +### Вторая программа лабораторной работы. +``` +Вариант - 2: Ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt. +Для реализации программы я буду использовать JavaScript с Node.js +``` + +> Инструкция по запуску +1. Запуск Docker - Desktop +2. Открыть консоль в папке с docker-compose.yml +3. Ввести команду: +``` +docker-compose up --build +``` + +> Docker-compose.yml +``` +version: '3' +services: + app1: + build: + context: ./app-1 + volumes: + - ./data:/var/data # Монтируем локальную папку data в /var/data + - ./result:/var/result # Монтируем локальную папку result в /var/result + container_name: app1 + + app2: + build: + context: ./app-2 + depends_on: + - app1 + volumes: + - ./result:/var/result # Монтируем ту же папку result + container_name: app2 +``` +#### В результате в папке result создаётся два текстовых документа: +1. data - результат работы первого проекта +2. result - результат работы второго проекта + +> Видео демонстрация работы +https://cloud.mail.ru/public/FyyE/LTkRXBQXN \ No newline at end of file diff --git a/bondarenko_max_lab_2/app-1/Dockerfile b/bondarenko_max_lab_2/app-1/Dockerfile new file mode 100644 index 0000000..be4d002 --- /dev/null +++ b/bondarenko_max_lab_2/app-1/Dockerfile @@ -0,0 +1,14 @@ +# Образ с Node.js версии 18 +FROM node:18 + +# Создание директории +WORKDIR /app + +# Добавление кода в контейнер из index.js +COPY index.js . + +# Установка рабочей папки для вводных данных и результата +RUN mkdir -p /var/data /var/result + +# Запуск index.js с помощью среды выполнения Node.js +CMD ["node", "index.js"] diff --git a/bondarenko_max_lab_2/app-1/index.js b/bondarenko_max_lab_2/app-1/index.js new file mode 100644 index 0000000..dafc41c --- /dev/null +++ b/bondarenko_max_lab_2/app-1/index.js @@ -0,0 +1,33 @@ +// Первая программа лабораторной работы. +// Вариант - 2: Формирует файл /var/result/data.txt из первых строк всех файлов каталога /var/data. +// Для реализации программы я буду использовать JavaScript с Node.js + +// Импорт модулей +const fs = require('fs'); +const path = require('path'); + +// Добавляем пути к папкам +const dataDir = '/var/data'; +const resultFile = '/var/result/data.txt'; + +// Функция для извлечения первых строк всех файлов в data и записи резултата в result +const gatherFirstLines = () => { + // Обёртываю в try/catch + try { + const files = fs.readdirSync(dataDir); // Считывание название файлов из data + // Проходимся по файлам + // Добовляем первые строчки + const firstLines = files.map((file) => { + const filePath = path.join(dataDir, file); + const content = fs.readFileSync(filePath, 'utf-8'); + return content.split('\n')[0]; + }); + + fs.writeFileSync(resultFile, firstLines.join('\n')); // Записываем первые строки в `data.txt` + console.log('First lines have been successfully written to', resultFile); // Логирую в терминал результат + } catch (error) { + console.error('Error processing files:', error); // Перехватываю ошибку + } +}; + +gatherFirstLines(); // Вызываю функцию diff --git a/bondarenko_max_lab_2/app-2/Dockerfile b/bondarenko_max_lab_2/app-2/Dockerfile new file mode 100644 index 0000000..be4d002 --- /dev/null +++ b/bondarenko_max_lab_2/app-2/Dockerfile @@ -0,0 +1,14 @@ +# Образ с Node.js версии 18 +FROM node:18 + +# Создание директории +WORKDIR /app + +# Добавление кода в контейнер из index.js +COPY index.js . + +# Установка рабочей папки для вводных данных и результата +RUN mkdir -p /var/data /var/result + +# Запуск index.js с помощью среды выполнения Node.js +CMD ["node", "index.js"] diff --git a/bondarenko_max_lab_2/app-2/index.js b/bondarenko_max_lab_2/app-2/index.js new file mode 100644 index 0000000..322d876 --- /dev/null +++ b/bondarenko_max_lab_2/app-2/index.js @@ -0,0 +1,30 @@ +// Вторая программа лабораторной работы. +// Вариант - 2: Ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt. +// Для реализации программы я буду использовать JavaScript с Node.js + +// Импорт модулей +const fs = require('fs'); +const path = require('path'); + +// Добавляем пути к папкам +const dataFile = '/var/result/data.txt'; +const resultFile = '/var/result/result.txt'; + +// Функция для запаси наименьшего числа в кубе из data в result +const calculateMinCubed = () => { + // Обёртываю в try/catch + try { + const content = fs.readFileSync(dataFile, 'utf-8'); // Открытие файла с кодировкой UTF-8 + const numbers = content.split('\n').map(Number).filter(Boolean); // Преобразую в числа + + const minNumber = Math.min(...numbers); // Ищу минимальное число + const result = Math.pow(minNumber, 3); // Возвожу в 3-тью степень + + fs.writeFileSync(resultFile, result.toString()); // Записываю результат в файл + console.log(`Cubed minimum number (${minNumber}^3) saved to`, resultFile); // Логирую в терминал результат + } catch (error) { + console.error('Error processing file:', error); // Перехватываю ошибку + } +}; + +calculateMinCubed(); // Вызываю функцию diff --git a/bondarenko_max_lab_2/data/file1.txt b/bondarenko_max_lab_2/data/file1.txt new file mode 100644 index 0000000..aa6397b --- /dev/null +++ b/bondarenko_max_lab_2/data/file1.txt @@ -0,0 +1,10 @@ +25 +91 +77 +63 +45 +25 +21 +89 +6 +18 \ No newline at end of file diff --git a/bondarenko_max_lab_2/data/file2.txt b/bondarenko_max_lab_2/data/file2.txt new file mode 100644 index 0000000..03b13de --- /dev/null +++ b/bondarenko_max_lab_2/data/file2.txt @@ -0,0 +1,10 @@ +98 +62 +45 +77 +65 +45 +61 +62 +10 +76 \ No newline at end of file diff --git a/bondarenko_max_lab_2/data/file3.txt b/bondarenko_max_lab_2/data/file3.txt new file mode 100644 index 0000000..76c935a --- /dev/null +++ b/bondarenko_max_lab_2/data/file3.txt @@ -0,0 +1,10 @@ +37 +54 +100 +34 +1 +77 +55 +10 +30 +28 \ No newline at end of file diff --git a/bondarenko_max_lab_2/docker-compose.yml b/bondarenko_max_lab_2/docker-compose.yml new file mode 100644 index 0000000..384d101 --- /dev/null +++ b/bondarenko_max_lab_2/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3' +services: + app1: + build: + context: ./app-1 + volumes: + - ./data:/var/data # Монтируем локальную папку data в /var/data + - ./result:/var/result # Монтируем локальную папку result в /var/result + container_name: app1 + + app2: + build: + context: ./app-2 + depends_on: + - app1 + volumes: + - ./result:/var/result # Монтируем ту же папку result + container_name: app2