diff --git a/README.md b/README.md index 1e87e47..433f63f 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,8 @@ 1. [Знакомство с docker и docker-compose](labs/lab_1/README.md) 2. [Разработка простейшего распределённого приложения](labs/lab_2/README.md) -3. TBA -4. TBA +3. [REST API, Gateway и синхронный обмен между микросервисами](labs/lab_3/README.md) +4. [Работа с брокером сообщений](labs/lab_4/README.md) 5. TBA 6. TBA 7. TBA diff --git a/labs/lab_3/README.md b/labs/lab_3/README.md new file mode 100644 index 0000000..91fd5ad --- /dev/null +++ b/labs/lab_3/README.md @@ -0,0 +1,129 @@ +# Лабораторная работа №3 - REST API, Gateway и синхронный обмен между микросервисами + +Цель: изучение шаблона проектирования gateway, построения синхронного обмена между микросервисами и архитектурного стиля RESTful API. + +Задачи: + +1. Создать 2 микросервиса, реализующих CRUD на связанных сущностях. +2. Реализовать механизм синхронного обмена сообщениями между микросервисами. +3. Реализовать шлюз на основе прозрачного прокси-сервера nginx. + +## Создание микросервисов + +Создать два микросервиса. + +Каждый сервис реализует CRUD-операции: список записей, подробности конкретной записи, создание, удаление и изменение записи. + +В качестве хранилища данных может выступать оперативная память приложения или база данных. + +Сущности необходимо подобрать по следующим критериям: + +1. Они должны быть связаны с предполагаемой темой диплома. +2. Они должны быть связаны как `1-ко-многим``. + +> Например, одна сущность - книга в библиотеке, вторая - абонемент. +> +> Поля абонемента: УИД (уникальный идентификатор) абонемента, Номер, ФИО читателя, Дата выдачи. +> Поля книги: УИД книги, Автор, Название, Год издания, УИД абонемента, на котором сейчас находится книга. + +Общение между сервисами должно происходить при помощи API, реализованного при помощи архитектурного стиля проектирования REST. +То есть необходимо реализовать следующие endpoints: + +1. "GET /" - Получение списка записей. + Должен возвращать массив моделей. +2. "GET /{uuid}" - Получение подробностей записи по УИД (uuid). + Должен возвращать модель или ошибку 404. +3. "POST /" - Создание новой записи. + Принимает на вход данные. Должен возвращать модель из п.2. +4. "PUT /{uuid}" - Обновление записи по УИД. + Принимает на вход новые данные. Должен возвращать модель из п.2 или ошибку 404. +5. "DELETE /{uuid}" - Удаление записи по УИД. + Возвращает коды 200 при успехе и 404, если запись не найдена. + +Пример модели абонемента для списка и подробностей: + +```json +{ + "uuid": "8f036445-a5bd-401c-926e-840f9de795cd", + "number": 135, + "fullName": "Иванов И.И.", + "issued": "2023-10-18T05:41:00Z" +} +``` + +Пример модели абонемента для создания или изменения: + +```json +{ + "number": 135, + "fullName": "Иванов И.И.", + "issued": "2023-10-18T05:41:00Z" +} +``` + +> Как видите, нет УИДа, т.к. он присваивается системой, и изменять мы его не можем. + +Пример модели книги для списка: + +```json +{ + "uuid": "8740d660-b251-4272-8535-be7ec3748d4b", + "author": "J.K.R.", + "subject": "HP and PS", + "year": 1997, + "subscriptionUuid": "8f036445-a5bd-401c-926e-840f9de795cd" +} +``` + +Пример модели книги для подробностей: + +```json +{ + "uuid": "8740d660-b251-4272-8535-be7ec3748d4b", + "author": "J.K.R.", + "subject": "HP and PS", + "year": 1997, + "subscriptionUuid": "8f036445-a5bd-401c-926e-840f9de795cd", + "subscriptionInfo": { + "number": 135, + "fullName": "Иванов И.И.", + "issued": "2023-10-18T05:41:00Z" + } +} +``` + +> Как видите, модель сильно богаче, чем при запросе списка. +> +> Как раз здесь и нужен синхронный обмен между сервисами. + +Пример модели книги для создания или изменения: + +```json +{ + "author": "J.K.R.", + "subject": "HP and PS", + "year": 1997, + "subscriptionUuid": "8f036445-a5bd-401c-926e-840f9de795cd" +} +``` + +Как понять, куда обращаться микросервису книг для получения данных об абонементах? +Нам здесь поможет docker compose: код в "service" совпадает с хостом, куда следует обращаться. + +## Реализация синхронного обмена + +Как реализовать непосредственно работу с endpoints? +Например, использовать ASP.NET Core Minimal APIs. +[Небольшой пример, который это показывает](./example_1.cs). + +Как вызвать синхронно данные с соседнего микросервиса? +Через HTTP-клиент! +[Небольшой пример, который это показывает](./example_2.cs). + +## Реализация gateway при помощи nginx + +Один сервер, несколько location, proxy_pass по хосту из docker-compose.yml, открытые порты наружу и... всё. + +[Пример файла с настройкой nginx](./example_nginx.conf). + +[Ещё один пример связи воркеров и nginx](../../tasks/moiseev-vv/lab_3). diff --git a/labs/lab_3/example_1.cs b/labs/lab_3/example_1.cs new file mode 100644 index 0000000..5e35792 --- /dev/null +++ b/labs/lab_3/example_1.cs @@ -0,0 +1,76 @@ +List tasks = new() +{ + new TaskEntity() { Uuid= Guid.NewGuid(), Subject = "Сдать третью лабу", IsCompleted = false }, +}; + +var builder = WebApplication.CreateBuilder(args); +var app = builder.Build(); + +// Массив сущностей. +app.MapGet("/", () => +{ + return tasks.Select(t => new TaskEntityDto() + { + Uuid = t.Uuid, + Subject = t.Subject, + IsCompleted = t.IsCompleted, + }); +}); + +// Подробности сущности. +app.MapGet("/{uuid}", (Guid uuid) => +{ + var task = tasks.FirstOrDefault(t => t.Uuid == uuid); + if (task == null) + return Results.NotFound(); + return Results.Json(new TaskEntityDto() + { + Uuid = task.Uuid, + Subject = task.Subject, + IsCompleted = task.IsCompleted, + }); +}); + +// Создание сущности. +app.MapPost("/", () => { throw new NotImplementedException(); }); + +// Изменение сущности. +app.MapPut("/{uuid}", () => { throw new NotImplementedException(); }); + +// Удаление сущности. +app.MapPost("/", () => { throw new NotImplementedException(); }); + +app.Run(); + +/// +/// Сама сущность. +/// +public class TaskEntity +{ + public Guid Uuid { get; set; } + public string Subject { get; set; } = string.Empty; + public bool IsCompleted { get; set; } +} + +/// +/// DTO-класс для описания сущности в API. +/// +public class TaskEntityDto : TaskEntity { } + +/// +/// Запрос на создание сущности. +/// +public class TaskCreateRequest +{ + public string Subject { get; set; } = string.Empty; + public bool IsCompleted { get; set; } +} + +/// +/// Запрос на изменение сущности. +/// +public class TaskEditRequest +{ + public string Subject { get; set; } = string.Empty; + public bool IsCompleted { get; set; } +} diff --git a/labs/lab_3/example_2.cs b/labs/lab_3/example_2.cs new file mode 100644 index 0000000..1de87e7 --- /dev/null +++ b/labs/lab_3/example_2.cs @@ -0,0 +1,26 @@ +var builder = WebApplication.CreateBuilder(args); +builder.Services.AddHttpClient(); // Добавляем библиотеку по работе с HTTP. +var app = builder.Build(); + +// Да, по заданию надо будет запрашивать метод /{uuid}. Тут запрашивается список. +app.MapGet("/", async (IHttpClientFactory httpClientFactory) => +{ + var remoteHost = "http://localhost:5158"; // Адрес, по которому развёрнут микросервис с задачами. В docker compose тут будет имя service. + var client = httpClientFactory.CreateClient(); + var response = await client.GetFromJsonAsync>(remoteHost); + if (response == null) + return Results.BadRequest(); + return Results.Ok($"Соседний микросервис отдал следующие задачи: {string.Join(", ", response.Select(i => i.Subject))}"); +}); + +app.Run(); + +/// +/// DTO-класс для описания сущности из другого микросервиса. +/// +public class TaskEntityDto +{ + public Guid Uuid { get; set; } + public string Subject { get; set; } = string.Empty; + public bool IsCompleted { get; set; } +} diff --git a/labs/lab_3/example_nginx.conf b/labs/lab_3/example_nginx.conf new file mode 100644 index 0000000..9d3e2b3 --- /dev/null +++ b/labs/lab_3/example_nginx.conf @@ -0,0 +1,21 @@ +server { + listen 80; + listen [::]:80; + server_name localhost; + + location /test/ { + proxy_pass http://test:80/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Prefix /test; + } + + location /admin/ { + proxy_pass http://admin:80/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Prefix /admin; + } +} diff --git a/labs/lab_4/README.md b/labs/lab_4/README.md new file mode 100644 index 0000000..9db8d7e --- /dev/null +++ b/labs/lab_4/README.md @@ -0,0 +1,59 @@ +# Лабораторная работа №4 - Работа с брокером сообщений + +**Цель**: изучение проектирования приложений при помощи брокера сообщений. + +**Задачи**: + +1. Установить брокер сообщений RabbitMQ. +2. Пройти уроки 1, 2 и 3 из [RabbitMQ Tutorials](https://www.rabbitmq.com/getstarted.html) на любом языке программирования. +3. Продемонстрировать работу брокера сообщений. + +## Установка брокера сообщений RabbitMQ + +Можно не использовать Docker и использовать локальный ПК. + +[Страница скачивания RabbitMQ с офф. сайта](https://www.rabbitmq.com/download.html). + +[Страница релизов RabbitMQ](https://github.com/rabbitmq/rabbitmq-server/releases/), где есть бинарные установщики для всех современных платформ. + +## Прохождение tutorial + +Достаточно для каждого урока скриншота, где виден запуск одновременно `producer` и `consumer`, а также видно, что сообщения передаются. + +## Разработка демонстрационных приложений + +См. 3 главу tutorial. + +Необходимо выбрать предметную область и разработать следующие приложения: + +1. **Publisher**. + Программа, которая создаёт один **exchange** с типом _fanout_. + Программа должна раз в секунду генерировать сообщения в журнал событий согласно вашей предметной области. + Например, событие "пришёл заказ" или "сообщение от пользователя" или "необходимо создать отчёт". +2. **Consumer 1**. + Программа, которая создаёт под себя отдельную не анонимную (!) очередь (**queue**) (то есть имя queue НЕ пустая строка), создаёт **binding** на **exchange** и начинает принимать сообщения (_consume_). + Программа должна обрабатывать сообщения 2-3 секунды. + Можно реализовать через обычный _Thread.Sleep_ (для C#). +3. **Consumer 2**. + Аналогично _Consumer 1_, только сообщения необходимо обрабатывать моментально. + Только имя очереди должно отличаться от _Consumer 1_. + +Далее необходимо собрать и запустить приложения одновременно по одному экземпляру. + +Сделать в отчёте вывод о скорости обработки _consumer_-ами событий от _publisher_-а. +Для этого можно посмотреть заполненность созданных очередей. +А для этого можно использовать скриншот из **RabbitMQ Management UI**. + +Запустить несколько копий _Consumer 1_. +Проверить заново заполненность очередей через _UI_. + +## Правила оформления pull request + +Код и отчёт со скриншотами необходимо положить в папку `tasks/фамилия-инициалы/lab_4`. + +Не забудьте о файле `.gitignore`, чтобы не закоммитить ничего лишнего. +Для C#-проектов это, например, папки `bin` и `obj`. + +Правила именования ветки: `фамилия-инициалы-lab-номер`, например, `moiseev-vv-lab-4`. + +Название pull request: `[Л/Р 4] ФАМИЛИЯ ИМЯ`, например, `[Л/Р 4] Моисеев Владислав`. diff --git a/tasks/Melnikov-ky/lab_1/README.md b/tasks/Melnikov-ky/lab_1/README.md new file mode 100644 index 0000000..d8d137d --- /dev/null +++ b/tasks/Melnikov-ky/lab_1/README.md @@ -0,0 +1,149 @@ +# Отчёт по лабораторной работе №1 + +Выполнил: студент гр. ИСЭбд-41, Мельников К.Ю. + +## Разворачивание сервиса Gitea + +Содержимое файла `docker-compose.yml` в папке Gitea: +```yaml +version: "3" + +networks: + gitea: + external: false +# Контейнер Gitea +services: # Описание служб + server: + image: gitea/gitea:1.20.4 # Образ gitea + container_name: gitea # Наименование контейнера + environment: # Наши параметры + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=mysql + - GITEA__database__HOST=db:3306 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=gitea + restart: always + networks: # Параметры сети + - gitea + volumes: # Каталоги для хранения данных контейнера + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: # Порт локальный и внутри сети + - "3000:3000" + - "222:22" + depends_on: + - db +# База данных + db: + image: mysql:8 # Образ БД и версия + restart: always # Параметр перезапуска + environment: # Подключаем каталог с базой данных + - MYSQL_ROOT_PASSWORD=gitea + - MYSQL_USER=gitea + - MYSQL_PASSWORD=gitea + - MYSQL_DATABASE=gitea + networks: # Параметры сети + - gitea + volumes: # Том для хранения данных БД + - ./mysql:/var/lib/mysql +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](scrins/1.png) + +Открываем Docker Desktop и проверяем, что контейнер сервера БД и Gitea созданы и запущены: +![](scrins/2.png) + +Переходим на http://localhost:222: +![](scrins/3.png) + +Регистрируемся и автоматически входим в учетную запись: +![](scrins/4.png) +![](scrins/5.png) + +## Разворачивание сервиса Wordpress + +Также в файл `docker-compose.yml` в папке Wordpress прописываем следующий код: + +```yaml +version: '3.1' + +services: +# Контейнер Wordpress + wordpress: + image: wordpress # Образ + restart: always # Параметр перезапуска + ports: # На каком порте запускаем + - 7071:80 + environment: # Настройки БД WordPress для подключения + WORDPRESS_DB_HOST: database # Имя хоста БД MySQL + WORDPRESS_DB_USER: user # Имя пользователя БД + WORDPRESS_DB_PASSWORD: password # Пароль пользователя БД + WORDPRESS_DB_NAME: name_database # Имя БД + volumes: # Каталог хранения файлов WordPress + - wordpress:/var/www/html +# Контейнер MySQL + database: + image: mysql:5.7 # Образ и его версия + restart: always # Параметр перезапуска + environment: # Настройки БД для подключения + MYSQL_DATABASE: name_database + MYSQL_USER: user + MYSQL_PASSWORD: password + MYSQL_RANDOM_ROOT_PASSWORD: '12345' + volumes: # Каталог хранения данных БД + - database:/var/lib/mysql + +volumes: + wordpress: + database: +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](scrins/6.png) + +Открываем Docker Desktop и проверяем, что контейнер сервера БД и Wordpress созданы и запущены + +Устанавливаем Wordpress и проверяем, что все работает: +![](scrins/7.png) +![](scrins/8.png) + + + + +## Разворачивание сервиса Redmine + +Также в файл `docker-compose.yml` в папке Redmine прописываем код: + +```yaml +version: '3.1' + +services: +# Контейнер Redmine + redmine: + image: redmine # Образ контейнера + restart: always + ports: # На какой порт запускать + - 8080:3000 + environment: + REDMINE_DB_MYSQL: db + REDMINE_DB_PASSWORD: example + REDMINE_SECRET_KEY_BASE: supersecretkey +# Контейнер БД MySQL + db: + image: mysql:5.7 # Образ БД и ее версия + restart: always + environment: # Название и пароль админа БД + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: redmine +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: + +Открываем Docker Desktop и проверяем, что контейнер сервера БД и Redmine созданы и запущены: +![](scrins/10.png) + +Переходим на http://localhost:8080: +![](scrins/9.png) + +Регистрируемся и проверяем, что все работает: diff --git a/tasks/Melnikov-ky/lab_1/scrins/1.png b/tasks/Melnikov-ky/lab_1/scrins/1.png new file mode 100644 index 0000000..a0ef6f6 Binary files /dev/null and b/tasks/Melnikov-ky/lab_1/scrins/1.png differ diff --git a/tasks/Melnikov-ky/lab_1/scrins/10.png b/tasks/Melnikov-ky/lab_1/scrins/10.png new file mode 100644 index 0000000..b363210 Binary files /dev/null and b/tasks/Melnikov-ky/lab_1/scrins/10.png differ diff --git a/tasks/Melnikov-ky/lab_1/scrins/2.png b/tasks/Melnikov-ky/lab_1/scrins/2.png new file mode 100644 index 0000000..0535453 Binary files /dev/null and b/tasks/Melnikov-ky/lab_1/scrins/2.png differ diff --git a/tasks/Melnikov-ky/lab_1/scrins/3.png b/tasks/Melnikov-ky/lab_1/scrins/3.png new file mode 100644 index 0000000..21b4c1a Binary files /dev/null and b/tasks/Melnikov-ky/lab_1/scrins/3.png differ diff --git a/tasks/Melnikov-ky/lab_1/scrins/4.png b/tasks/Melnikov-ky/lab_1/scrins/4.png new file mode 100644 index 0000000..73efde4 Binary files /dev/null and b/tasks/Melnikov-ky/lab_1/scrins/4.png differ diff --git a/tasks/Melnikov-ky/lab_1/scrins/5.png b/tasks/Melnikov-ky/lab_1/scrins/5.png new file mode 100644 index 0000000..9a33461 Binary files /dev/null and b/tasks/Melnikov-ky/lab_1/scrins/5.png differ diff --git a/tasks/Melnikov-ky/lab_1/scrins/6.png b/tasks/Melnikov-ky/lab_1/scrins/6.png new file mode 100644 index 0000000..6d5b5e3 Binary files /dev/null and b/tasks/Melnikov-ky/lab_1/scrins/6.png differ diff --git a/tasks/Melnikov-ky/lab_1/scrins/7.png b/tasks/Melnikov-ky/lab_1/scrins/7.png new file mode 100644 index 0000000..ef1e2b8 Binary files /dev/null and b/tasks/Melnikov-ky/lab_1/scrins/7.png differ diff --git a/tasks/Melnikov-ky/lab_1/scrins/8.png b/tasks/Melnikov-ky/lab_1/scrins/8.png new file mode 100644 index 0000000..3b4e5bb Binary files /dev/null and b/tasks/Melnikov-ky/lab_1/scrins/8.png differ diff --git a/tasks/Melnikov-ky/lab_1/scrins/9.png b/tasks/Melnikov-ky/lab_1/scrins/9.png new file mode 100644 index 0000000..076f64f Binary files /dev/null and b/tasks/Melnikov-ky/lab_1/scrins/9.png differ diff --git a/tasks/dunaev-oi/lab_1/README.md b/tasks/dunaev-oi/lab_1/README.md new file mode 100644 index 0000000..5e8619f --- /dev/null +++ b/tasks/dunaev-oi/lab_1/README.md @@ -0,0 +1,139 @@ +# Отчёт по лабораторной работе №1 + +Выполнил: студент гр. ИСЭбд-41, Дунаев О.И. + +## Разворачивание сервиса Gitea + +Содержимое файла `docker-compose.yml` в папке Gitea: +```yaml +version: "3" + +networks: + gitea: + external: false +# Контейнер Gitea +services: # Описание служб + server: + image: gitea/gitea:1.20.4 # Образ gitea + container_name: gitea # Наименование контейнера + environment: # Наши параметры + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=mysql + - GITEA__database__HOST=db:3306 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=gitea + restart: always + networks: # Параметры сети + - gitea + volumes: # Каталоги для хранения данных контейнера + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: # Порт локальный и внутри сети + - "3000:3000" + - "222:22" + depends_on: + - db +# База данных + db: + image: mysql:8 # Образ БД и версия + restart: always # Параметр перезапуска + environment: # Подключаем каталог с базой данных + - MYSQL_ROOT_PASSWORD=gitea + - MYSQL_USER=gitea + - MYSQL_PASSWORD=gitea + - MYSQL_DATABASE=gitea + networks: # Параметры сети + - gitea + volumes: # Том для хранения данных БД + - ./mysql:/var/lib/mysql +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](pic/1.png) + +Переходим на http://localhost:222: +![](pic/2.png) + +Регистрируемся и автоматически входим в учетную запись: +![](pic/3.png) + +## Разворачивание сервиса Wordpress + +Также в файл `docker-compose.yml` в папке Wordpress прописываем следующий код: + +```yaml +version: '3.1' + +services: +# Контейнер Wordpress + wordpress: + image: wordpress # Образ + restart: always # Параметр перезапуска + ports: # На каком порте запускаем + - 7071:80 + environment: # Настройки БД WordPress для подключения + WORDPRESS_DB_HOST: database # Имя хоста БД MySQL + WORDPRESS_DB_USER: user # Имя пользователя БД + WORDPRESS_DB_PASSWORD: password # Пароль пользователя БД + WORDPRESS_DB_NAME: name_database # Имя БД + volumes: # Каталог хранения файлов WordPress + - wordpress:/var/www/html +# Контейнер MySQL + database: + image: mysql:5.7 # Образ и его версия + restart: always # Параметр перезапуска + environment: # Настройки БД для подключения + MYSQL_DATABASE: name_database + MYSQL_USER: user + MYSQL_PASSWORD: password + MYSQL_RANDOM_ROOT_PASSWORD: '12345' + volumes: # Каталог хранения данных БД + - database:/var/lib/mysql + +volumes: + wordpress: + database: +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](pic/4.png) + +Открываем Docker Desktop и проверяем, что контейнер сервера БД и Wordpress созданы и запущены: +![](pic/5.png) + + +## Разворачивание сервиса Redmine + +Также в файл `docker-compose.yml` в папке Redmine прописываем код: + +```yaml +version: '3.1' + +services: +# Контейнер Redmine + redmine: + image: redmine # Образ контейнера + restart: always + ports: # На какой порт запускать + - 8080:3000 + environment: + REDMINE_DB_MYSQL: db + REDMINE_DB_PASSWORD: example + REDMINE_SECRET_KEY_BASE: supersecretkey +# Контейнер БД MySQL + db: + image: mysql:5.7 # Образ БД и ее версия + restart: always + environment: # Название и пароль админа БД + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: redmine +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](pic/6.png) + +Переходим на http://localhost:8080: +![](pic/7.png) + +Регистрируемся и проверяем, что все работает: +![](pic/8.png) \ No newline at end of file diff --git a/tasks/dunaev-oi/lab_1/pic/1.png b/tasks/dunaev-oi/lab_1/pic/1.png new file mode 100644 index 0000000..8347b07 Binary files /dev/null and b/tasks/dunaev-oi/lab_1/pic/1.png differ diff --git a/tasks/dunaev-oi/lab_1/pic/2.png b/tasks/dunaev-oi/lab_1/pic/2.png new file mode 100644 index 0000000..e7fd839 Binary files /dev/null and b/tasks/dunaev-oi/lab_1/pic/2.png differ diff --git a/tasks/dunaev-oi/lab_1/pic/3.png b/tasks/dunaev-oi/lab_1/pic/3.png new file mode 100644 index 0000000..b801fd2 Binary files /dev/null and b/tasks/dunaev-oi/lab_1/pic/3.png differ diff --git a/tasks/dunaev-oi/lab_1/pic/4.png b/tasks/dunaev-oi/lab_1/pic/4.png new file mode 100644 index 0000000..612cfe4 Binary files /dev/null and b/tasks/dunaev-oi/lab_1/pic/4.png differ diff --git a/tasks/dunaev-oi/lab_1/pic/5.png b/tasks/dunaev-oi/lab_1/pic/5.png new file mode 100644 index 0000000..15fffbb Binary files /dev/null and b/tasks/dunaev-oi/lab_1/pic/5.png differ diff --git a/tasks/dunaev-oi/lab_1/pic/6.png b/tasks/dunaev-oi/lab_1/pic/6.png new file mode 100644 index 0000000..bd8bfe1 Binary files /dev/null and b/tasks/dunaev-oi/lab_1/pic/6.png differ diff --git a/tasks/dunaev-oi/lab_1/pic/7.png b/tasks/dunaev-oi/lab_1/pic/7.png new file mode 100644 index 0000000..ad9f69f Binary files /dev/null and b/tasks/dunaev-oi/lab_1/pic/7.png differ diff --git a/tasks/dunaev-oi/lab_1/pic/8.png b/tasks/dunaev-oi/lab_1/pic/8.png new file mode 100644 index 0000000..f2daca8 Binary files /dev/null and b/tasks/dunaev-oi/lab_1/pic/8.png differ diff --git a/tasks/fomichev-ai/lab_1/README.md b/tasks/fomichev-ai/lab_1/README.md new file mode 100644 index 0000000..f9cd4f1 --- /dev/null +++ b/tasks/fomichev-ai/lab_1/README.md @@ -0,0 +1,157 @@ +# Отчёт по лабораторной работе №1 + +Выполнил: студент гр. ИСЭбд-41 Фомичев А.И. + +## Разворачивание сервиса Redmine + +Содержимое файла `docker-compose.yml` в папке Redmine: + +```yaml +version: "3.8" + +services: # Задаем сервисы. + db: # Сервис 1. База данных Postgres. + image: postgres:13.2-alpine # Образ БД. + restart: unless-stopped + environment: # Переменные окружения. + POSTGRES_PASSWORD: example # Пароль от postgres. + container_name: db_redmine # Название контейнера. + volumes: # Место хранения данных для БД. + - database:/var/lib/postgresql/data + redmine: # Сервис 2. Редмайн. + image: redmine:4.1-alpine # Образ. + environment: # Переменные окружения. + - REDMINE_DB_POSTGRES=db + - REDMINE_DB_PASSWORD=example + ports: # Прослушиваемые порты. + - 9999:3000 + volumes: # Файлы редмайна. + - files:/usr/src/redmine/files + depends_on: # Зависимость от БД. + - db + +volumes: + database: + files: +``` + +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](images/image1.PNG) + +Смотрим в Docker Desktop, что контейнеры БД и сервиса Redmine запущены успешно. +![](images/image2.PNG) + +Переходим на http://localhost:9999 и авторизовываемся под администратором. +![](images/image3.PNG) + +Создаем проект и некоторые данные. +![](images/image4.PNG) + +Наблюдаем полностью рабочий сервис с БД. + +## Разворачивание сервиса Wordpress + +Также в файл `docker-compose.yml` в папке Wordpress прописываем следующий код: + +```yaml +version: '3.1' + +services: + wordpress: + image: wordpress + restart: always + ports: + - 8080:80 + environment: + WORDPRESS_DB_HOST: db + WORDPRESS_DB_USER: test2 + WORDPRESS_DB_PASSWORD: test123 + WORDPRESS_DB_NAME: wordpressDB + volumes: + - wordpress:/var/www/html + + db: + image: mysql:5.7 + restart: always + environment: + MYSQL_DATABASE: wordpressDB + MYSQL_USER: test2 + MYSQL_PASSWORD: test123 + MYSQL_RANDOM_ROOT_PASSWORD: '1' + volumes: + - db:/var/lib/mysql + +volumes: + wordpress: + db: +``` + +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](images/image5.PNG) + +Смотрим в Docker Desktop, что контейнеры БД и сервиса Wordpress запущены успешно. +![](images/image6.PNG) + +Переходим на http://localhost:8080, авторизовываемся под администратором и создаем наш сайт. +![](images/image7.PNG) + +Сервис развернут успешно. + +## Разворачивание сервиса Gitea + +В файл `docker-compose.yml` прописываем следующий код: + +```yaml +version: "3" + +networks: + gitea: + external: false +services: + server: + image: gitea/gitea:1.20.4 + container_name: gitea + environment: + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=mysql + - GITEA__database__HOST=db:3306 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=gitea + restart: always + networks: + - gitea + volumes: + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: + - "3000:3000" + - "222:22" + depends_on: + - db + db: + image: mysql:8 + restart: always + environment: + - MYSQL_ROOT_PASSWORD=gitea + - MYSQL_USER=gitea + - MYSQL_PASSWORD=gitea + - MYSQL_DATABASE=gitea + networks: + - gitea + volumes: + - ./mysql:/var/lib/mysql +``` + +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](images/image10.PNG) + +Смотрим в Docker Desktop, что контейнеры БД и сервиса Wordpress запущены успешно. +![](images/image8.PNG) + +Переходим на http://localhost:3000, авторизовываемся под администратором и создаем наш сайт. +![](images/image9.PNG) + +Сервис развернут успешно. \ No newline at end of file diff --git a/tasks/fomichev-ai/lab_1/images/image1.PNG b/tasks/fomichev-ai/lab_1/images/image1.PNG new file mode 100644 index 0000000..4b3795e Binary files /dev/null and b/tasks/fomichev-ai/lab_1/images/image1.PNG differ diff --git a/tasks/fomichev-ai/lab_1/images/image10.PNG b/tasks/fomichev-ai/lab_1/images/image10.PNG new file mode 100644 index 0000000..66ba62e Binary files /dev/null and b/tasks/fomichev-ai/lab_1/images/image10.PNG differ diff --git a/tasks/fomichev-ai/lab_1/images/image2.PNG b/tasks/fomichev-ai/lab_1/images/image2.PNG new file mode 100644 index 0000000..e0522df Binary files /dev/null and b/tasks/fomichev-ai/lab_1/images/image2.PNG differ diff --git a/tasks/fomichev-ai/lab_1/images/image3.PNG b/tasks/fomichev-ai/lab_1/images/image3.PNG new file mode 100644 index 0000000..0606d9e Binary files /dev/null and b/tasks/fomichev-ai/lab_1/images/image3.PNG differ diff --git a/tasks/fomichev-ai/lab_1/images/image4.PNG b/tasks/fomichev-ai/lab_1/images/image4.PNG new file mode 100644 index 0000000..cde84ff Binary files /dev/null and b/tasks/fomichev-ai/lab_1/images/image4.PNG differ diff --git a/tasks/fomichev-ai/lab_1/images/image5.PNG b/tasks/fomichev-ai/lab_1/images/image5.PNG new file mode 100644 index 0000000..81f8738 Binary files /dev/null and b/tasks/fomichev-ai/lab_1/images/image5.PNG differ diff --git a/tasks/fomichev-ai/lab_1/images/image6.PNG b/tasks/fomichev-ai/lab_1/images/image6.PNG new file mode 100644 index 0000000..d75839a Binary files /dev/null and b/tasks/fomichev-ai/lab_1/images/image6.PNG differ diff --git a/tasks/fomichev-ai/lab_1/images/image7.PNG b/tasks/fomichev-ai/lab_1/images/image7.PNG new file mode 100644 index 0000000..aec54e4 Binary files /dev/null and b/tasks/fomichev-ai/lab_1/images/image7.PNG differ diff --git a/tasks/fomichev-ai/lab_1/images/image8.PNG b/tasks/fomichev-ai/lab_1/images/image8.PNG new file mode 100644 index 0000000..88388af Binary files /dev/null and b/tasks/fomichev-ai/lab_1/images/image8.PNG differ diff --git a/tasks/fomichev-ai/lab_1/images/image9.png b/tasks/fomichev-ai/lab_1/images/image9.png new file mode 100644 index 0000000..01cc75e Binary files /dev/null and b/tasks/fomichev-ai/lab_1/images/image9.png differ diff --git a/tasks/fomichev-ai/lab_2/.dockerignore b/tasks/fomichev-ai/lab_2/.dockerignore new file mode 100644 index 0000000..54fec4f --- /dev/null +++ b/tasks/fomichev-ai/lab_2/.dockerignore @@ -0,0 +1,2 @@ +*/*/bin +*/*/obj diff --git a/tasks/fomichev-ai/lab_2/.gitignore b/tasks/fomichev-ai/lab_2/.gitignore new file mode 100644 index 0000000..154e127 --- /dev/null +++ b/tasks/fomichev-ai/lab_2/.gitignore @@ -0,0 +1,477 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk diff --git a/tasks/fomichev-ai/lab_2/README.md b/tasks/fomichev-ai/lab_2/README.md new file mode 100644 index 0000000..a491319 --- /dev/null +++ b/tasks/fomichev-ai/lab_2/README.md @@ -0,0 +1,77 @@ +# Отчёт по лабораторной работе №2 + +Выполнил: студент гр. ИСЭбд-41 Фомичев Андрей. + +Вариант программы 1: Ищет в каталоге `/var/data` файл с самым коротким названием и перекладывает его в `/var/result/data.txt`. + +Вариант программы 2: Ищет наименьшее число из файла `/var/data/data.txt` и сохраняет количество таких чисел из последовательности в `/var/result/result.txt`. + +## Создание приложений + +Создадим 2 приложения. +Был выбран язык C# и технология .NET 7. + +Для создания обычных консольных приложений воспользуемся командами: + +```sh +dotnet new console -o worker-1 +dotnet new console -o worker-2 +``` + +Согласно варианту, программа 1 должна брать все файлы из папки `/var/data`, считывать длину их названия, найти минимальное и переложить его в папку `/var/result`. + +[Исходный текст программы worker-1](worker-1/Program.cs) + +Согласно варианту программа 2 должна брать строки из папки `/var/data/` с скопированным файлом, пытаться привести их к числам, затем найти минимальное из них. +Далее найти количество вхождений этого числа и результат записать в файл `/var/result/result.txt`. + +[Исходный текст программы worker-2](worker-2/Program.cs) + +Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего. + +## Настройка окружения + +Для связи двух приложений воспользуемся следующей схемой: + +1. Каталог `./data` должен быть примонтирован в каталог `/var/data` для программы 1. + Оттуда будут браться исходные данные. +2. Каталог `./result-1` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складываться промежуточные данные. +3. Каталог `./result-1` также должен быть примонтирован в каталог `/var/data` для программы 2. + Оттуда будут браться промежуточные результаты. +4. Каталог `./result` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складывать результаты финальной обработки. + +Для каждой программы были созданы файлы Dockerfile ([программа 1](worker-1/Dockerfile), [программа 2](worker-2/Dockerfile)) с подробным описанием процесса сборки. + +Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения. + +Дополнительно был создан файл [.dockerignore](.dockerignore) и дополнен [.gitignore](.gitignore), чтобы исключить для сборки и коммита всё лишнее. + +## Сборка и запуск + +В каталог `./data` помещены 4 файла с различной длиной названия и содержимым. + +![](image2.PNG) + +На выходе, программа должна записать число 2, так как файл с минимальным названием f.txt, в нём минимальное число -100, которое встречается 2 раза. +![](image1.PNG) + +Для запуска приложения необходимо ввести команду `docker compose up --build`. +Результат запуска после сборки: + +``` +[+] Running 2/2 + ✔ Container lab_2-worker-1-1 Created 0.0s + ✔ Container lab_2-worker-2-1 Recreated 0.1s +Attaching to lab_2-worker-1-1, lab_2-worker-2-1 +lab_2-worker-1-1 | Сервис 1 отработал успешно! +lab_2-worker-1-1 exited with code 0 +lab_2-worker-2-1 | Сервис 2 отработал успешно! +lab_2-worker-2-1 | Наименьшее число:= -100 , число вхождений:= 2 +lab_2-worker-2-1 exited with code 0 +``` + +В результате в каталоге `./result` создался файл `result.txt` с содержимым `2`, что соответствует входным данным. + +Изменение значений в файлах из каталога `./data` также изменяет содержимое в файлах из каталогов `./result-1` и `./result`. \ No newline at end of file diff --git a/tasks/fomichev-ai/lab_2/data/f.txt b/tasks/fomichev-ai/lab_2/data/f.txt new file mode 100644 index 0000000..47b1abe --- /dev/null +++ b/tasks/fomichev-ai/lab_2/data/f.txt @@ -0,0 +1,29 @@ +2 +5 +3456 +468 + +24 +3 +67846 +84 +62 + +4 +7468 +23 +34 +67458446 +7 +-100 +735 +35 +7 +24 +6458 +745689 +3 + +3457 +-100 +72346 \ No newline at end of file diff --git a/tasks/fomichev-ai/lab_2/data/fileWithStringData.txt b/tasks/fomichev-ai/lab_2/data/fileWithStringData.txt new file mode 100644 index 0000000..7422b61 --- /dev/null +++ b/tasks/fomichev-ai/lab_2/data/fileWithStringData.txt @@ -0,0 +1,3 @@ +test +test123 +test567 \ No newline at end of file diff --git a/tasks/fomichev-ai/lab_2/data/incorrectFormatData.json b/tasks/fomichev-ai/lab_2/data/incorrectFormatData.json new file mode 100644 index 0000000..5a49499 --- /dev/null +++ b/tasks/fomichev-ai/lab_2/data/incorrectFormatData.json @@ -0,0 +1,19 @@ +{ "menu": + { + "id": "file", + "value": "File", + "popup": { + "menuitem": [ + { + "value": "New", "onclick": "CreateNewDoc()" + }, + { + "value": "Open", "onclick": "OpenDoc()" + }, + { + "value": "Close", "onclick": "CloseDoc()" + } + ] + } + } +} \ No newline at end of file diff --git a/tasks/fomichev-ai/lab_2/data/test123456.txt b/tasks/fomichev-ai/lab_2/data/test123456.txt new file mode 100644 index 0000000..56593e1 --- /dev/null +++ b/tasks/fomichev-ai/lab_2/data/test123456.txt @@ -0,0 +1,5 @@ +5 +6 +7 +8 +9 \ No newline at end of file diff --git a/tasks/fomichev-ai/lab_2/docker-compose.yml b/tasks/fomichev-ai/lab_2/docker-compose.yml new file mode 100644 index 0000000..9c753e7 --- /dev/null +++ b/tasks/fomichev-ai/lab_2/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3.1" +services: + worker-1: + build: ./worker-1 + volumes: + # Монтирует локальную папку data к папке data в контейнере. + - ./data:/var/data + # Монтирует локальную папку result-1 к папке result в контейнере. + - ./result-1:/var/result + worker-2: + build: ./worker-2 + volumes: + # Монтирует локальную папку result-1 к папке data в контейнере. + - ./result-1:/var/data + - ./result:/var/result + # Зависимость от первого приложения. + depends_on: + - worker-1 \ No newline at end of file diff --git a/tasks/fomichev-ai/lab_2/image1.PNG b/tasks/fomichev-ai/lab_2/image1.PNG new file mode 100644 index 0000000..822ce97 Binary files /dev/null and b/tasks/fomichev-ai/lab_2/image1.PNG differ diff --git a/tasks/fomichev-ai/lab_2/image2.PNG b/tasks/fomichev-ai/lab_2/image2.PNG new file mode 100644 index 0000000..54f520c Binary files /dev/null and b/tasks/fomichev-ai/lab_2/image2.PNG differ diff --git a/tasks/fomichev-ai/lab_2/lab_2.sln b/tasks/fomichev-ai/lab_2/lab_2.sln new file mode 100644 index 0000000..838a788 --- /dev/null +++ b/tasks/fomichev-ai/lab_2/lab_2.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1\worker-1.csproj", "{A8D5EB71-2620-40E5-9AC5-3292588391DA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2\worker-2.csproj", "{D1CDD34F-8407-4BA9-B81C-22B92532D339}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A8D5EB71-2620-40E5-9AC5-3292588391DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A8D5EB71-2620-40E5-9AC5-3292588391DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A8D5EB71-2620-40E5-9AC5-3292588391DA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A8D5EB71-2620-40E5-9AC5-3292588391DA}.Release|Any CPU.Build.0 = Release|Any CPU + {D1CDD34F-8407-4BA9-B81C-22B92532D339}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1CDD34F-8407-4BA9-B81C-22B92532D339}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1CDD34F-8407-4BA9-B81C-22B92532D339}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1CDD34F-8407-4BA9-B81C-22B92532D339}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/tasks/fomichev-ai/lab_2/worker-1/Dockerfile b/tasks/fomichev-ai/lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..9e76699 --- /dev/null +++ b/tasks/fomichev-ai/lab_2/worker-1/Dockerfile @@ -0,0 +1,17 @@ +# Задаем базовый образ на .NET 7.0. +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env +# Задаем рабочую директорию. +WORKDIR /src + +# В каталог копируем файлы и папки в контейнер. +COPY . ./ +# Создаем образы и устанавливаем данные пакеты в контейнер. +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:7.0 as runtime +WORKDIR /publish +COPY --from=build-env /publish . +# Вызываем приложение во время выполнения контейнера. +ENTRYPOINT ["dotnet", "worker-1.dll"] \ No newline at end of file diff --git a/tasks/fomichev-ai/lab_2/worker-1/Program.cs b/tasks/fomichev-ai/lab_2/worker-1/Program.cs new file mode 100644 index 0000000..44d90d5 --- /dev/null +++ b/tasks/fomichev-ai/lab_2/worker-1/Program.cs @@ -0,0 +1,29 @@ +var dir = new DirectoryInfo("/var/data"); +var files = dir.GetFiles(); +string? oldFilePath = null; +var newFilePathTest = new DirectoryInfo("/var/result"); +string? fileName = null; + +long minFileName = long.MaxValue; +foreach(var file in files) +{ + var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file.Name); + if(fileNameWithoutExtension.Length < minFileName) + { + minFileName = fileNameWithoutExtension.Length; + oldFilePath = Path.GetFullPath(file.FullName); + fileName = file.Name; + } +} + +if (oldFilePath != null) +{ + foreach (var file in newFilePathTest.GetFiles()) + file.Delete(); + + File.Copy(oldFilePath, newFilePathTest.FullName + "/" + fileName, true); + Console.WriteLine("Сервис 1 отработал успешно!"); +} else +{ + throw new Exception("Нет исходных файлов для чтения."); +} \ No newline at end of file diff --git a/tasks/fomichev-ai/lab_2/worker-1/worker-1.csproj b/tasks/fomichev-ai/lab_2/worker-1/worker-1.csproj new file mode 100644 index 0000000..93ad7da --- /dev/null +++ b/tasks/fomichev-ai/lab_2/worker-1/worker-1.csproj @@ -0,0 +1,11 @@ + + + + Exe + net7.0 + worker_1 + enable + enable + + + diff --git a/tasks/fomichev-ai/lab_2/worker-2/Dockerfile b/tasks/fomichev-ai/lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..4c544d1 --- /dev/null +++ b/tasks/fomichev-ai/lab_2/worker-2/Dockerfile @@ -0,0 +1,17 @@ +# Задаем базовый образ на .net 7.0. +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env +# Задаем рабочую директорию. +WORKDIR /src + +# В каталог копируем файлы и папки в контейнер. +COPY . ./ +# Создаем образы и устанавливаем данные пакеты в контейнер. +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:7.0 as runtime +WORKDIR /publish +COPY --from=build-env /publish . +# Вызываем приложение во время выполнения контейнера. +ENTRYPOINT ["dotnet", "worker-2.dll"] \ No newline at end of file diff --git a/tasks/fomichev-ai/lab_2/worker-2/Program.cs b/tasks/fomichev-ai/lab_2/worker-2/Program.cs new file mode 100644 index 0000000..f9940ad --- /dev/null +++ b/tasks/fomichev-ai/lab_2/worker-2/Program.cs @@ -0,0 +1,24 @@ +var dir = new DirectoryInfo("/var/data"); +var fileName = dir.GetFiles().First().Name; +string[] numbers = File.ReadAllLines("/var/data/" + fileName); +long k = 0; +long min = long.MaxValue; +foreach (var numberStr in numbers) +{ + if (!int.TryParse(numberStr, out int number)) + continue; + if (number < min) + min = number; +} + +foreach (var numberStr in numbers) +{ + if (!int.TryParse(numberStr, out int number)) + continue; + if (min == number) + k++; +} + +File.WriteAllText("/var/result/result.txt", k.ToString()); +Console.WriteLine("Сервис 2 отработал успешно!"); +Console.WriteLine($"Наименьшее число:= {min} , число вхождений:= {k}"); \ No newline at end of file diff --git a/tasks/fomichev-ai/lab_2/worker-2/worker-2.csproj b/tasks/fomichev-ai/lab_2/worker-2/worker-2.csproj new file mode 100644 index 0000000..b90f9cb --- /dev/null +++ b/tasks/fomichev-ai/lab_2/worker-2/worker-2.csproj @@ -0,0 +1,11 @@ + + + + Exe + net7.0 + worker_2 + enable + enable + + + diff --git a/tasks/gorbyleva-ai/lab_1/README.md b/tasks/gorbyleva-ai/lab_1/README.md new file mode 100644 index 0000000..797edb5 --- /dev/null +++ b/tasks/gorbyleva-ai/lab_1/README.md @@ -0,0 +1,132 @@ +# Отчёт по лабораторной работе №1 + +Выполнила: студентка гр. ИСЭбд-41 Горбылева Антонина Игоревна + +## Разворачивание сервиса drupal + +Содержимое файла `docker-compose.yml` в папке drupal: + +```yaml +version: '3.1' +#Задаем контейнеры +services: +#Контейнер drupal + drupal: + image: drupal:8-apache + ports: + - 8800:80 +#Каталоги в контейнере + volumes: + - /var/www/html/modules + - /var/www/html/profiles + - /var/www/html/themes + - /var/www/html/sites + restart: always +#Контейнер БД + postgres: + image: postgres:10 + environment: + POSTGRES_PASSWORD: example + restart: always +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up`: + +Открываем Docker Desktop и проверяем, что контейнер сервера базы данных и Drupal созданы и запущены: +![](drupal_containers.png) + +Переходим на http://localhost:8800, регистрируемся: +![](drupal_web.png) + +Сервис запущен успешно! + +## Разворачивание сервиса redmine + +Содержимое файла `docker-compose.yml` в папке redmine: + +```yaml + +version: '3.1' + +services: +# Контейнер Redmine + redmine: + image: redmine + restart: always + ports: + - 8080:3000 + environment: + REDMINE_DB_MYSQL: db + REDMINE_DB_PASSWORD: example + REDMINE_SECRET_KEY_BASE: supersecretkey +# Контейнер БД + db: + image: mysql:5.7 + restart: always + environment: + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: redmine +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up`. + +В Docker Desktop проверяем, что сервис работает: +![](redmine_containers.png) + +Переходим на http://localhost:8800, регистрируемся: +![](redmine_web_enter.png) + +Подтверждаем реистрацию и успешно заходим в свою учетную запись! +![](redmine.png) + +Ура! Сервис redmine тоже работает! + + +## Разворачивание сервиса wordpress + +Содержимое файла `docker-compose.yml` в папке wordpress: + +```yaml + +version: '3.1' +#Задаем контейнеры +services: +#Контейнер Wordpress + wordpress: + image: wordpress + restart: always + ports: + - 8080:80 + environment: + WORDPRESS_DB_HOST: db + WORDPRESS_DB_USER: user + WORDPRESS_DB_PASSWORD: userpass + WORDPRESS_DB_NAME: mydb + volumes: + - wordpress:/var/www/html + + #Контейнер БД + db: + image: mysql:5.7 + restart: always + environment: + MYSQL_DATABASE: mydb + MYSQL_USER: user + MYSQL_PASSWORD: userpass + MYSQL_RANDOM_ROOT_PASSWORD: '1' + volumes: + - db:/var/lib/mysql + + +volumes: + wordpress: + db: +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up`. +![](docker_wordpress_terminal.png) + +В Docker Desktop проверяем, что сервис запущен: +![](docker_wordpress.jpg) + +Переходим на http://localhost:8080, регистрируемся и убеждаемся что сервис работает: +![](enter_wordpress.jpg) + +Все три сервиса успешно запущены и работают! diff --git a/tasks/gorbyleva-ai/lab_1/docker_wordpress.jpg b/tasks/gorbyleva-ai/lab_1/docker_wordpress.jpg new file mode 100644 index 0000000..c297c11 Binary files /dev/null and b/tasks/gorbyleva-ai/lab_1/docker_wordpress.jpg differ diff --git a/tasks/gorbyleva-ai/lab_1/docker_wordpress_terminal.png b/tasks/gorbyleva-ai/lab_1/docker_wordpress_terminal.png new file mode 100644 index 0000000..3fef3c1 Binary files /dev/null and b/tasks/gorbyleva-ai/lab_1/docker_wordpress_terminal.png differ diff --git a/tasks/gorbyleva-ai/lab_1/drupal_containers.png b/tasks/gorbyleva-ai/lab_1/drupal_containers.png new file mode 100644 index 0000000..5f9938f Binary files /dev/null and b/tasks/gorbyleva-ai/lab_1/drupal_containers.png differ diff --git a/tasks/gorbyleva-ai/lab_1/drupal_web.png b/tasks/gorbyleva-ai/lab_1/drupal_web.png new file mode 100644 index 0000000..a2745f2 Binary files /dev/null and b/tasks/gorbyleva-ai/lab_1/drupal_web.png differ diff --git a/tasks/gorbyleva-ai/lab_1/enter_wordpress.jpg b/tasks/gorbyleva-ai/lab_1/enter_wordpress.jpg new file mode 100644 index 0000000..23310c6 Binary files /dev/null and b/tasks/gorbyleva-ai/lab_1/enter_wordpress.jpg differ diff --git a/tasks/gorbyleva-ai/lab_1/redmine.png b/tasks/gorbyleva-ai/lab_1/redmine.png new file mode 100644 index 0000000..46b104b Binary files /dev/null and b/tasks/gorbyleva-ai/lab_1/redmine.png differ diff --git a/tasks/gorbyleva-ai/lab_1/redmine_containers.png b/tasks/gorbyleva-ai/lab_1/redmine_containers.png new file mode 100644 index 0000000..445792c Binary files /dev/null and b/tasks/gorbyleva-ai/lab_1/redmine_containers.png differ diff --git a/tasks/gorbyleva-ai/lab_1/redmine_web.png b/tasks/gorbyleva-ai/lab_1/redmine_web.png new file mode 100644 index 0000000..150b3b6 Binary files /dev/null and b/tasks/gorbyleva-ai/lab_1/redmine_web.png differ diff --git a/tasks/gorbyleva-ai/lab_1/redmine_web_enter.png b/tasks/gorbyleva-ai/lab_1/redmine_web_enter.png new file mode 100644 index 0000000..9cdcbdf Binary files /dev/null and b/tasks/gorbyleva-ai/lab_1/redmine_web_enter.png differ diff --git a/tasks/grenaderova-aa/lab_1/README.md b/tasks/grenaderova-aa/lab_1/README.md new file mode 100644 index 0000000..95b8afd --- /dev/null +++ b/tasks/grenaderova-aa/lab_1/README.md @@ -0,0 +1,151 @@ +# Отчёт по лабораторной работе №1 + +Выполнила: студентка гр. ИСЭбд-41, Гренадерова А.А. + +## Разворачивание сервиса Gitea + +Содержимое файла `docker-compose.yml` в папке Gitea: +```yaml +version: "3" + +networks: + gitea: + external: false +# Контейнер Gitea +services: # Описание служб + server: + image: gitea/gitea:1.20.4 # Образ gitea + container_name: gitea # Наименование контейнера + environment: # Наши параметры + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=mysql + - GITEA__database__HOST=db:3306 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=gitea + restart: always + networks: # Параметры сети + - gitea + volumes: # Каталоги для хранения данных контейнера + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: # Порт локальный и внутри сети + - "3000:3000" + - "222:22" + depends_on: + - db +# База данных + db: + image: mysql:8 # Образ БД и версия + restart: always # Параметр перезапуска + environment: # Подключаем каталог с базой данных + - MYSQL_ROOT_PASSWORD=gitea + - MYSQL_USER=gitea + - MYSQL_PASSWORD=gitea + - MYSQL_DATABASE=gitea + networks: # Параметры сети + - gitea + volumes: # Том для хранения данных БД + - ./mysql:/var/lib/mysql +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](pictures/1.png) + +Открываем Docker Desktop и проверяем, что контейнер сервера БД и Gitea созданы и запущены: +![](pictures/2.png) + +Переходим на http://localhost:222: +![](pictures/3.png) + +Регистрируемся и автоматически входим в учетную запись: +![](pictures/4.png) +![](pictures/5.png) + +## Разворачивание сервиса Wordpress + +Также в файл `docker-compose.yml` в папке Wordpress прописываем следующий код: + +```yaml +version: '3.1' + +services: +# Контейнер Wordpress + wordpress: + image: wordpress # Образ + restart: always # Параметр перезапуска + ports: # На каком порте запускаем + - 7071:80 + environment: # Настройки БД WordPress для подключения + WORDPRESS_DB_HOST: database # Имя хоста БД MySQL + WORDPRESS_DB_USER: user # Имя пользователя БД + WORDPRESS_DB_PASSWORD: password # Пароль пользователя БД + WORDPRESS_DB_NAME: name_database # Имя БД + volumes: # Каталог хранения файлов WordPress + - wordpress:/var/www/html +# Контейнер MySQL + database: + image: mysql:5.7 # Образ и его версия + restart: always # Параметр перезапуска + environment: # Настройки БД для подключения + MYSQL_DATABASE: name_database + MYSQL_USER: user + MYSQL_PASSWORD: password + MYSQL_RANDOM_ROOT_PASSWORD: '12345' + volumes: # Каталог хранения данных БД + - database:/var/lib/mysql + +volumes: + wordpress: + database: +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](pictures/6.png) + +Открываем Docker Desktop и проверяем, что контейнер сервера БД и Wordpress созданы и запущены: +![](pictures/7.png) + +Устанавливаем Wordpress и проверяем, что все работает: +![](pictures/8.png) +![](pictures/9.png) +![](pictures/10.png) +![](pictures/11.png) + +## Разворачивание сервиса Redmine + +Также в файл `docker-compose.yml` в папке Redmine прописываем код: + +```yaml +version: '3.1' + +services: +# Контейнер Redmine + redmine: + image: redmine # Образ контейнера + restart: always + ports: # На какой порт запускать + - 8080:3000 + environment: + REDMINE_DB_MYSQL: db + REDMINE_DB_PASSWORD: example + REDMINE_SECRET_KEY_BASE: supersecretkey +# Контейнер БД MySQL + db: + image: mysql:5.7 # Образ БД и ее версия + restart: always + environment: # Название и пароль админа БД + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: redmine +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](pictures/12.png) + +Открываем Docker Desktop и проверяем, что контейнер сервера БД и Redmine созданы и запущены: +![](pictures/13.png) + +Переходим на http://localhost:8080: +![](pictures/14.png) + +Регистрируемся и проверяем, что все работает: +![](pictures/15.png) \ No newline at end of file diff --git a/tasks/grenaderova-aa/lab_1/pictures/1.png b/tasks/grenaderova-aa/lab_1/pictures/1.png new file mode 100644 index 0000000..e144752 Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/1.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/10.png b/tasks/grenaderova-aa/lab_1/pictures/10.png new file mode 100644 index 0000000..e9b8320 Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/10.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/11.png b/tasks/grenaderova-aa/lab_1/pictures/11.png new file mode 100644 index 0000000..419ed9c Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/11.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/12.png b/tasks/grenaderova-aa/lab_1/pictures/12.png new file mode 100644 index 0000000..6f5b183 Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/12.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/13.png b/tasks/grenaderova-aa/lab_1/pictures/13.png new file mode 100644 index 0000000..63b4cac Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/13.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/14.png b/tasks/grenaderova-aa/lab_1/pictures/14.png new file mode 100644 index 0000000..0ef1cd0 Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/14.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/15.png b/tasks/grenaderova-aa/lab_1/pictures/15.png new file mode 100644 index 0000000..c92d232 Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/15.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/2.png b/tasks/grenaderova-aa/lab_1/pictures/2.png new file mode 100644 index 0000000..94c5197 Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/2.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/3.png b/tasks/grenaderova-aa/lab_1/pictures/3.png new file mode 100644 index 0000000..5edbff3 Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/3.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/4.png b/tasks/grenaderova-aa/lab_1/pictures/4.png new file mode 100644 index 0000000..9d5a1cf Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/4.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/5.png b/tasks/grenaderova-aa/lab_1/pictures/5.png new file mode 100644 index 0000000..a1eddef Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/5.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/6.png b/tasks/grenaderova-aa/lab_1/pictures/6.png new file mode 100644 index 0000000..23fad44 Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/6.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/7.png b/tasks/grenaderova-aa/lab_1/pictures/7.png new file mode 100644 index 0000000..de7f6f4 Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/7.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/8.png b/tasks/grenaderova-aa/lab_1/pictures/8.png new file mode 100644 index 0000000..f6b5b87 Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/8.png differ diff --git a/tasks/grenaderova-aa/lab_1/pictures/9.png b/tasks/grenaderova-aa/lab_1/pictures/9.png new file mode 100644 index 0000000..647da0c Binary files /dev/null and b/tasks/grenaderova-aa/lab_1/pictures/9.png differ diff --git a/tasks/grenaderova-aa/lab_2/.gitignore b/tasks/grenaderova-aa/lab_2/.gitignore new file mode 100644 index 0000000..8afdcb6 --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/.gitignore @@ -0,0 +1,454 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# JetBrains Rider +.idea/ +*.sln.iml + +## +## Visual Studio Code +## +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/tasks/grenaderova-aa/lab_2/2lab/1.png b/tasks/grenaderova-aa/lab_2/2lab/1.png new file mode 100644 index 0000000..a2a5af8 Binary files /dev/null and b/tasks/grenaderova-aa/lab_2/2lab/1.png differ diff --git a/tasks/grenaderova-aa/lab_2/2lab/2.png b/tasks/grenaderova-aa/lab_2/2lab/2.png new file mode 100644 index 0000000..e4bb624 Binary files /dev/null and b/tasks/grenaderova-aa/lab_2/2lab/2.png differ diff --git a/tasks/grenaderova-aa/lab_2/2lab/3.png b/tasks/grenaderova-aa/lab_2/2lab/3.png new file mode 100644 index 0000000..10cd50a Binary files /dev/null and b/tasks/grenaderova-aa/lab_2/2lab/3.png differ diff --git a/tasks/grenaderova-aa/lab_2/README.md b/tasks/grenaderova-aa/lab_2/README.md new file mode 100644 index 0000000..f0465d3 --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/README.md @@ -0,0 +1,84 @@ +# Отчёт по лабораторной работе №2 + +Выполнил: студентка гр. ИСЭбд-41, Гренадерова А.А. + +Вариант программы 1: 1. Ищет в каталоге /var/data файл с наибольшим количеством строк и перекладывает его в /var/result/data.txt. + +Вариант программы 2: 2. Ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt. + +## Создание приложений + +Создадим 2 приложения. +Был выбран язык C# и технология .NET 5. + +Для создания обычных консольных приложений воспользуемся командами: + +```sh +dotnet new console -o worker-1 +dotnet new console -o worker-2 +``` + +Согласно варианту, программа 1 должна найти в каталоге /var/data файл с наибольшим количеством строк и переложить его в /var/result/data.txt. + +[Исходный текст программы worker-1](worker-1/Program.cs) + +Согласно варианту программа 2 должна найти наименьшее число из файла /var/data/data.txt и сохранить его третью степень в /var/result/result.txt. + +[Исходный текст программы worker-2](worker-2/Program.cs) + +Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего. + +## Настройка окружения + +Для связи двух приложений воспользуемся следующей схемой: + +1. Каталог `./data` должен быть примонтирован в каталог `/var/data` для программы 1. + Оттуда будут браться исходные данные. +2. Каталог `./result-1` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складываться промежуточные данные. +3. Каталог `./result-1` также должен быть примонтирован в каталог `/var/data` для программы 2. + Оттуда будут браться промежуточные результаты. +4. Каталог `./result` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складывать результаты финальной обработки. + +Для каждой программы были созданы файлы Dockerfile ([программа 1](worker-1/Dockerfile), [программа 2](worker-2/Dockerfile)) с подробным описанием процесса сборки. + +Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения. + + +## Сборка и запуск + +1. В каталог `./data` помещены 3 файла с различной длиной названия и содержимым. + +![](2lab/1.png) + +На выходе программа должна записать файл data.txt, как самый длинный по количеству строк. + +![](2lab/2.png) + +2. Теперь, обрабатывая этот файл: + +![](2lab/2.png) + +На выходе программа должна записать число 1212 в 3 степени в `./result` так как в файле c названием data.txt оно минимальное. + +![](2lab/3.png) + +Для запуска приложения необходимо ввести команду `docker compose up --build`. +Результат запуска после сборки: + +``` +[+] Running 2/0 + ✔ Container lab_2-worker-1-1 Created 0.0s + ✔ Container lab_2-worker-2-1 Created 0.0s +Attaching to lab_2-worker-1-1, lab_2-worker-2-1 +lab_2-worker-1-1 | Файл успешно создан: ../var/result/data.txt +lab_2-worker-2-1 | The maximum number is: 8 +lab_2-worker-2-1 | The count of maximum numbers is: 2 +lab_2-worker-1-1 exited with code 0 +lab_2-worker-2-1 exited with code 0 +``` + +В результате в каталоге `./result` создался файл `result.txt` с содержимым `1780360128`, что соответствует входным данным. + +Изменение значений в файлах из каталога `./data` также изменяет содержимое в файлах из каталогов `./result-1` и `./result`. \ No newline at end of file diff --git a/tasks/grenaderova-aa/lab_2/data/data.txt b/tasks/grenaderova-aa/lab_2/data/data.txt new file mode 100644 index 0000000..1c2299f --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/data/data.txt @@ -0,0 +1,3 @@ +1213 +1212 +12132 \ No newline at end of file diff --git a/tasks/grenaderova-aa/lab_2/data/data1.txt b/tasks/grenaderova-aa/lab_2/data/data1.txt new file mode 100644 index 0000000..52e0399 --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/data/data1.txt @@ -0,0 +1,2 @@ +123213 +2131 \ No newline at end of file diff --git a/tasks/grenaderova-aa/lab_2/data/data2.txt b/tasks/grenaderova-aa/lab_2/data/data2.txt new file mode 100644 index 0000000..096fa64 --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/data/data2.txt @@ -0,0 +1 @@ +12321 \ No newline at end of file diff --git a/tasks/grenaderova-aa/lab_2/docker-compose.yml b/tasks/grenaderova-aa/lab_2/docker-compose.yml new file mode 100644 index 0000000..9c753e7 --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3.1" +services: + worker-1: + build: ./worker-1 + volumes: + # Монтирует локальную папку data к папке data в контейнере. + - ./data:/var/data + # Монтирует локальную папку result-1 к папке result в контейнере. + - ./result-1:/var/result + worker-2: + build: ./worker-2 + volumes: + # Монтирует локальную папку result-1 к папке data в контейнере. + - ./result-1:/var/data + - ./result:/var/result + # Зависимость от первого приложения. + depends_on: + - worker-1 \ No newline at end of file diff --git a/tasks/grenaderova-aa/lab_2/lab_2.sln b/tasks/grenaderova-aa/lab_2/lab_2.sln new file mode 100644 index 0000000..81d50d3 --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/lab_2.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1\worker-1.csproj", "{5B8F3FD2-C7C4-4180-80C2-3752B0648684}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2\worker-2.csproj", "{7EF62CE7-C74B-4B2F-BC91-25A367B9450E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5B8F3FD2-C7C4-4180-80C2-3752B0648684}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5B8F3FD2-C7C4-4180-80C2-3752B0648684}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B8F3FD2-C7C4-4180-80C2-3752B0648684}.Debug|x64.ActiveCfg = Debug|Any CPU + {5B8F3FD2-C7C4-4180-80C2-3752B0648684}.Debug|x64.Build.0 = Debug|Any CPU + {5B8F3FD2-C7C4-4180-80C2-3752B0648684}.Debug|x86.ActiveCfg = Debug|Any CPU + {5B8F3FD2-C7C4-4180-80C2-3752B0648684}.Debug|x86.Build.0 = Debug|Any CPU + {5B8F3FD2-C7C4-4180-80C2-3752B0648684}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5B8F3FD2-C7C4-4180-80C2-3752B0648684}.Release|Any CPU.Build.0 = Release|Any CPU + {5B8F3FD2-C7C4-4180-80C2-3752B0648684}.Release|x64.ActiveCfg = Release|Any CPU + {5B8F3FD2-C7C4-4180-80C2-3752B0648684}.Release|x64.Build.0 = Release|Any CPU + {5B8F3FD2-C7C4-4180-80C2-3752B0648684}.Release|x86.ActiveCfg = Release|Any CPU + {5B8F3FD2-C7C4-4180-80C2-3752B0648684}.Release|x86.Build.0 = Release|Any CPU + {7EF62CE7-C74B-4B2F-BC91-25A367B9450E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7EF62CE7-C74B-4B2F-BC91-25A367B9450E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7EF62CE7-C74B-4B2F-BC91-25A367B9450E}.Debug|x64.ActiveCfg = Debug|Any CPU + {7EF62CE7-C74B-4B2F-BC91-25A367B9450E}.Debug|x64.Build.0 = Debug|Any CPU + {7EF62CE7-C74B-4B2F-BC91-25A367B9450E}.Debug|x86.ActiveCfg = Debug|Any CPU + {7EF62CE7-C74B-4B2F-BC91-25A367B9450E}.Debug|x86.Build.0 = Debug|Any CPU + {7EF62CE7-C74B-4B2F-BC91-25A367B9450E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7EF62CE7-C74B-4B2F-BC91-25A367B9450E}.Release|Any CPU.Build.0 = Release|Any CPU + {7EF62CE7-C74B-4B2F-BC91-25A367B9450E}.Release|x64.ActiveCfg = Release|Any CPU + {7EF62CE7-C74B-4B2F-BC91-25A367B9450E}.Release|x64.Build.0 = Release|Any CPU + {7EF62CE7-C74B-4B2F-BC91-25A367B9450E}.Release|x86.ActiveCfg = Release|Any CPU + {7EF62CE7-C74B-4B2F-BC91-25A367B9450E}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/tasks/grenaderova-aa/lab_2/result-1/data.txt b/tasks/grenaderova-aa/lab_2/result-1/data.txt new file mode 100644 index 0000000..1c2299f --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/result-1/data.txt @@ -0,0 +1,3 @@ +1213 +1212 +12132 \ No newline at end of file diff --git a/tasks/grenaderova-aa/lab_2/result/result.txt b/tasks/grenaderova-aa/lab_2/result/result.txt new file mode 100644 index 0000000..61bf70b --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/result/result.txt @@ -0,0 +1 @@ +1780360128 \ No newline at end of file diff --git a/tasks/grenaderova-aa/lab_2/worker-1/Dockerfile b/tasks/grenaderova-aa/lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..e4756e5 --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/worker-1/Dockerfile @@ -0,0 +1,18 @@ +# Задаем базовый образ на .net +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env +# Задаем рабочую директорию +WORKDIR /src + + +# Копируем файлы и папки в каталог в контейнер +COPY . ./ +# Создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:5.0 +WORKDIR /publish +COPY --from=build-env /publish . +# Вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-1.dll"] \ No newline at end of file diff --git a/tasks/grenaderova-aa/lab_2/worker-1/Program.cs b/tasks/grenaderova-aa/lab_2/worker-1/Program.cs new file mode 100644 index 0000000..0146151 --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/worker-1/Program.cs @@ -0,0 +1,42 @@ +using System; +using System.IO; + +class Program +{ + static void Main(string[] args) + { + string sourceDirectory = "/var/data"; + string destDirectory = "/var/result"; + string destFile = Path.Combine(destDirectory, "data.txt"); + + // Получаем все файлы в исходном каталоге + string[] files = Directory.GetFiles(sourceDirectory); + + int maxLines = 0; + string filePath = ""; + + foreach (string file in files) + { + // Считываем строки из файла + string[] lines = File.ReadAllLines(file); + + // Проверяем количество строк в файле + if (lines.Length > maxLines) + { + maxLines = lines.Length; + filePath = file; + } + } + + // Копируем файл с наибольшим количеством строк в новое место + if (!string.IsNullOrEmpty(filePath)) + { + File.Copy(filePath, destFile, true); + Console.WriteLine($"Файл с наибольшим количеством строк перекладывается в {destFile}"); + } + else + { + Console.WriteLine("Файлы не найдены в исходном каталоге"); + } + } +} diff --git a/tasks/grenaderova-aa/lab_2/worker-1/worker-1.csproj b/tasks/grenaderova-aa/lab_2/worker-1/worker-1.csproj new file mode 100644 index 0000000..328500d --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/worker-1/worker-1.csproj @@ -0,0 +1,9 @@ + + + + Exe + net5.0 + worker_1 + + + diff --git a/tasks/grenaderova-aa/lab_2/worker-2/Dockerfile b/tasks/grenaderova-aa/lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..f80c2dc --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/worker-2/Dockerfile @@ -0,0 +1,18 @@ +# Задаем базовый образ на .net +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env +# Задаем рабочую директорию +WORKDIR /src + + +# Копируем файлы и папки в каталог в контейнер +COPY . ./ +# Создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:5.0 +WORKDIR /publish +COPY --from=build-env /publish . +# Вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-2.dll"] \ No newline at end of file diff --git a/tasks/grenaderova-aa/lab_2/worker-2/Program.cs b/tasks/grenaderova-aa/lab_2/worker-2/Program.cs new file mode 100644 index 0000000..52eba20 --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/worker-2/Program.cs @@ -0,0 +1,38 @@ +using System; +using System.IO; + +class Program +{ + static void Main(string[] args) + { + string sourceFile = "/var/data/data.txt"; + string resultFile = "/var/result/result.txt"; + + // Считываем числа из файла + string[] lines = File.ReadAllLines(sourceFile); + + // Переменная для хранения наименьшего числа + int smallestNumber = int.MaxValue; + + // Проходимся по всем числам в файле + foreach (string line in lines) + { + if (int.TryParse(line, out int number)) + { + // Если число меньше текущего наименьшего, обновляем значение + if (number < smallestNumber) + { + smallestNumber = number; + } + } + } + + // Возведение в третью степень + double result = Math.Pow(smallestNumber, 3); + + // Записываем результат в файл + File.WriteAllText(resultFile, result.ToString()); + + Console.WriteLine("Наименьшее число из файла data.txt возведено в третью степень и сохранено в файле result.txt"); + } +} diff --git a/tasks/grenaderova-aa/lab_2/worker-2/worker-2.csproj b/tasks/grenaderova-aa/lab_2/worker-2/worker-2.csproj new file mode 100644 index 0000000..fb2480c --- /dev/null +++ b/tasks/grenaderova-aa/lab_2/worker-2/worker-2.csproj @@ -0,0 +1,9 @@ + + + + Exe + net5.0 + worker_2 + + + diff --git a/tasks/kazakov-ev/lab_1/README.md b/tasks/kazakov-ev/lab_1/README.md new file mode 100644 index 0000000..be1b3c9 --- /dev/null +++ b/tasks/kazakov-ev/lab_1/README.md @@ -0,0 +1,145 @@ +# Отчёт по лабораторной работе №1 + +Выполнил: студент гр. ИСЭбд-41 Казаков Е.В. + +## Разворачивание сервиса Gitea + +Содержимое файла `docker-compose.yml` в папке Gitea: + +```yaml +version: "3" + +networks: + gitea: + external: false +#Контейнер Gitea используется для запуска самого сервиса +services: + server: + image: gitea/gitea:1.20.4 #образ gitea + container_name: gitea + environment: #наши параметры + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=mysql + - GITEA__database__HOST=db:3306 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=gitea + restart: always + networks: + - gitea + volumes: #прописываем каталоги для хранения данных контейнера + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: #порт локальный и внутри сети + - "3000:3000" + - "222:22" + depends_on: + - db +#Контейнер Mysql используется как сервер для запуска + db: + image: mysql:8 + restart: always + environment: #подключаем каталог с базой данных + - MYSQL_ROOT_PASSWORD=gitea + - MYSQL_USER=gitea + - MYSQL_PASSWORD=gitea + - MYSQL_DATABASE=gitea + networks: + - gitea + volumes: + - ./mysql:/var/lib/mysql +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up`: +![](shots/ss-1.png) +Открываем Docker Desktop и проверяем, что контейнер сервера базы данных и Gitea созданы и запущены: +![](shots/ss2.png) +Переходим на http://localhost:3000: +![](shots/ss3.png) +Регистрируемся и заходим на наш аккаунт +![](shots/ss4.png) +## Разворачивание сервиса Redmine +Содержимое файла `docker-compose.yml` в папке Redmine: +```yaml +version: '3.1' +#Контейнер Redmine используется для запуска самого сервиса +services: + redmine: + image: redmine #образ Redmine + restart: always + ports: #порт + - 8080:3000 + environment: + REDMINE_DB_MYSQL: db + REDMINE_DB_PASSWORD: example + REDMINE_SECRET_KEY_BASE: supersecretkey +#Контейнер Mysql используется как сервер для запуска + db: + image: mysql:5.7 + restart: always + environment: + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: redmine +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up`: +![](shots/ss5.png) +Открываем Docker Desktop и проверяем, что контейнер сервера базы данных и Reamine созданы и запущены: +![](shots/ss6.png) +Переходим на http://localhost:8080: +![](shots/ss7.png) +Входим: + +![](shots/ss8.png) + +Вот собственно наш пользователь: +![](shots/ss9.png) +## Разворачивание сервиса moodle +Содержимое файла `docker-compose.yml` в папке moodle: +```yaml +version: '2' +#Контейнер Mariadb используется как сервер для запуска +services: + mariadb: + image: docker.io/bitnami/mariadb:11.0 + environment: + - ALLOW_EMPTY_PASSWORD=yes + - MARIADB_USER=bn_moodle + - MARIADB_DATABASE=bitnami_moodle + - MARIADB_CHARACTER_SET=utf8mb4 + - MARIADB_COLLATE=utf8mb4_unicode_ci + volumes: + - 'mariadb_data:/bitnami/mariadb' + #Контейнер moodle используется для запуска самого сервиса + moodle: + image: docker.io/bitnami/moodle:4.2 + ports: #порт + - '80:8080' + - '443:8443' + environment: + - MOODLE_DATABASE_HOST=mariadb + - MOODLE_DATABASE_PORT_NUMBER=3306 + - MOODLE_DATABASE_USER=bn_moodle + - MOODLE_DATABASE_NAME=bitnami_moodle + - ALLOW_EMPTY_PASSWORD=yes + - MOODLE_USERNAME=vechno + - MOODLE_PASSWORD=solo + volumes: + - 'moodle_data:/bitnami/moodle' + - 'moodledata_data:/bitnami/moodledata' + depends_on: + - mariadb +volumes: + mariadb_data: + driver: local + moodle_data: + driver: local + moodledata_data: + driver: local +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up`: +![](shots/ss10.png) +Открываем Docker Desktop и проверяем, что контейнер сервера базы данных и moodle созданы и запущены: +![](shots/ss11.png) +Переходим на http://localhost:80: +![](shots/ss12.png) \ No newline at end of file diff --git a/tasks/kazakov-ev/lab_1/shots/ss-1.png b/tasks/kazakov-ev/lab_1/shots/ss-1.png new file mode 100644 index 0000000..24e50ed Binary files /dev/null and b/tasks/kazakov-ev/lab_1/shots/ss-1.png differ diff --git a/tasks/kazakov-ev/lab_1/shots/ss10.png b/tasks/kazakov-ev/lab_1/shots/ss10.png new file mode 100644 index 0000000..24fdce6 Binary files /dev/null and b/tasks/kazakov-ev/lab_1/shots/ss10.png differ diff --git a/tasks/kazakov-ev/lab_1/shots/ss11.png b/tasks/kazakov-ev/lab_1/shots/ss11.png new file mode 100644 index 0000000..9a7edb7 Binary files /dev/null and b/tasks/kazakov-ev/lab_1/shots/ss11.png differ diff --git a/tasks/kazakov-ev/lab_1/shots/ss12.png b/tasks/kazakov-ev/lab_1/shots/ss12.png new file mode 100644 index 0000000..6b58a0f Binary files /dev/null and b/tasks/kazakov-ev/lab_1/shots/ss12.png differ diff --git a/tasks/kazakov-ev/lab_1/shots/ss2.png b/tasks/kazakov-ev/lab_1/shots/ss2.png new file mode 100644 index 0000000..bf8230d Binary files /dev/null and b/tasks/kazakov-ev/lab_1/shots/ss2.png differ diff --git a/tasks/kazakov-ev/lab_1/shots/ss3.png b/tasks/kazakov-ev/lab_1/shots/ss3.png new file mode 100644 index 0000000..dcb82a3 Binary files /dev/null and b/tasks/kazakov-ev/lab_1/shots/ss3.png differ diff --git a/tasks/kazakov-ev/lab_1/shots/ss4.png b/tasks/kazakov-ev/lab_1/shots/ss4.png new file mode 100644 index 0000000..0403033 Binary files /dev/null and b/tasks/kazakov-ev/lab_1/shots/ss4.png differ diff --git a/tasks/kazakov-ev/lab_1/shots/ss5.png b/tasks/kazakov-ev/lab_1/shots/ss5.png new file mode 100644 index 0000000..e2d0470 Binary files /dev/null and b/tasks/kazakov-ev/lab_1/shots/ss5.png differ diff --git a/tasks/kazakov-ev/lab_1/shots/ss6.png b/tasks/kazakov-ev/lab_1/shots/ss6.png new file mode 100644 index 0000000..babea92 Binary files /dev/null and b/tasks/kazakov-ev/lab_1/shots/ss6.png differ diff --git a/tasks/kazakov-ev/lab_1/shots/ss7.png b/tasks/kazakov-ev/lab_1/shots/ss7.png new file mode 100644 index 0000000..114ab4a Binary files /dev/null and b/tasks/kazakov-ev/lab_1/shots/ss7.png differ diff --git a/tasks/kazakov-ev/lab_1/shots/ss8.png b/tasks/kazakov-ev/lab_1/shots/ss8.png new file mode 100644 index 0000000..8d557dc Binary files /dev/null and b/tasks/kazakov-ev/lab_1/shots/ss8.png differ diff --git a/tasks/kazakov-ev/lab_1/shots/ss9.png b/tasks/kazakov-ev/lab_1/shots/ss9.png new file mode 100644 index 0000000..e7d3b4b Binary files /dev/null and b/tasks/kazakov-ev/lab_1/shots/ss9.png differ diff --git a/tasks/kazakov-ev/lab_2/.gitignore b/tasks/kazakov-ev/lab_2/.gitignore new file mode 100644 index 0000000..154e127 --- /dev/null +++ b/tasks/kazakov-ev/lab_2/.gitignore @@ -0,0 +1,477 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk diff --git a/tasks/kazakov-ev/lab_2/README.md b/tasks/kazakov-ev/lab_2/README.md new file mode 100644 index 0000000..b43aa8e --- /dev/null +++ b/tasks/kazakov-ev/lab_2/README.md @@ -0,0 +1,72 @@ +# Отчёт по лабораторной работе №2 + +Выполнил: студент гр. ИСЭбд-41 Казаков Евгений. + +Вариант программы 1: Ищет в каталоге `/var/data` самый большой по объёму файл и перекладывает его в `/var/result/data.txt`. + +Вариант программы 2: Ищет набольшее число из файла `/var/data/data.txt` и сохраняет его вторую степень в `/var/result/result.txt`. + +## Создание приложений + +Создадим 2 приложения. +Был выбран язык C# и технология .NET 7, потому что хочется. + +Для создания обычных консольных приложений воспользуемся командами: + +```sh +dotnet new console -o worker-1 +dotnet new console -o worker-2 +``` + +Согласно варианту программа 1 должна брать все файлы из папки `/var/data`, получать их размер и отправлять в `/var/result/data.txt`. + +[Исходный текст программы worker-1](worker-1/Program.cs) + +Согласно варианту программа 2 должна брать строки из файла `/var/data/data.txt`, пытаться привести их к числам, а затем найти болшее и влзвести его в степень 2. +Затем результат вычислений копируется в файл `/var/result/result.txt`. + +[Исходный текст программы worker-2](worker-2/Program.cs) + +Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего. + +## Настройка окружения + +Для связи двух приложений воспользуемся следующей схемой: + +1. Каталог `./data` должен быть примонтирован в каталог `/var/data` для программы 1. + Оттуда будут браться исходные данные. +2. Каталог `./result-1` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складываться промежуточные данные. +3. Каталог `./result-1` также должен быть примонтирован в каталог `/var/data` для программы 2. + Оттуда будут браться промежуточные результаты. +4. Каталог `./result` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складывать результаты финальной обработки. + +Для каждой программы были созданы файлы Dockerfile ([программа 1](worker-1/Dockerfile), [программа 2](worker-1/Dockerfile)) с подробным описанием процесса сборки. + +Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения. + +Дополнительно был создан файл [.dockerignore](.dockerignore) и дополнен [.gitignore](.gitignore), чтобы исключить для сборки и коммита всё лишнее. + +## Сборка и запуск + +В каталог `./data` помещены 2 файла. +Первый-самый большой файл по размеру, во втором - 100. + +Для запуска приложения необходимо ввести команду `docker compose up ---build`. + +Результат запуска после сборки: + +``` +[+] Running 2/2 + ✔ Container lab_2-worker-1-1 Created 0.0s + ✔ Container lab_2-worker-2-1 Recreated 0.1s +Attaching to lab_2-worker-1-1, lab_2-worker-2-1 +lab_2-worker-1-1 exited with code 0 +lab_2-worker-2-1 | 100 +lab_2-worker-2-1 exited with code 0 +``` + +В результате в каталоге `./result` создался файл `result.txt` с содержимым `100`, что соответствует входным данным. + +Изменение значений в файлах из каталога `./data` также изменяет содержимое в файлах из каталогов `./result-1` и `./result`. diff --git a/tasks/kazakov-ev/lab_2/data/test1.txt b/tasks/kazakov-ev/lab_2/data/test1.txt new file mode 100644 index 0000000..b178657 --- /dev/null +++ b/tasks/kazakov-ev/lab_2/data/test1.txt @@ -0,0 +1,4 @@ +1 +2 +3 +4 \ No newline at end of file diff --git a/tasks/kazakov-ev/lab_2/data/test2.txt b/tasks/kazakov-ev/lab_2/data/test2.txt new file mode 100644 index 0000000..dbde77c --- /dev/null +++ b/tasks/kazakov-ev/lab_2/data/test2.txt @@ -0,0 +1,8 @@ +1 +4 +5 +6 +7 +8 +9 +10 \ No newline at end of file diff --git a/tasks/kazakov-ev/lab_2/data/test3.txt b/tasks/kazakov-ev/lab_2/data/test3.txt new file mode 100644 index 0000000..b2a630f --- /dev/null +++ b/tasks/kazakov-ev/lab_2/data/test3.txt @@ -0,0 +1,3 @@ +1 +3 +5 \ No newline at end of file diff --git a/tasks/kazakov-ev/lab_2/docker-compose.yml b/tasks/kazakov-ev/lab_2/docker-compose.yml new file mode 100644 index 0000000..fe26cfe --- /dev/null +++ b/tasks/kazakov-ev/lab_2/docker-compose.yml @@ -0,0 +1,13 @@ +version: "3.1" +services: + worker-1: + build: ./worker-1 + volumes: + - ./data:/var/data + - ./result:/var/result + worker-2: + build: ./worker-2 + volumes: + - ./result:/var/result + depends_on: + - worker-1 \ No newline at end of file diff --git a/tasks/kazakov-ev/lab_2/lab_2.sln b/tasks/kazakov-ev/lab_2/lab_2.sln new file mode 100644 index 0000000..b4854d0 --- /dev/null +++ b/tasks/kazakov-ev/lab_2/lab_2.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1\worker-1.csproj", "{DFE09A1D-9DC6-4EF8-84A4-E388F323E88B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2\worker-2.csproj", "{F5373868-285B-43A5-A593-C6E64B28B404}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DFE09A1D-9DC6-4EF8-84A4-E388F323E88B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DFE09A1D-9DC6-4EF8-84A4-E388F323E88B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DFE09A1D-9DC6-4EF8-84A4-E388F323E88B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DFE09A1D-9DC6-4EF8-84A4-E388F323E88B}.Release|Any CPU.Build.0 = Release|Any CPU + {F5373868-285B-43A5-A593-C6E64B28B404}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F5373868-285B-43A5-A593-C6E64B28B404}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F5373868-285B-43A5-A593-C6E64B28B404}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F5373868-285B-43A5-A593-C6E64B28B404}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/tasks/kazakov-ev/lab_2/result/data.txt b/tasks/kazakov-ev/lab_2/result/data.txt new file mode 100644 index 0000000..dbde77c --- /dev/null +++ b/tasks/kazakov-ev/lab_2/result/data.txt @@ -0,0 +1,8 @@ +1 +4 +5 +6 +7 +8 +9 +10 \ No newline at end of file diff --git a/tasks/kazakov-ev/lab_2/result/result.txt b/tasks/kazakov-ev/lab_2/result/result.txt new file mode 100644 index 0000000..105d7d9 --- /dev/null +++ b/tasks/kazakov-ev/lab_2/result/result.txt @@ -0,0 +1 @@ +100 \ No newline at end of file diff --git a/tasks/kazakov-ev/lab_2/worker-1/Dockerfile b/tasks/kazakov-ev/lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..3e35bb1 --- /dev/null +++ b/tasks/kazakov-ev/lab_2/worker-1/Dockerfile @@ -0,0 +1,17 @@ +#задаем базовый образ на .net 7.0 +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env +#задаем рабочую директорию +WORKDIR /src + +#в каталог копируем файлы и папки в контейнер +COPY . ./ +#создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:7.0 as runtime +WORKDIR /publish +COPY --from=build-env /publish . +#вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-1.dll"] \ No newline at end of file diff --git a/tasks/kazakov-ev/lab_2/worker-1/Program.cs b/tasks/kazakov-ev/lab_2/worker-1/Program.cs new file mode 100644 index 0000000..1708e71 --- /dev/null +++ b/tasks/kazakov-ev/lab_2/worker-1/Program.cs @@ -0,0 +1,24 @@ +using System.Text; + +string[] files = Directory.GetFiles("/var/data"); +string FilePath = ""; +long maxFileLenght = 0; +foreach(var filePath in files){ + FileInfo fileInfo = new FileInfo(filePath); + if(fileInfo.Length > maxFileLenght){ + maxFileLenght = fileInfo.Length; + FilePath = filePath; + } +} +using (FileStream fstream = File.OpenRead(FilePath)){ + byte[] buffer = new byte[fstream.Length]; + await fstream.ReadAsync(buffer, 0, buffer.Length); + string text = Encoding.Default.GetString(buffer); + using(FileStream fstream1 = new FileStream("/var/result/data.txt", FileMode.OpenOrCreate)){ + fstream1.SetLength(0); + byte[] buffer1 = Encoding.Default.GetBytes(text); + await fstream1.WriteAsync(buffer1, 0, buffer1.Length); + } +} + + \ No newline at end of file diff --git a/tasks/kazakov-ev/lab_2/worker-1/worker-1.csproj b/tasks/kazakov-ev/lab_2/worker-1/worker-1.csproj new file mode 100644 index 0000000..93ad7da --- /dev/null +++ b/tasks/kazakov-ev/lab_2/worker-1/worker-1.csproj @@ -0,0 +1,11 @@ + + + + Exe + net7.0 + worker_1 + enable + enable + + + diff --git a/tasks/kazakov-ev/lab_2/worker-2/Dockerfile b/tasks/kazakov-ev/lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..0ea2530 --- /dev/null +++ b/tasks/kazakov-ev/lab_2/worker-2/Dockerfile @@ -0,0 +1,17 @@ +#задаем базовый образ на .net 6.0 +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env +#задаем рабочую директорию +WORKDIR /src + +#в каталог копируем файлы и папки в контейнер +COPY . ./ +#создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:7.0 as runtime +WORKDIR /publish +COPY --from=build-env /publish . +#вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-2.dll"] \ No newline at end of file diff --git a/tasks/kazakov-ev/lab_2/worker-2/Program.cs b/tasks/kazakov-ev/lab_2/worker-2/Program.cs new file mode 100644 index 0000000..4f9de96 --- /dev/null +++ b/tasks/kazakov-ev/lab_2/worker-2/Program.cs @@ -0,0 +1,23 @@ +using System.Text; + +string[] numbers; +using (FileStream fstream = File.OpenRead("/var/result/data.txt")){ + byte[] buffer = new byte[fstream.Length]; + await fstream.ReadAsync(buffer, 0, buffer.Length); + string text = Encoding.Default.GetString(buffer); + text = text.Replace("\r\n",";"); + numbers = text.Split(new char[]{';'}); +} +int maxNumber = 0; +int n = 0; +foreach(var number in numbers){ + if(Convert.ToInt32(number) > maxNumber){ + maxNumber = Convert.ToInt32(number); + n = maxNumber*maxNumber; + } +} +using(FileStream fstream = new FileStream("/var/result/result.txt", FileMode.OpenOrCreate)){ + byte[] buffer = Encoding.Default.GetBytes(n.ToString()); + await fstream.WriteAsync(buffer, 0, buffer.Length); +} +Console.WriteLine(n); diff --git a/tasks/kazakov-ev/lab_2/worker-2/worker-2.csproj b/tasks/kazakov-ev/lab_2/worker-2/worker-2.csproj new file mode 100644 index 0000000..b90f9cb --- /dev/null +++ b/tasks/kazakov-ev/lab_2/worker-2/worker-2.csproj @@ -0,0 +1,11 @@ + + + + Exe + net7.0 + worker_2 + enable + enable + + + diff --git a/tasks/khalitova-am/lab_2/.dockerignore b/tasks/khalitova-am/lab_2/.dockerignore new file mode 100644 index 0000000..54fec4f --- /dev/null +++ b/tasks/khalitova-am/lab_2/.dockerignore @@ -0,0 +1,2 @@ +*/*/bin +*/*/obj diff --git a/tasks/khalitova-am/lab_2/.gitignore b/tasks/khalitova-am/lab_2/.gitignore new file mode 100644 index 0000000..3c395b3 --- /dev/null +++ b/tasks/khalitova-am/lab_2/.gitignore @@ -0,0 +1,456 @@ +var/result/ + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# JetBrains Rider +.idea/ +*.sln.iml + +## +## Visual Studio Code +## +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/tasks/khalitova-am/lab_2/README.md b/tasks/khalitova-am/lab_2/README.md new file mode 100644 index 0000000..4c66ec0 --- /dev/null +++ b/tasks/khalitova-am/lab_2/README.md @@ -0,0 +1,61 @@ +# Отчёт по лабораторной работе №2 + +Выполнила: студентка гр. ИСЭбд-41 Халитова А.М. + +Вариант программы 1: Ищет в каталоге /var/data самый большой по объёму файл и перекладывает его в /var/result/data.txt. +Вариант программы 2: Ищет наибольшее число из файла /var/data/data.txt и сохраняет количество таких чисел из последовательности в /var/result/result.txt. + +## Создание приложений + +Создано два приложения .Net 6.0 на языке C# с помощью команд: +```sh +dotnet new console worker-1 +dotnet new console worker-2 +``` +Программа №1 по варианту выполняет поиск самого большого файла в каталоге `/var/data` и перемещает его содержимое в `/var/result/data.txt`. +[Код программы worker-1](worker-1/Program.cs) + +Программа №2 ищет наибольшее чисо в файле `/var/result/data.txt` (папка `/data` заменена на `/result` так как по условию задания результат программы 1, который перещемен в `/var/result/data.txt` является исходными данными для программы 2). + +[Код программы worker-2](worker-2/Program.cs) + +Дополнительно создан файл [.gitignore](.gitignore) с помощью команды `dotnet new gitignore`. + +## Настройка окружения + +Для связи двух приложений воспользуемся следующей схемой: + +1. Каталог `./data` примонтирован в каталог `/var/data` для получения исходных данных программы №1. +2. Каталог `./result` примонтирован в каталог `/var/result` для перемещения промежуточных данных, полученных программой №1, для программы №2. И также каталог `./result` получает результаты работы программы №2. + +Для каждой программы были созданы файлы Dockerfile с образами ([программа №1](worker-1/Dockerfile), [программа №2](worker-2/Dockerfile)) с описанием процесса сборки. + +Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения. +Был создан файл [.dockerignore](.dockerignore). + +## Сборка и запуск + +В каталог `./data` помещены 2 файла: `another_data.txt` и `data.txt`. Первый файл содержит два числа, а второй 12. + +Для запуска приложения вводим команду `docker compose up`. + +Результат запуска после сборки: +``` +[+] Running 2/0 + - Container lab_2-worker-1-1 Created + - Container lab_2-worker-2-1 Created +Attaching to lab_2-worker-1-1, lab_2-worker-2-1 +lab_2-worker-1-1 exited with code 0 +lab_2-worker-2-1 | 2 +lab_2-worker-2-1 exited with code 0 +``` + +В результате выполнения в каталоге `/var/result` был создан файл `/result.txt`, который содержит количество наибольшего числа в исходном файле. В нашем файле это число 9 и встречается оно 2 раза, соответственно, в файле хранится `2`. А также в результате выполнения программы результат выводится на экран (в консоль): +![](shot.png) + + + + + + + diff --git a/tasks/khalitova-am/lab_2/docker-compose.yml b/tasks/khalitova-am/lab_2/docker-compose.yml new file mode 100644 index 0000000..91500e5 --- /dev/null +++ b/tasks/khalitova-am/lab_2/docker-compose.yml @@ -0,0 +1,13 @@ +version: "3.1" +services: + worker-1: + build: ./worker-1 + volumes: + - ./data:/var/data + - ./result:/var/result + worker-2: + build: ./worker-2 + volumes: + - ./result:/var/result + depends_on: + - worker-1 diff --git a/tasks/khalitova-am/lab_2/shot.png b/tasks/khalitova-am/lab_2/shot.png new file mode 100644 index 0000000..eda7732 Binary files /dev/null and b/tasks/khalitova-am/lab_2/shot.png differ diff --git a/tasks/khalitova-am/lab_2/var/data/another_data.txt b/tasks/khalitova-am/lab_2/var/data/another_data.txt new file mode 100644 index 0000000..7a754f4 --- /dev/null +++ b/tasks/khalitova-am/lab_2/var/data/another_data.txt @@ -0,0 +1,2 @@ +1 +2 \ No newline at end of file diff --git a/tasks/khalitova-am/lab_2/var/data/data.txt b/tasks/khalitova-am/lab_2/var/data/data.txt new file mode 100644 index 0000000..728ae1c --- /dev/null +++ b/tasks/khalitova-am/lab_2/var/data/data.txt @@ -0,0 +1,12 @@ +5 +7 +3 +7 +5 +8 +8 +9 +9 +5 +2 +1 \ No newline at end of file diff --git a/tasks/khalitova-am/lab_2/worker-1/Dockerfile b/tasks/khalitova-am/lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..64c96fa --- /dev/null +++ b/tasks/khalitova-am/lab_2/worker-1/Dockerfile @@ -0,0 +1,20 @@ +#задаем базовый образ на .net 6.0 +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env +#задаем рабочую директорию +WORKDIR /src + +#в каталог копируем файлы и папки в контейнер +COPY . ./ +#создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:6.0 as runtime +WORKDIR /publish +COPY --from=build-env /publish . +#вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-1.dll"] + + + diff --git a/tasks/khalitova-am/lab_2/worker-1/Program.cs b/tasks/khalitova-am/lab_2/worker-1/Program.cs new file mode 100644 index 0000000..f9623e4 --- /dev/null +++ b/tasks/khalitova-am/lab_2/worker-1/Program.cs @@ -0,0 +1,22 @@ +using System.Text; + +string[] files = Directory.GetFiles("/var/data"); +string maxFilePath = ""; +long maxFileLenght = 0; +foreach(var filePath in files){ + FileInfo fileInfo = new FileInfo(filePath); + if(fileInfo.Length > maxFileLenght){ + maxFileLenght = fileInfo.Length; + maxFilePath = filePath; + } +} +using (FileStream fstream = File.OpenRead(maxFilePath)){ + byte[] buffer = new byte[fstream.Length]; + await fstream.ReadAsync(buffer, 0, buffer.Length); + string text = Encoding.Default.GetString(buffer); + using(FileStream fstream1 = new FileStream("/var/result/data.txt", FileMode.OpenOrCreate)){ + fstream1.SetLength(0); + byte[] buffer1 = Encoding.Default.GetBytes(text); + await fstream1.WriteAsync(buffer1, 0, buffer1.Length); + } +} diff --git a/tasks/khalitova-am/lab_2/worker-1/worker-1.csproj b/tasks/khalitova-am/lab_2/worker-1/worker-1.csproj new file mode 100644 index 0000000..3f5cb43 --- /dev/null +++ b/tasks/khalitova-am/lab_2/worker-1/worker-1.csproj @@ -0,0 +1,11 @@ + + + + Exe + net6.0 + worker_1 + enable + enable + + + diff --git a/tasks/khalitova-am/lab_2/worker-2/Dockerfile b/tasks/khalitova-am/lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..c6c4928 --- /dev/null +++ b/tasks/khalitova-am/lab_2/worker-2/Dockerfile @@ -0,0 +1,20 @@ +#задаем базовый образ на .net 6.0 +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env +#задаем рабочую директорию +WORKDIR /src + +#в каталог копируем файлы и папки в контейнер +COPY . ./ +#создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:6.0 as runtime +WORKDIR /publish +COPY --from=build-env /publish . +#вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-2.dll"] + + + diff --git a/tasks/khalitova-am/lab_2/worker-2/Program.cs b/tasks/khalitova-am/lab_2/worker-2/Program.cs new file mode 100644 index 0000000..44794ee --- /dev/null +++ b/tasks/khalitova-am/lab_2/worker-2/Program.cs @@ -0,0 +1,23 @@ +using System.Text; + +int[] numbers = File.ReadAllLines("/var/data/data.txt").Select(x=> int.Parse(x)).ToArray(); +int maxNumber = 0; +int maxNumberCount = 0; +foreach(var number in numbers){ + if(number < maxNumber){ + continue; + } + if(number == maxNumber){ + maxNumberCount++; + continue; + } + if(number > maxNumber){ + maxNumber = number; + maxNumberCount = 1; + } +} +using(FileStream fstream = new FileStream("/var/result/result.txt", FileMode.OpenOrCreate)){ + byte[] buffer = Encoding.Default.GetBytes(maxNumberCount.ToString()); + await fstream.WriteAsync(buffer, 0, buffer.Length); +} +Console.WriteLine(maxNumberCount); \ No newline at end of file diff --git a/tasks/khalitova-am/lab_2/worker-2/worker-2.csproj b/tasks/khalitova-am/lab_2/worker-2/worker-2.csproj new file mode 100644 index 0000000..960073b --- /dev/null +++ b/tasks/khalitova-am/lab_2/worker-2/worker-2.csproj @@ -0,0 +1,11 @@ + + + + Exe + net6.0 + worker_2 + enable + enable + + + diff --git a/tasks/lachugina-av/lab_1/README.md b/tasks/lachugina-av/lab_1/README.md new file mode 100644 index 0000000..f256843 --- /dev/null +++ b/tasks/lachugina-av/lab_1/README.md @@ -0,0 +1,126 @@ +# Отчёт по лабораторной работе №1 + +Выполнила: студентка гр. ИСЭбд-41 Лачугина Анастасия + +## Разворачивание сервиса wordpress + +Содержимое файла `docker-compose.yml` + +```yml +version: '2' + +services: + + wordpress: + depends_on: + - db + image: wordpress #Образ контейнера из Docker Hub + restart: always #постоянный перезапуск контейнера + environment: #настройки контейнера + WORDPRESS_DB_HOST: db:3306 + WORDPRESS_DB_USER: admin + WORDPRESS_DB_PASSWORD: admin + WORDPRESS_DB_NAME: wordpress + ports: #пробрасывается порт + - 8082:80 + + db: + image: mysql #Образ контейнера из Docker Hub + restart: always #постоянный перезапуск контейнера + volumes: #том для хранения данных + - ./database:/var/lib/mysql + + environment: #настройки контейнера + MYSQL_ROOT_PASSWORD: admin + MYSQL_DATABASE: wordpress + MYSQL_USER: admin + MYSQL_PASSWORD: admin + +volumes: + wordpress: + db: +``` + +Разворачивается командой `docker-compose up` + +Убеждаемся, что всё работает: + +![](wordpress1.jpg) + +![](wordpress2.jpg) + + + +## Разворачивание сервиса redmine + +Содержимое файла `docker-compose.yml` + +```yml +version: '3.1' + +services: + + redmine: + image: redmine #Образ контейнера из Docker Hub + restart: always #постоянный перезапуск контейнера + ports: #пробрасывается порт + - 8080:3000 + environment: #настройки контейнера + REDMINE_DB_MYSQL: db + REDMINE_DB_PASSWORD: example + REDMINE_SECRET_KEY_BASE: supersecretkey + + db: + image: mysql:5.7 #Образ контейнера из Docker Hub + restart: always #постоянный перезапуск контейнера + environment: #настройки контейнера + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: redmine + ``` + + + +Разворачивается командой `docker-compose up` + +Убеждаемся, что всё работает: + +![](redmine2.jpg) +![](redmine1.jpg) +![](redmine3.jpg) +![](redmine4.jpg) + + + +## Разворачивание сервиса wordpress + +Содержимое файла `docker-compose.yml` + +```yml +version: '3.1' + +services: + + drupal: + image: drupal:8-apache + ports: + - 7777:80 + volumes: + - /var/www/html/modules + - /var/www/html/profiles + - /var/www/html/themes + - /var/www/html/sites + restart: always + + postgres: + image: postgres:10 + environment: + POSTGRES_PASSWORD: example + restart: always + ``` + +Разворачивается командой `docker-compose up` + +Убеждаемся, что всё работает: + +![](drupal1.jpg) +![](drupal2.jpg) diff --git a/tasks/lachugina-av/lab_1/drupal1.jpg b/tasks/lachugina-av/lab_1/drupal1.jpg new file mode 100644 index 0000000..1e809d7 Binary files /dev/null and b/tasks/lachugina-av/lab_1/drupal1.jpg differ diff --git a/tasks/lachugina-av/lab_1/drupal2.jpg b/tasks/lachugina-av/lab_1/drupal2.jpg new file mode 100644 index 0000000..e0f535c Binary files /dev/null and b/tasks/lachugina-av/lab_1/drupal2.jpg differ diff --git a/tasks/lachugina-av/lab_1/redmine1.jpg b/tasks/lachugina-av/lab_1/redmine1.jpg new file mode 100644 index 0000000..7851a02 Binary files /dev/null and b/tasks/lachugina-av/lab_1/redmine1.jpg differ diff --git a/tasks/lachugina-av/lab_1/redmine2.jpg b/tasks/lachugina-av/lab_1/redmine2.jpg new file mode 100644 index 0000000..5694ddb Binary files /dev/null and b/tasks/lachugina-av/lab_1/redmine2.jpg differ diff --git a/tasks/lachugina-av/lab_1/redmine3.jpg b/tasks/lachugina-av/lab_1/redmine3.jpg new file mode 100644 index 0000000..023c319 Binary files /dev/null and b/tasks/lachugina-av/lab_1/redmine3.jpg differ diff --git a/tasks/lachugina-av/lab_1/redmine4.jpg b/tasks/lachugina-av/lab_1/redmine4.jpg new file mode 100644 index 0000000..2ff38cc Binary files /dev/null and b/tasks/lachugina-av/lab_1/redmine4.jpg differ diff --git a/tasks/lachugina-av/lab_1/wordpress1.jpg b/tasks/lachugina-av/lab_1/wordpress1.jpg new file mode 100644 index 0000000..425710e Binary files /dev/null and b/tasks/lachugina-av/lab_1/wordpress1.jpg differ diff --git a/tasks/lachugina-av/lab_1/wordpress2.jpg b/tasks/lachugina-av/lab_1/wordpress2.jpg new file mode 100644 index 0000000..3db50a4 Binary files /dev/null and b/tasks/lachugina-av/lab_1/wordpress2.jpg differ diff --git a/tasks/lyamzina-ma/lab_1/README.md b/tasks/lyamzina-ma/lab_1/README.md new file mode 100644 index 0000000..71586b1 --- /dev/null +++ b/tasks/lyamzina-ma/lab_1/README.md @@ -0,0 +1,148 @@ +# Отчёт по лабораторной работе №1 + +Выполнила: студентка гр. ИСЭбд-41, Лямзина М.А. + +## Разворачивание сервиса Gitea + +Содержимое файла `docker-compose.yml` в папке Gitea: +```yaml +version: "3" + +networks: + gitea: + external: false +# Контейнер Gitea +services: # Описание служб + server: + image: gitea/gitea:1.20.4 # Образ gitea + container_name: gitea # Наименование контейнера + environment: # Наши параметры + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=mysql + - GITEA__database__HOST=db:3306 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=gitea + restart: always + networks: # Параметры сети + - gitea + volumes: # Каталоги для хранения данных контейнера + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: # Порт локальный и внутри сети + - "3000:3000" + - "222:22" + depends_on: + - db +# База данных + db: + image: mysql:8 # Образ БД и версия + restart: always # Параметр перезапуска + environment: # Подключаем каталог с базой данных + - MYSQL_ROOT_PASSWORD=gitea + - MYSQL_USER=gitea + - MYSQL_PASSWORD=gitea + - MYSQL_DATABASE=gitea + networks: # Параметры сети + - gitea + volumes: # Том для хранения данных БД + - ./mysql:/var/lib/mysql +``` +В папке girea создаем файл +![](Скрины/1.png) + +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](Скрины/2.png) + +Открываем Docker Desktop и проверяем, что контейнер сервера БД и Gitea созданы и запущены: +![](Скрины/3.png) + +Переходим на http://localhost:222: +![](Скрины/4.png) + +Регистрируемся и автоматически входим в учетную запись: +![](Скрины/5.png) + + +## Разворачивание сервиса Wordpress + +Также в файл `docker-compose.yml` в папке Wordpress прописываем следующий код: + +```yaml +version: '3.1' + +services: +# Контейнер Wordpress + wordpress: + image: wordpress # Образ + restart: always # Параметр перезапуска + ports: # На каком порте запускаем + - 7071:80 + environment: # Настройки БД WordPress для подключения + WORDPRESS_DB_HOST: database # Имя хоста БД MySQL + WORDPRESS_DB_USER: user # Имя пользователя БД + WORDPRESS_DB_PASSWORD: password # Пароль пользователя БД + WORDPRESS_DB_NAME: name_database # Имя БД + volumes: # Каталог хранения файлов WordPress + - wordpress:/var/www/html +# Контейнер MySQL + database: + image: mysql:5.7 # Образ и его версия + restart: always # Параметр перезапуска + environment: # Настройки БД для подключения + MYSQL_DATABASE: name_database + MYSQL_USER: user + MYSQL_PASSWORD: password + MYSQL_RANDOM_ROOT_PASSWORD: '12345' + volumes: # Каталог хранения данных БД + - database:/var/lib/mysql + +volumes: + wordpress: + database: +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](Скрины/6.png) + +Открываем Docker Desktop и проверяем, что контейнер сервера БД и Wordpress созданы и запущены: +![](Скрины/7.png) + +Устанавливаем Wordpress и проверяем, что все работает: +![](Скрины/8.png) + +## Разворачивание сервиса Redmine + +Также в файл `docker-compose.yml` в папке Redmine прописываем код: + +```yaml +version: '3.1' + +services: +# Контейнер Redmine + redmine: + image: redmine # Образ контейнера + restart: always + ports: # На какой порт запускать + - 8080:3000 + environment: + REDMINE_DB_MYSQL: db + REDMINE_DB_PASSWORD: example + REDMINE_SECRET_KEY_BASE: supersecretkey +# Контейнер БД MySQL + db: + image: mysql:5.7 # Образ БД и ее версия + restart: always + environment: # Название и пароль админа БД + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: redmine +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](Скрины/9.png) + +Переходим на http://localhost:8080: +![](Скрины/10.png) + +Регистрируемся и проверяем, что все работает: +![](Скрины/11.png) diff --git a/tasks/lyamzina-ma/lab_1/Скрины/1.png b/tasks/lyamzina-ma/lab_1/Скрины/1.png new file mode 100644 index 0000000..fb9b93d Binary files /dev/null and b/tasks/lyamzina-ma/lab_1/Скрины/1.png differ diff --git a/tasks/lyamzina-ma/lab_1/Скрины/10.png b/tasks/lyamzina-ma/lab_1/Скрины/10.png new file mode 100644 index 0000000..074e2ca Binary files /dev/null and b/tasks/lyamzina-ma/lab_1/Скрины/10.png differ diff --git a/tasks/lyamzina-ma/lab_1/Скрины/11.png b/tasks/lyamzina-ma/lab_1/Скрины/11.png new file mode 100644 index 0000000..e767802 Binary files /dev/null and b/tasks/lyamzina-ma/lab_1/Скрины/11.png differ diff --git a/tasks/lyamzina-ma/lab_1/Скрины/2.png b/tasks/lyamzina-ma/lab_1/Скрины/2.png new file mode 100644 index 0000000..a5bedcb Binary files /dev/null and b/tasks/lyamzina-ma/lab_1/Скрины/2.png differ diff --git a/tasks/lyamzina-ma/lab_1/Скрины/3.png b/tasks/lyamzina-ma/lab_1/Скрины/3.png new file mode 100644 index 0000000..f7bc7a0 Binary files /dev/null and b/tasks/lyamzina-ma/lab_1/Скрины/3.png differ diff --git a/tasks/lyamzina-ma/lab_1/Скрины/4.png b/tasks/lyamzina-ma/lab_1/Скрины/4.png new file mode 100644 index 0000000..550ab29 Binary files /dev/null and b/tasks/lyamzina-ma/lab_1/Скрины/4.png differ diff --git a/tasks/lyamzina-ma/lab_1/Скрины/5.png b/tasks/lyamzina-ma/lab_1/Скрины/5.png new file mode 100644 index 0000000..c7f7b12 Binary files /dev/null and b/tasks/lyamzina-ma/lab_1/Скрины/5.png differ diff --git a/tasks/lyamzina-ma/lab_1/Скрины/6.png b/tasks/lyamzina-ma/lab_1/Скрины/6.png new file mode 100644 index 0000000..09c4ba8 Binary files /dev/null and b/tasks/lyamzina-ma/lab_1/Скрины/6.png differ diff --git a/tasks/lyamzina-ma/lab_1/Скрины/7.png b/tasks/lyamzina-ma/lab_1/Скрины/7.png new file mode 100644 index 0000000..ebd3a8f Binary files /dev/null and b/tasks/lyamzina-ma/lab_1/Скрины/7.png differ diff --git a/tasks/lyamzina-ma/lab_1/Скрины/8.png b/tasks/lyamzina-ma/lab_1/Скрины/8.png new file mode 100644 index 0000000..0c1e96e Binary files /dev/null and b/tasks/lyamzina-ma/lab_1/Скрины/8.png differ diff --git a/tasks/lyamzina-ma/lab_1/Скрины/9.png b/tasks/lyamzina-ma/lab_1/Скрины/9.png new file mode 100644 index 0000000..cb3f960 Binary files /dev/null and b/tasks/lyamzina-ma/lab_1/Скрины/9.png differ diff --git a/tasks/lyamzina-ma/lab_2/.gitignore b/tasks/lyamzina-ma/lab_2/.gitignore new file mode 100644 index 0000000..8afdcb6 --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/.gitignore @@ -0,0 +1,454 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# JetBrains Rider +.idea/ +*.sln.iml + +## +## Visual Studio Code +## +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/tasks/lyamzina-ma/lab_2/README.md b/tasks/lyamzina-ma/lab_2/README.md new file mode 100644 index 0000000..7ea8a56 --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/README.md @@ -0,0 +1,85 @@ +# Отчёт по лабораторной работе №2 + +Выполнил: студентка гр. ИСЭбд-41, Лямзина Мария. + +Вариант программы 1: 2. Формирует файл `/var/result/data.txt` из первых строк всех файлов каталога `/var/data`. + +Вариант программы 2: 4. Ищет наименьшее число из файла `/var/data/data.txt` и сохраняет количество таких чисел из последовательности `/var/result/result.txt`. + +## Создание приложений + +Создадим 2 приложения. +Был выбран язык C# и технология .NET 5. + +Для создания обычных консольных приложений воспользуемся командами: + +```sh +dotnet new console -o worker-1 +dotnet new console -o worker-2 +``` + +Согласно варианту, программа 1 должна брать из `/var/data` по первой строчке из каждого файла, и в результате записать все в файл `/var/result/data.txt`. + +[Исходный текст программы worker-1](worker-1/Program.cs) + +Согласно варианту программа 2 искать в файле `/var/data/data.txt` наименьшее число и посчитать количетсво таких чисел. +Далее количество записывается в `/var/result/result.txt`. + +[Исходный текст программы worker-2](worker-2/Program.cs) + +Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего. + +## Настройка окружения + +Для связи двух приложений воспользуемся следующей схемой: + +1. Каталог `./data` должен быть примонтирован в каталог `/var/data` для программы 1. + Оттуда будут браться исходные данные. +2. Каталог `./result-1` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складываться промежуточные данные. +3. Каталог `./result-1` также должен быть примонтирован в каталог `/var/data` для программы 2. + Оттуда будут браться промежуточные результаты. +4. Каталог `./result` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складывать результаты финальной обработки. + +Для каждой программы были созданы файлы Dockerfile ([программа 1](worker-1/Dockerfile), [программа 2](worker-2/Dockerfile)) с подробным описанием процесса сборки. + +Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения. + + +## Сборка и запуск + +1. В каталог `./data` помещены 2 файла с различной значениями. + +![](photo/1.png) +![](photo/2.jpg) + + +На выходе программа должна записать 1 и 1. + +![](photo/3.jpg) + +2. Теперь, обрабатывая этот файл: + +![](photo/1.jpg) + +Программа найдет число 1 как минимальное, оно повторяется 2 раза значит в `/var/result/result.txt` выведется число 2 . + +![](photo/4.jpg) + +Для запуска приложения необходимо ввести команду `docker compose up --build`. +Результат запуска после сборки: + +``` +[+] Running 2/0 + ✔ Container lab_2-worker-1-1 Created 0.0s + ✔ Container lab_2-worker-2-1 Created 0.0s +Attaching to lab_2-worker-1-1, lab_2-worker-2-1 +lab_2-worker-1-1 | Файл успешно сформирован! +lab_2-worker-2-1 | Количество наименьших чисел сохранено в файле: /var/result/result.txt +lab_2-worker-1-1 exited with code 0 +lab_2-worker-2-1 exited with code 0 +``` +В результате в каталоге `./result` создался файл `data.txt` с содержимым `1 1`, что соответствует входным данным. + +В каталоге `./result` создался файл `result.txt` с содержимым `2`, что соответствует входным данным. diff --git a/tasks/lyamzina-ma/lab_2/data/data.txt b/tasks/lyamzina-ma/lab_2/data/data.txt new file mode 100644 index 0000000..65a3986 --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/data/data.txt @@ -0,0 +1,19 @@ +1 +22 +11 +15 +46 +23 +11 +55 +449 +78 +65 +15 +35 +1 +59 +11 +87 +465 +11 \ No newline at end of file diff --git a/tasks/lyamzina-ma/lab_2/data/data1.txt b/tasks/lyamzina-ma/lab_2/data/data1.txt new file mode 100644 index 0000000..d232e5f --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/data/data1.txt @@ -0,0 +1,13 @@ +1 +5 +4 +6 +4 +5 +7 +5 +3 +2 +2 +2 +4 \ No newline at end of file diff --git a/tasks/lyamzina-ma/lab_2/docker-compose.yml b/tasks/lyamzina-ma/lab_2/docker-compose.yml new file mode 100644 index 0000000..9c753e7 --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3.1" +services: + worker-1: + build: ./worker-1 + volumes: + # Монтирует локальную папку data к папке data в контейнере. + - ./data:/var/data + # Монтирует локальную папку result-1 к папке result в контейнере. + - ./result-1:/var/result + worker-2: + build: ./worker-2 + volumes: + # Монтирует локальную папку result-1 к папке data в контейнере. + - ./result-1:/var/data + - ./result:/var/result + # Зависимость от первого приложения. + depends_on: + - worker-1 \ No newline at end of file diff --git a/tasks/lyamzina-ma/lab_2/lab_2.sln b/tasks/lyamzina-ma/lab_2/lab_2.sln new file mode 100644 index 0000000..2dbd45a --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/lab_2.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1\worker-1.csproj", "{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2\worker-2.csproj", "{3C748027-270F-4C30-8D0E-27C0D2866B71}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Debug|x64.ActiveCfg = Debug|Any CPU + {8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Debug|x64.Build.0 = Debug|Any CPU + {8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Debug|x86.ActiveCfg = Debug|Any CPU + {8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Debug|x86.Build.0 = Debug|Any CPU + {8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Release|Any CPU.Build.0 = Release|Any CPU + {8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Release|x64.ActiveCfg = Release|Any CPU + {8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Release|x64.Build.0 = Release|Any CPU + {8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Release|x86.ActiveCfg = Release|Any CPU + {8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Release|x86.Build.0 = Release|Any CPU + {3C748027-270F-4C30-8D0E-27C0D2866B71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3C748027-270F-4C30-8D0E-27C0D2866B71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3C748027-270F-4C30-8D0E-27C0D2866B71}.Debug|x64.ActiveCfg = Debug|Any CPU + {3C748027-270F-4C30-8D0E-27C0D2866B71}.Debug|x64.Build.0 = Debug|Any CPU + {3C748027-270F-4C30-8D0E-27C0D2866B71}.Debug|x86.ActiveCfg = Debug|Any CPU + {3C748027-270F-4C30-8D0E-27C0D2866B71}.Debug|x86.Build.0 = Debug|Any CPU + {3C748027-270F-4C30-8D0E-27C0D2866B71}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3C748027-270F-4C30-8D0E-27C0D2866B71}.Release|Any CPU.Build.0 = Release|Any CPU + {3C748027-270F-4C30-8D0E-27C0D2866B71}.Release|x64.ActiveCfg = Release|Any CPU + {3C748027-270F-4C30-8D0E-27C0D2866B71}.Release|x64.Build.0 = Release|Any CPU + {3C748027-270F-4C30-8D0E-27C0D2866B71}.Release|x86.ActiveCfg = Release|Any CPU + {3C748027-270F-4C30-8D0E-27C0D2866B71}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/tasks/lyamzina-ma/lab_2/photo/1.png b/tasks/lyamzina-ma/lab_2/photo/1.png new file mode 100644 index 0000000..1df5bb0 Binary files /dev/null and b/tasks/lyamzina-ma/lab_2/photo/1.png differ diff --git a/tasks/lyamzina-ma/lab_2/photo/2.png b/tasks/lyamzina-ma/lab_2/photo/2.png new file mode 100644 index 0000000..1952fb7 Binary files /dev/null and b/tasks/lyamzina-ma/lab_2/photo/2.png differ diff --git a/tasks/lyamzina-ma/lab_2/photo/3.png b/tasks/lyamzina-ma/lab_2/photo/3.png new file mode 100644 index 0000000..f2297f2 Binary files /dev/null and b/tasks/lyamzina-ma/lab_2/photo/3.png differ diff --git a/tasks/lyamzina-ma/lab_2/photo/4.png b/tasks/lyamzina-ma/lab_2/photo/4.png new file mode 100644 index 0000000..d08f3c0 Binary files /dev/null and b/tasks/lyamzina-ma/lab_2/photo/4.png differ diff --git a/tasks/lyamzina-ma/lab_2/result-1/data.txt b/tasks/lyamzina-ma/lab_2/result-1/data.txt new file mode 100644 index 0000000..6ed281c --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/result-1/data.txt @@ -0,0 +1,2 @@ +1 +1 diff --git a/tasks/lyamzina-ma/lab_2/result/result.txt b/tasks/lyamzina-ma/lab_2/result/result.txt new file mode 100644 index 0000000..d8263ee --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/result/result.txt @@ -0,0 +1 @@ +2 \ No newline at end of file diff --git a/tasks/lyamzina-ma/lab_2/worker-1/Dockerfile b/tasks/lyamzina-ma/lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..e4756e5 --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/worker-1/Dockerfile @@ -0,0 +1,18 @@ +# Задаем базовый образ на .net +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env +# Задаем рабочую директорию +WORKDIR /src + + +# Копируем файлы и папки в каталог в контейнер +COPY . ./ +# Создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:5.0 +WORKDIR /publish +COPY --from=build-env /publish . +# Вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-1.dll"] \ No newline at end of file diff --git a/tasks/lyamzina-ma/lab_2/worker-1/Program.cs b/tasks/lyamzina-ma/lab_2/worker-1/Program.cs new file mode 100644 index 0000000..4957ae6 --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/worker-1/Program.cs @@ -0,0 +1,28 @@ +using System; +using System.IO; + +class Program +{ + static void Main() + { + string dataDirectory = "/var/data"; + string outputFile = "/var/result/data.txt"; + + string[] fileLines = Directory.GetFiles(dataDirectory); + + using (StreamWriter writer = new StreamWriter(outputFile)) + { + foreach (string filePath in fileLines) + { + string[] lines = File.ReadAllLines(filePath); + + if (lines.Length > 0) + { + writer.WriteLine(lines[0]); + } + } + } + + Console.WriteLine("Файл успешно сформирован!"); + } +} diff --git a/tasks/lyamzina-ma/lab_2/worker-1/worker-1.csproj b/tasks/lyamzina-ma/lab_2/worker-1/worker-1.csproj new file mode 100644 index 0000000..328500d --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/worker-1/worker-1.csproj @@ -0,0 +1,9 @@ + + + + Exe + net5.0 + worker_1 + + + diff --git a/tasks/lyamzina-ma/lab_2/worker-2/Dockerfile b/tasks/lyamzina-ma/lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..f80c2dc --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/worker-2/Dockerfile @@ -0,0 +1,18 @@ +# Задаем базовый образ на .net +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env +# Задаем рабочую директорию +WORKDIR /src + + +# Копируем файлы и папки в каталог в контейнер +COPY . ./ +# Создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:5.0 +WORKDIR /publish +COPY --from=build-env /publish . +# Вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-2.dll"] \ No newline at end of file diff --git a/tasks/lyamzina-ma/lab_2/worker-2/Program.cs b/tasks/lyamzina-ma/lab_2/worker-2/Program.cs new file mode 100644 index 0000000..cf9c2f2 --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/worker-2/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.IO; +using System.Linq; + +class Program +{ + static void Main() + { + string inputFile = "/var/data/data.txt"; + string outputFile = "/var/result/result.txt"; + + string[] lines = File.ReadAllLines(inputFile); + int[] numbers = lines.Select(int.Parse).ToArray(); + + int minNumber = numbers.Min(); + int countOfMinNumbers = numbers.Count(n => n == minNumber); + + File.WriteAllText(outputFile, countOfMinNumbers.ToString()); + + Console.WriteLine("Количество наименьших чисел сохранено в файле: " + outputFile); + } +} diff --git a/tasks/lyamzina-ma/lab_2/worker-2/worker-2.csproj b/tasks/lyamzina-ma/lab_2/worker-2/worker-2.csproj new file mode 100644 index 0000000..fb2480c --- /dev/null +++ b/tasks/lyamzina-ma/lab_2/worker-2/worker-2.csproj @@ -0,0 +1,9 @@ + + + + Exe + net5.0 + worker_2 + + + diff --git a/tasks/melnikov-ky/lab_2/.gitignore b/tasks/melnikov-ky/lab_2/.gitignore new file mode 100644 index 0000000..154e127 --- /dev/null +++ b/tasks/melnikov-ky/lab_2/.gitignore @@ -0,0 +1,477 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk diff --git a/tasks/melnikov-ky/lab_2/README.md b/tasks/melnikov-ky/lab_2/README.md new file mode 100644 index 0000000..556231c --- /dev/null +++ b/tasks/melnikov-ky/lab_2/README.md @@ -0,0 +1,85 @@ +# Отчёт по лабораторной работе №2 + +Выполнил: студент гр. ИСЭбд-41, Мельников Кирилл. + +Вариант программы 1: 6. Берёт из каталога `/var/data `случайный файл и перекладывает его в `/var/result/data.txt`. + +Вариант программы 2: 4. Ищет наименьшее число из файла `/var/data/data.txt` и сохраняет количество таких чисел из последовательности в `/var/result/result.txt`. + +## Создание приложений + +Создадим 2 приложения. +Был выбран язык C# и технология .NET 5. + +Для создания обычных консольных приложений воспользуемся командами: + +```sh +dotnet new console -o worker-1 +dotnet new console -o worker-2 +``` + +Согласно варианту, программа 1 должна брать из каталога `/var/data `случайный файл и перекладывать его в `/var/result/data.txt`. + +[Исходный код программы worker-1](worker-1/Program.cs) + +Согласно варианту программа 2 должна искать наименьшее число из файла `/var/data/data.txt` и сохранять количество таких чисел из последовательности в `/var/result/result.txt`. + +[Исходный код программы worker-2](worker-2/Program.cs) + +Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего. + +## Настройка окружения + +Для связи двух приложений воспользуемся следующей схемой: + +1. Каталог `./data` должен быть примонтирован в каталог `/var/data` для программы 1. + Оттуда будут браться исходные данные. +2. Каталог `./result-1` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складываться промежуточные данные. +3. Каталог `./result-1` также должен быть примонтирован в каталог `/var/data` для программы 2. + Оттуда будут браться промежуточные результаты. +4. Каталог `./result` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складывать результаты финальной обработки. + +Для каждой программы были созданы файлы Dockerfile ([программа 1](worker-1/Dockerfile), [программа 2](worker-2/Dockerfile)) с подробным описанием процесса сборки. + +Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения. + + +## Сборка и запуск + +1. В каталог `./data` помещены 3 файла с различными названиями и содержимым. + +![](scrins/1.png) + +На выходе программа должна записать данные из рандомного файла директории `/var/data`. + +![](scrins/5.png) +![](scrins/3.png) +![](scrins/4.png) + +2. Теперь, обрабатывая эти файлы: + +![](scrins/2.png) + +На выходе программа должна записать число 5 в `./result` так как в файле c названием data.txt минимальное число = 11, которое встречается 5 раз. + +![](scrins/6.png) + +Для запуска приложения необходимо ввести команду `docker compose up --build`. +Результат запуска после сборки: + +``` +[+] Running 2/1 + ✔ Container lab_2-worker-1-1 Created 0.0s + ✔ Container lab_2-worker-2-1 Created 0.0s +Attaching to lab_2-worker-1-1, lab_2-worker-2-1 +lab_2-worker-1-1 | Файл /var/data/data.txt успешно скопирован в /var/result/data.txt. +lab_2-worker-1-1 exited with code 0 +lab_2-worker-2-1 | Количество наименьших чисел сохранено в файле: /var/result/result.txt +lab_2-worker-2-1 exited with code 0 +``` + +В результате в каталоге `./result` создался файл `result.txt` с содержимым `5`, что соответствует входным данным. + +Изменение значений в файлах из каталога `./data` также изменяет содержимое в файлах из каталогов `./result-1` и `./result`. \ No newline at end of file diff --git a/tasks/melnikov-ky/lab_2/data/data.txt b/tasks/melnikov-ky/lab_2/data/data.txt new file mode 100644 index 0000000..73e7974 --- /dev/null +++ b/tasks/melnikov-ky/lab_2/data/data.txt @@ -0,0 +1,19 @@ +100 +22 +11 +15 +46 +23 +11 +55 +449 +78 +65 +15 +35 +11 +59 +11 +87 +465 +11 \ No newline at end of file diff --git a/tasks/melnikov-ky/lab_2/data/data1.txt b/tasks/melnikov-ky/lab_2/data/data1.txt new file mode 100644 index 0000000..9171125 --- /dev/null +++ b/tasks/melnikov-ky/lab_2/data/data1.txt @@ -0,0 +1,24 @@ +156 +46 +23 +485 +12 +45 +98 +12 +45 +65 +12 +45 +748 +652 +32 +12 +4698 +789 +65 +16 +654 +9874 +654 +12 diff --git a/tasks/melnikov-ky/lab_2/data/data2.txt b/tasks/melnikov-ky/lab_2/data/data2.txt new file mode 100644 index 0000000..71265d4 --- /dev/null +++ b/tasks/melnikov-ky/lab_2/data/data2.txt @@ -0,0 +1,53 @@ +54 +465 +654 +74894 +654 +16847 +9874 +654 +9847 +96841 +9874 +654 +498654 +14654 +6541 +64 +6541 +496 +54 +6 +21 +54 +65 +21 +654 +21 +54 +68 +2 +486 +2 +485 +2 +68 +2 +196 +2 +4196 +2 +469 +2 +5 +3 +4 +6 +8 +7 +9 +4 +2 +2 +2 + diff --git a/tasks/melnikov-ky/lab_2/docker-compose.yml b/tasks/melnikov-ky/lab_2/docker-compose.yml new file mode 100644 index 0000000..9c753e7 --- /dev/null +++ b/tasks/melnikov-ky/lab_2/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3.1" +services: + worker-1: + build: ./worker-1 + volumes: + # Монтирует локальную папку data к папке data в контейнере. + - ./data:/var/data + # Монтирует локальную папку result-1 к папке result в контейнере. + - ./result-1:/var/result + worker-2: + build: ./worker-2 + volumes: + # Монтирует локальную папку result-1 к папке data в контейнере. + - ./result-1:/var/data + - ./result:/var/result + # Зависимость от первого приложения. + depends_on: + - worker-1 \ No newline at end of file diff --git a/tasks/melnikov-ky/lab_2/lab_2.sln b/tasks/melnikov-ky/lab_2/lab_2.sln new file mode 100644 index 0000000..e8449f5 --- /dev/null +++ b/tasks/melnikov-ky/lab_2/lab_2.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1\worker-1.csproj", "{1C85F952-D0EA-4B7A-BADF-D95E24589A96}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2\worker-2.csproj", "{7E758C59-DA3A-4A38-8DAC-37239F6602E9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1C85F952-D0EA-4B7A-BADF-D95E24589A96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C85F952-D0EA-4B7A-BADF-D95E24589A96}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C85F952-D0EA-4B7A-BADF-D95E24589A96}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C85F952-D0EA-4B7A-BADF-D95E24589A96}.Release|Any CPU.Build.0 = Release|Any CPU + {7E758C59-DA3A-4A38-8DAC-37239F6602E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E758C59-DA3A-4A38-8DAC-37239F6602E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E758C59-DA3A-4A38-8DAC-37239F6602E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E758C59-DA3A-4A38-8DAC-37239F6602E9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/tasks/melnikov-ky/lab_2/result-1/data.txt b/tasks/melnikov-ky/lab_2/result-1/data.txt new file mode 100644 index 0000000..73e7974 --- /dev/null +++ b/tasks/melnikov-ky/lab_2/result-1/data.txt @@ -0,0 +1,19 @@ +100 +22 +11 +15 +46 +23 +11 +55 +449 +78 +65 +15 +35 +11 +59 +11 +87 +465 +11 \ No newline at end of file diff --git a/tasks/melnikov-ky/lab_2/result/result.txt b/tasks/melnikov-ky/lab_2/result/result.txt new file mode 100644 index 0000000..7813681 --- /dev/null +++ b/tasks/melnikov-ky/lab_2/result/result.txt @@ -0,0 +1 @@ +5 \ No newline at end of file diff --git a/tasks/melnikov-ky/lab_2/scrins/1.png b/tasks/melnikov-ky/lab_2/scrins/1.png new file mode 100644 index 0000000..1724b6a Binary files /dev/null and b/tasks/melnikov-ky/lab_2/scrins/1.png differ diff --git a/tasks/melnikov-ky/lab_2/scrins/2.png b/tasks/melnikov-ky/lab_2/scrins/2.png new file mode 100644 index 0000000..b78d356 Binary files /dev/null and b/tasks/melnikov-ky/lab_2/scrins/2.png differ diff --git a/tasks/melnikov-ky/lab_2/scrins/3.png b/tasks/melnikov-ky/lab_2/scrins/3.png new file mode 100644 index 0000000..40c7b19 Binary files /dev/null and b/tasks/melnikov-ky/lab_2/scrins/3.png differ diff --git a/tasks/melnikov-ky/lab_2/scrins/4.png b/tasks/melnikov-ky/lab_2/scrins/4.png new file mode 100644 index 0000000..7f224ef Binary files /dev/null and b/tasks/melnikov-ky/lab_2/scrins/4.png differ diff --git a/tasks/melnikov-ky/lab_2/scrins/5.png b/tasks/melnikov-ky/lab_2/scrins/5.png new file mode 100644 index 0000000..639a85c Binary files /dev/null and b/tasks/melnikov-ky/lab_2/scrins/5.png differ diff --git a/tasks/melnikov-ky/lab_2/scrins/6.png b/tasks/melnikov-ky/lab_2/scrins/6.png new file mode 100644 index 0000000..87631bc Binary files /dev/null and b/tasks/melnikov-ky/lab_2/scrins/6.png differ diff --git a/tasks/melnikov-ky/lab_2/worker-1/Dockerfile b/tasks/melnikov-ky/lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..e4756e5 --- /dev/null +++ b/tasks/melnikov-ky/lab_2/worker-1/Dockerfile @@ -0,0 +1,18 @@ +# Задаем базовый образ на .net +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env +# Задаем рабочую директорию +WORKDIR /src + + +# Копируем файлы и папки в каталог в контейнер +COPY . ./ +# Создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:5.0 +WORKDIR /publish +COPY --from=build-env /publish . +# Вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-1.dll"] \ No newline at end of file diff --git a/tasks/melnikov-ky/lab_2/worker-1/Program.cs b/tasks/melnikov-ky/lab_2/worker-1/Program.cs new file mode 100644 index 0000000..3944408 --- /dev/null +++ b/tasks/melnikov-ky/lab_2/worker-1/Program.cs @@ -0,0 +1,48 @@ +using System; +using System.IO; + +class Program +{ + static void Main() + { + string sourceDirectoryPath = "/var/data"; + string destinationFilePath = "/var/result/data.txt"; + + try + { + DirectoryInfo sourceDirectory = new DirectoryInfo(sourceDirectoryPath); + FileInfo[] files = sourceDirectory.GetFiles(); + + if (files.Length == 0) + { + Console.WriteLine("Каталог {0} не содержит файлов.", sourceDirectoryPath); + return; + } + + // Выбираем случайный файл из каталога + Random random = new Random(); + FileInfo randomFile = files[random.Next(files.Length)]; + + // Перекладываем содержимое файла в указанный путь + File.Copy(randomFile.FullName, destinationFilePath, true); + + Console.WriteLine("Файл {0} успешно скопирован в {1}.", randomFile.FullName, destinationFilePath); + } + catch (DirectoryNotFoundException) + { + Console.WriteLine("Каталог {0} не найден.", sourceDirectoryPath); + } + catch (IOException e) + { + Console.WriteLine("Произошла ошибка при копировании файла: {0}", e.Message); + } + catch (UnauthorizedAccessException e) + { + Console.WriteLine("Отсутствует доступ к файлу: {0}", e.Message); + } + catch (ArgumentException) + { + Console.WriteLine("Путь {0} содержит недопустимые символы.", destinationFilePath); + } + } +} diff --git a/tasks/melnikov-ky/lab_2/worker-1/worker-1.csproj b/tasks/melnikov-ky/lab_2/worker-1/worker-1.csproj new file mode 100644 index 0000000..cdc17d6 --- /dev/null +++ b/tasks/melnikov-ky/lab_2/worker-1/worker-1.csproj @@ -0,0 +1,11 @@ + + + + Exe + net5.0 + worker_1 + enable + enable + + + diff --git a/tasks/melnikov-ky/lab_2/worker-2/Dockerfile b/tasks/melnikov-ky/lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..f80c2dc --- /dev/null +++ b/tasks/melnikov-ky/lab_2/worker-2/Dockerfile @@ -0,0 +1,18 @@ +# Задаем базовый образ на .net +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env +# Задаем рабочую директорию +WORKDIR /src + + +# Копируем файлы и папки в каталог в контейнер +COPY . ./ +# Создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:5.0 +WORKDIR /publish +COPY --from=build-env /publish . +# Вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-2.dll"] \ No newline at end of file diff --git a/tasks/melnikov-ky/lab_2/worker-2/Program.cs b/tasks/melnikov-ky/lab_2/worker-2/Program.cs new file mode 100644 index 0000000..324117b --- /dev/null +++ b/tasks/melnikov-ky/lab_2/worker-2/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.IO; +using System.Linq; + +class Program +{ + static void Main() + { + string inputFile = "/var/data/data.txt"; + string outputFile = "/var/result/result.txt"; + + string[] lines = File.ReadAllLines(inputFile); + int[] numbers = lines.Select(int.Parse).ToArray(); + + int minNumber = numbers.Min(); + int countOfMinNumbers = numbers.Count(n => n == minNumber); + + File.WriteAllText(outputFile, countOfMinNumbers.ToString()); + + Console.WriteLine("Количество наименьших чисел сохранено в файле: " + outputFile); + } +} \ No newline at end of file diff --git a/tasks/melnikov-ky/lab_2/worker-2/worker-2.csproj b/tasks/melnikov-ky/lab_2/worker-2/worker-2.csproj new file mode 100644 index 0000000..064becf --- /dev/null +++ b/tasks/melnikov-ky/lab_2/worker-2/worker-2.csproj @@ -0,0 +1,11 @@ + + + + Exe + net5.0 + worker_2 + enable + enable + + + diff --git a/tasks/mironov-eo/lab_1/README.md b/tasks/mironov-eo/lab_1/README.md new file mode 100644 index 0000000..a5179ad --- /dev/null +++ b/tasks/mironov-eo/lab_1/README.md @@ -0,0 +1,136 @@ +# Отчёт по лабораторной работе №1 + +Выполнил: студент гр. ИСЭбд-41 Миронов Е.О. + +## Разворачивание сервиса Redmine + +Конфигурация docker-compose для развертывания Redmine: + +```yaml +version: '3.1' +#Задаем контейнеры +services: +#Контейнер Redmine + redmine: + image: redmine #образ redmine + restart: always #Параметр перезапуска + ports: #Проброс портов + - 8082:3000 + environment: #Переменные среды + REDMINE_DB_MYSQL: db + REDMINE_DB_PASSWORD: example + REDMINE_SECRET_KEY_BASE: supersecretkey +#DB + db: + image: mysql:5.7 #образ MySql + restart: always #Параметр перезапуска + environment: #Переменные среды + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: redmine +``` + +Далее в командной строке разворачиваем сервис командой `docker-compose up`: +![](shots/1.png) + +Контейнер появился в docker desktop: +![](shots/4.png) + +Переходим на http://localhost:8082: +![](shots/2.png) + +Создаем новый проект в Redmine: +![](shots/3.png) +![](shots/5.png) +![](shots/6.png) + + +## Разворачивание сервиса Drupal +Конфигурация docker-compose для развертывания Drupal: + +```yaml +version: '3.1' + +services: + #Drupal + drupal: + image: drupal:8-apache #образ drupal + ports: #Проброс портов + - 8800:80 + volumes: #Каталоги для хранения данных контейнера + - /var/www/html/modules + - /var/www/html/profiles + - /var/www/html/themes + - /var/www/html/sites + restart: always #Параметр перезапуска + #DB + postgres: #образ postgres + image: postgres:10 + environment: #Переменные среды + POSTGRES_PASSWORD: example + restart: always #Параметр перезапуска +``` +Разворачиваем сервис командой `docker-compose up`. + +Переходим на http://localhost:8082: +![](shots/8.png) + +Задаем базовые настройки и создаем сайт: +![](shots/9.png) +![](shots/10.png) + +## Разворачивание сервиса Gitea + +Конфигурация docker-compose для развертывания Gitea: + +```yaml +version: "3" + +networks: + gitea: + external: false +services: #Описание служб + #Gitea + server: + image: gitea/gitea:1.20.4 #Образ gitea + container_name: gitea #Наименование контейнера + environment: #Переменные среды + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=mysql + - GITEA__database__HOST=db:3306 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=gitea + restart: always #Параметр перезапуска + networks: #Параметры сети + - gitea + volumes: #Каталоги для хранения данных контейнера + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: #Проброс портов + - "3000:3000" + - "222:22" + depends_on: + - db +#DB + db: + image: mysql:8 #Образ MySql + restart: always #Параметр перезапуска + environment: #Переменные среды + - MYSQL_ROOT_PASSWORD=gitea + - MYSQL_USER=gitea + - MYSQL_PASSWORD=gitea + - MYSQL_DATABASE=gitea + networks: #Параметры сети + - gitea + volumes: #Каталоги для хранения данных контейнера + - ./mysql:/var/lib/mysql +``` +Разворачиваем сервис командой `docker-compose up`. + +Переходим на http://localhost:3000: +![](shots/13.png) + +Создаем репозиторий: +![](shots/14.png) diff --git a/tasks/mironov-eo/lab_1/shots/1.png b/tasks/mironov-eo/lab_1/shots/1.png new file mode 100644 index 0000000..bace70e Binary files /dev/null and b/tasks/mironov-eo/lab_1/shots/1.png differ diff --git a/tasks/mironov-eo/lab_1/shots/10.png b/tasks/mironov-eo/lab_1/shots/10.png new file mode 100644 index 0000000..9faf3e2 Binary files /dev/null and b/tasks/mironov-eo/lab_1/shots/10.png differ diff --git a/tasks/mironov-eo/lab_1/shots/13.png b/tasks/mironov-eo/lab_1/shots/13.png new file mode 100644 index 0000000..9c83e10 Binary files /dev/null and b/tasks/mironov-eo/lab_1/shots/13.png differ diff --git a/tasks/mironov-eo/lab_1/shots/14.png b/tasks/mironov-eo/lab_1/shots/14.png new file mode 100644 index 0000000..38301f1 Binary files /dev/null and b/tasks/mironov-eo/lab_1/shots/14.png differ diff --git a/tasks/mironov-eo/lab_1/shots/2.png b/tasks/mironov-eo/lab_1/shots/2.png new file mode 100644 index 0000000..191781f Binary files /dev/null and b/tasks/mironov-eo/lab_1/shots/2.png differ diff --git a/tasks/mironov-eo/lab_1/shots/3.png b/tasks/mironov-eo/lab_1/shots/3.png new file mode 100644 index 0000000..e107e61 Binary files /dev/null and b/tasks/mironov-eo/lab_1/shots/3.png differ diff --git a/tasks/mironov-eo/lab_1/shots/4.png b/tasks/mironov-eo/lab_1/shots/4.png new file mode 100644 index 0000000..7c30a5b Binary files /dev/null and b/tasks/mironov-eo/lab_1/shots/4.png differ diff --git a/tasks/mironov-eo/lab_1/shots/5.png b/tasks/mironov-eo/lab_1/shots/5.png new file mode 100644 index 0000000..a939963 Binary files /dev/null and b/tasks/mironov-eo/lab_1/shots/5.png differ diff --git a/tasks/mironov-eo/lab_1/shots/6.png b/tasks/mironov-eo/lab_1/shots/6.png new file mode 100644 index 0000000..f9954df Binary files /dev/null and b/tasks/mironov-eo/lab_1/shots/6.png differ diff --git a/tasks/mironov-eo/lab_1/shots/8.png b/tasks/mironov-eo/lab_1/shots/8.png new file mode 100644 index 0000000..ef722ed Binary files /dev/null and b/tasks/mironov-eo/lab_1/shots/8.png differ diff --git a/tasks/mironov-eo/lab_1/shots/9.png b/tasks/mironov-eo/lab_1/shots/9.png new file mode 100644 index 0000000..8371548 Binary files /dev/null and b/tasks/mironov-eo/lab_1/shots/9.png differ diff --git a/tasks/moiseev-vv/lab_1/README.md b/tasks/moiseev-vv/lab_1/README.md index 3831958..15fa4a0 100644 --- a/tasks/moiseev-vv/lab_1/README.md +++ b/tasks/moiseev-vv/lab_1/README.md @@ -28,4 +28,4 @@ services: # Описание служб (контейнеров). ![](ready-to-play.png) -Удаляется всё командой `docker-compose down` или `docker-compose down -v`. +Удаляется всё командой `docker-compose down` или `docker-compose down -v`. \ No newline at end of file diff --git a/tasks/moiseev-vv/lab_3/.gitignore b/tasks/moiseev-vv/lab_3/.gitignore new file mode 100644 index 0000000..f20ffbc --- /dev/null +++ b/tasks/moiseev-vv/lab_3/.gitignore @@ -0,0 +1,481 @@ +## Наши данные для работы программы +result-1/ +result/ + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk diff --git a/tasks/moiseev-vv/lab_3/README.md b/tasks/moiseev-vv/lab_3/README.md new file mode 100644 index 0000000..5eac35e --- /dev/null +++ b/tasks/moiseev-vv/lab_3/README.md @@ -0,0 +1,16 @@ +TODO: тут долже быть отчёт по л/р + +Запускается из папки с этим файлом так: + +``` +docker compose up --build +``` + +В итоге по адресу можно будет видеть файл `static/index.html`, а в подкаталогах (есть ссылки с главной) запросы будут перенаправлены на воркеры внутри приложения. + +Это сделано при помощи nginx - веб-сервера, который можно тонко настроить для балансировки нагрузки, а также для простого проксирования запросов внутрь приложения. + +> См. docker-compose.yml, чтобы посмотреть, какие папки и файлы монтируются к nginx. +> Особое внимание обратите на файл `nginx.conf`. + +Также в воркере №1 делается внутренний запрос к воркеру №2 через `HttpClient`. diff --git a/tasks/moiseev-vv/lab_3/docker-compose.yml b/tasks/moiseev-vv/lab_3/docker-compose.yml new file mode 100644 index 0000000..2d5d45a --- /dev/null +++ b/tasks/moiseev-vv/lab_3/docker-compose.yml @@ -0,0 +1,15 @@ +version: "3.1" +services: + worker-1: + build: ./worker-1 + worker-2: + build: ./worker-2 + depends_on: + - worker-1 + gateway: + image: nginx:latest + ports: + - 8080:8080 + volumes: + - ./static:/usr/share/nginx/html:ro + - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro diff --git a/tasks/moiseev-vv/lab_3/nginx.conf b/tasks/moiseev-vv/lab_3/nginx.conf new file mode 100644 index 0000000..beda634 --- /dev/null +++ b/tasks/moiseev-vv/lab_3/nginx.conf @@ -0,0 +1,27 @@ +server { + listen 8080; + listen [::]:8080; + server_name localhost; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + } + + location /worker-1/ { + proxy_pass http://worker-1:80/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Prefix /worker-1; + } + + location /worker-2/ { + proxy_pass http://worker-2:80/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Prefix /worker-2; + } +} + diff --git a/tasks/moiseev-vv/lab_3/static/index.html b/tasks/moiseev-vv/lab_3/static/index.html new file mode 100644 index 0000000..20acc3f --- /dev/null +++ b/tasks/moiseev-vv/lab_3/static/index.html @@ -0,0 +1,13 @@ + + + + + + Тестовое приложение для л/р 3 + + +

Именно этот файл вы видите, когда открываете приложение.

+

Отправить запрос к worker-1

+

Отправить запрос к worker-2

+ + \ No newline at end of file diff --git a/tasks/moiseev-vv/lab_3/worker-1/Dockerfile b/tasks/moiseev-vv/lab_3/worker-1/Dockerfile new file mode 100644 index 0000000..6b79350 --- /dev/null +++ b/tasks/moiseev-vv/lab_3/worker-1/Dockerfile @@ -0,0 +1,11 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env +WORKDIR /app + +COPY . ./ +RUN dotnet restore +RUN dotnet publish -c Release -o out + +FROM mcr.microsoft.com/dotnet/aspnet:7.0 +WORKDIR /app +COPY --from=build-env /app/out . +ENTRYPOINT ["dotnet", "worker-1.dll"] diff --git a/tasks/moiseev-vv/lab_3/worker-1/Program.cs b/tasks/moiseev-vv/lab_3/worker-1/Program.cs new file mode 100644 index 0000000..7be4d2e --- /dev/null +++ b/tasks/moiseev-vv/lab_3/worker-1/Program.cs @@ -0,0 +1,15 @@ +var builder = WebApplication.CreateBuilder(args); +var app = builder.Build(); + +app.MapGet("/", async () => +{ + var result = "Hello World 1!"; + + var httpClient = new HttpClient(); + var secondWorkerResponse = await httpClient.GetStringAsync("http://worker-2:80/"); + result += " Response from worker-2: " + secondWorkerResponse; + + return result; +}); + +app.Run(); diff --git a/tasks/moiseev-vv/lab_3/worker-1/Properties/launchSettings.json b/tasks/moiseev-vv/lab_3/worker-1/Properties/launchSettings.json new file mode 100644 index 0000000..d8ad1fb --- /dev/null +++ b/tasks/moiseev-vv/lab_3/worker-1/Properties/launchSettings.json @@ -0,0 +1,37 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:60211", + "sslPort": 44396 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5144", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7197;http://localhost:5144", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/tasks/moiseev-vv/lab_3/worker-1/appsettings.json b/tasks/moiseev-vv/lab_3/worker-1/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/tasks/moiseev-vv/lab_3/worker-1/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/tasks/moiseev-vv/lab_3/worker-1/worker-1.csproj b/tasks/moiseev-vv/lab_3/worker-1/worker-1.csproj new file mode 100644 index 0000000..d0be0af --- /dev/null +++ b/tasks/moiseev-vv/lab_3/worker-1/worker-1.csproj @@ -0,0 +1,11 @@ + + + + Exe + net7.0 + worker_1 + enable + enable + + + diff --git a/tasks/moiseev-vv/lab_3/worker-2/Dockerfile b/tasks/moiseev-vv/lab_3/worker-2/Dockerfile new file mode 100644 index 0000000..a76c7c2 --- /dev/null +++ b/tasks/moiseev-vv/lab_3/worker-2/Dockerfile @@ -0,0 +1,11 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env +WORKDIR /app + +COPY . ./ +RUN dotnet restore +RUN dotnet publish -c Release -o out + +FROM mcr.microsoft.com/dotnet/aspnet:7.0 +WORKDIR /app +COPY --from=build-env /app/out . +ENTRYPOINT ["dotnet", "worker-2.dll"] diff --git a/tasks/moiseev-vv/lab_3/worker-2/Program.cs b/tasks/moiseev-vv/lab_3/worker-2/Program.cs new file mode 100644 index 0000000..5eb0946 --- /dev/null +++ b/tasks/moiseev-vv/lab_3/worker-2/Program.cs @@ -0,0 +1,6 @@ +var builder = WebApplication.CreateBuilder(args); +var app = builder.Build(); + +app.MapGet("/", () => "Hello World 2!"); + +app.Run(); diff --git a/tasks/moiseev-vv/lab_3/worker-2/Properties/launchSettings.json b/tasks/moiseev-vv/lab_3/worker-2/Properties/launchSettings.json new file mode 100644 index 0000000..d8ad1fb --- /dev/null +++ b/tasks/moiseev-vv/lab_3/worker-2/Properties/launchSettings.json @@ -0,0 +1,37 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:60211", + "sslPort": 44396 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5144", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7197;http://localhost:5144", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/tasks/moiseev-vv/lab_3/worker-2/appsettings.json b/tasks/moiseev-vv/lab_3/worker-2/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/tasks/moiseev-vv/lab_3/worker-2/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/tasks/moiseev-vv/lab_3/worker-2/worker-2.csproj b/tasks/moiseev-vv/lab_3/worker-2/worker-2.csproj new file mode 100644 index 0000000..eeab1fb --- /dev/null +++ b/tasks/moiseev-vv/lab_3/worker-2/worker-2.csproj @@ -0,0 +1,11 @@ + + + + Exe + net7.0 + worker_2 + enable + enable + + + diff --git a/tasks/mutriskov-ds/lab_1/README.md b/tasks/mutriskov-ds/lab_1/README.md new file mode 100644 index 0000000..72f0bc3 --- /dev/null +++ b/tasks/mutriskov-ds/lab_1/README.md @@ -0,0 +1,143 @@ +# Отчёт по лабораторной работе №1 + +Выполнил: студент гр. ИСЭбд-41 Мутрисков Д.С. + +## Разворачивание сервиса WordPress + +Содержимое файла `docker-compose.yml` в папке Wordpress: + +```yaml +version: '3.1' +#Задаем контейнеры +services: +#Контейнер Wordpress + wordpress: + image: wordpress #образ + restart: always + ports: #Порт, на котором запускаем + - 8080:80 + environment: #настройки БД вордпресса для подключения к серверу + WORDPRESS_DB_HOST: db + WORDPRESS_DB_USER: user + WORDPRESS_DB_PASSWORD: userpass + WORDPRESS_DB_NAME: mydb + volumes: #Каталог хранения файлов сервиса + - wordpress:/var/www/html + + #Контейнер MySQL + db: + image: mysql:5.7 #Образ и его версия через ':' + restart: always + environment: #Настройка БД для подключения + MYSQL_DATABASE: mydb + MYSQL_USER: user + MYSQL_PASSWORD: userpass + MYSQL_RANDOM_ROOT_PASSWORD: '1' + volumes: #Каталог хранения данных БД + - db:/var/lib/mysql + +#Каталоги в контейнере +volumes: + wordpress: + db: +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up`: +![](images/cmd_docker-compose_WorpPress.png) + +Открываем Docker Desktop и проверяем, что контейнер сервера базы данных и MediaWiki созданы и запущены: +![](images/docker_container_Wordpress.png) + +Переходим на http://localhost:8080: +![](images/example_wordpress.png) + +Видим что сервис работает + +## Разворачивание сервиса Redmine + +Содержимое файла `docker-compose.yml` в папке Redmine: + +```yaml +version: '3.1' +#Контейнеры +services: + #Контейнер redmine + redmine: + image: redmine #Образ + restart: always + ports: + - 8080:3000 + environment: + REDMINE_DB_MYSQL: db + REDMINE_DB_PASSWORD: example + REDMINE_SECRET_KEY_BASE: supersecretkey + #Контейнер БД + db: + image: mysql:5.7 + restart: always + environment: + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: redmine +``` +Далее в командной строке разворачиваем сервис командой `docker-compose -f docker-compose.yml up`: +![](images/cmd_docker-compose_Redmine.png) + +В Docker Desktop проверяем, что сервис работает: +![](images/docker_container_Redmine.png) + +Переходим на http://localhost:8080: +![](images/example_redmine.png) + +Видим что сервис работает + +## Разворачивание сервиса mediawiki + +Содержимое файла `docker-compose.yml` в папке mediawiki: + +```yaml +version: '3' +#Контейнеры +services: + #Контейнер mediawiki + mediawiki: + image: mediawiki #Образ + restart: always + ports: + - 8080:80 + links: + - database + volumes: + - images:/var/www/html/images + #Контейнер БД + database: + image: mariadb #Образ + restart: always + environment: + MYSQL_DATABASE: my_wiki + MYSQL_USER: wikiuser + MYSQL_PASSWORD: example + MYSQL_RANDOM_ROOT_PASSWORD: 'yes' + volumes: + - db:/var/lib/mysql +#Каталоги в контейнере +volumes: + images: + db: +``` +Далее в командной строке разворачиваем сервис командой `docker-compose -f docker-compose.yml up`: +![](images/cdm_docker-compose_MediaWiki.png) + +В Docker Desktop проверяем, что работают все три развернутых сервиса: +![](images/docker_container_MediaWiki.png) + +Переходим на http://localhost:8080: +![](images/example_mediawiki.png) + +Устанавливаем сервис +![](images/install_mediawiki.png) + +Подключаемся к БД +![](images/install_mediawiki1.png) +И получаем ответ, что мы не можем этого сделать без подтверждения учетной записи админом. + +Убеждаемся что сервис работает: +![](images/install_mediawiki2.png) \ No newline at end of file diff --git a/tasks/mutriskov-ds/lab_1/images/cmd_docker-compose_Mediawiki.png b/tasks/mutriskov-ds/lab_1/images/cmd_docker-compose_Mediawiki.png new file mode 100644 index 0000000..6ffcacd Binary files /dev/null and b/tasks/mutriskov-ds/lab_1/images/cmd_docker-compose_Mediawiki.png differ diff --git a/tasks/mutriskov-ds/lab_1/images/cmd_docker-compose_Redmine.png b/tasks/mutriskov-ds/lab_1/images/cmd_docker-compose_Redmine.png new file mode 100644 index 0000000..aa980e1 Binary files /dev/null and b/tasks/mutriskov-ds/lab_1/images/cmd_docker-compose_Redmine.png differ diff --git a/tasks/mutriskov-ds/lab_1/images/cmd_docker-compose_WorpPress.png b/tasks/mutriskov-ds/lab_1/images/cmd_docker-compose_WorpPress.png new file mode 100644 index 0000000..66c870f Binary files /dev/null and b/tasks/mutriskov-ds/lab_1/images/cmd_docker-compose_WorpPress.png differ diff --git a/tasks/mutriskov-ds/lab_1/images/docker_container_MediaWiki.png b/tasks/mutriskov-ds/lab_1/images/docker_container_MediaWiki.png new file mode 100644 index 0000000..8fa1d1a Binary files /dev/null and b/tasks/mutriskov-ds/lab_1/images/docker_container_MediaWiki.png differ diff --git a/tasks/mutriskov-ds/lab_1/images/docker_container_Redmine.png b/tasks/mutriskov-ds/lab_1/images/docker_container_Redmine.png new file mode 100644 index 0000000..1d879f8 Binary files /dev/null and b/tasks/mutriskov-ds/lab_1/images/docker_container_Redmine.png differ diff --git a/tasks/mutriskov-ds/lab_1/images/docker_container_Wordpress.png b/tasks/mutriskov-ds/lab_1/images/docker_container_Wordpress.png new file mode 100644 index 0000000..ab3d143 Binary files /dev/null and b/tasks/mutriskov-ds/lab_1/images/docker_container_Wordpress.png differ diff --git a/tasks/mutriskov-ds/lab_1/images/example_mediawiki.png b/tasks/mutriskov-ds/lab_1/images/example_mediawiki.png new file mode 100644 index 0000000..120e072 Binary files /dev/null and b/tasks/mutriskov-ds/lab_1/images/example_mediawiki.png differ diff --git a/tasks/mutriskov-ds/lab_1/images/example_redmine.png b/tasks/mutriskov-ds/lab_1/images/example_redmine.png new file mode 100644 index 0000000..779eab4 Binary files /dev/null and b/tasks/mutriskov-ds/lab_1/images/example_redmine.png differ diff --git a/tasks/mutriskov-ds/lab_1/images/example_wordpress.png b/tasks/mutriskov-ds/lab_1/images/example_wordpress.png new file mode 100644 index 0000000..54ee48d Binary files /dev/null and b/tasks/mutriskov-ds/lab_1/images/example_wordpress.png differ diff --git a/tasks/mutriskov-ds/lab_1/images/install_mediawiki.png b/tasks/mutriskov-ds/lab_1/images/install_mediawiki.png new file mode 100644 index 0000000..ca8c6a1 Binary files /dev/null and b/tasks/mutriskov-ds/lab_1/images/install_mediawiki.png differ diff --git a/tasks/mutriskov-ds/lab_1/images/install_mediawiki1.png b/tasks/mutriskov-ds/lab_1/images/install_mediawiki1.png new file mode 100644 index 0000000..c3a2264 Binary files /dev/null and b/tasks/mutriskov-ds/lab_1/images/install_mediawiki1.png differ diff --git a/tasks/mutriskov-ds/lab_1/images/install_mediawiki2.png b/tasks/mutriskov-ds/lab_1/images/install_mediawiki2.png new file mode 100644 index 0000000..cf5900d Binary files /dev/null and b/tasks/mutriskov-ds/lab_1/images/install_mediawiki2.png differ diff --git a/tasks/mytarin_es/lab2/.gitignore b/tasks/mytarin_es/lab2/.gitignore new file mode 100644 index 0000000..154e127 --- /dev/null +++ b/tasks/mytarin_es/lab2/.gitignore @@ -0,0 +1,477 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk diff --git a/tasks/mytarin_es/lab2/README.md b/tasks/mytarin_es/lab2/README.md new file mode 100644 index 0000000..c933d7d --- /dev/null +++ b/tasks/mytarin_es/lab2/README.md @@ -0,0 +1,77 @@ +# Отчёт по лабораторной работе №2 + +Выполнил: студент гр. ИСЭбд-41 Мытарин Е.С. + +Вариант программы 1: Ищет в каталоге /var/data самый большой по объёму файл и перекладывает его в /var/result/data.txt. + +Вариант программы 2: Сохраняет произведение первого и последнего числа из файла /var/data/data.txt в /var/result/result.txt. + +## Создание приложений + +Создадим 2 приложения. +Был выбран язык C# и технология .NET 7. + +Для создания обычных консольных приложений воспользуемся командами: + +```sh +dotnet new console -o worker-1 +dotnet new console -o worker-2 +``` + +Согласно варианту, программа 1 должна брать все файлы из папки `/var/data`, считывать длину их названия, найти минимальное и переложить его в папку `/var/result`. + +[Исходный текст программы worker-1](worker-1/Program.cs) + +Согласно варианту программа 2 должна брать строки из папки `/var/data/` с скопированным файлом, пытаться привести их к числам, затем найти минимальное из них. +Далее найти количество вхождений этого числа и результат записать в файл `/var/result/result.txt`. + +[Исходный текст программы worker-2](worker-2/Program.cs) + +Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего. + +## Настройка окружения + +Для связи двух приложений воспользуемся следующей схемой: + +1. Каталог `./data` должен быть примонтирован в каталог `/var/data` для программы 1. + Оттуда будут браться исходные данные. +2. Каталог `./result-1` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складываться промежуточные данные. +3. Каталог `./result-1` также должен быть примонтирован в каталог `/var/data` для программы 2. + Оттуда будут браться промежуточные результаты. +4. Каталог `./result` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складывать результаты финальной обработки. + +Для каждой программы были созданы файлы Dockerfile ([программа 1](worker-1/Dockerfile), [программа 2](worker-1/Dockerfile)) с подробным описанием процесса сборки. + +Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения. + +Дополнительно был создан файл [.dockerignore](.dockerignore) и дополнен [.gitignore](.gitignore), чтобы исключить для сборки и коммита всё лишнее. + +## Сборка и запуск + +В каталог `./data` помещены 2 файла с различным объемом. + +![](im1.PNG) + +В процессе выполнения программа должна перенести содержимое файла data.txt из каталога /data в /result (т.к. он меньше по объему) и выдать результат произведения первого и последнего числа этого файла. +![](image1.PNG) + +Для запуска приложения необходимо ввести команду `docker compose up --build`. +Результат запуска после сборки: + +``` +[+] Running 2/2 + ✔ Container lab_2-worker-1-1 Created 0.0s + ✔ Container lab_2-worker-2-1 Created 0.1s +Attaching to lab2-worker-1-1, lab2-worker-2-1 +lab2-worker-1-1 | Программа 1 завершена +lab2-worker-1-1 exited with code 0 +lab2-worker-2-1 | Программа 2 завершена +lab2-worker-2-1 | Результат: 30 +lab2-worker-2-1 exited with code 0 +``` + +В результате в каталоге `./result` в файл `result.txt` было записано число 30. + +Изменение значений в файлах из каталога `./data` также изменяет содержимое в файлах из каталогов `./result-1` и `./result`. \ No newline at end of file diff --git a/tasks/mytarin_es/lab2/data/copy.txt b/tasks/mytarin_es/lab2/data/copy.txt new file mode 100644 index 0000000..665fbc1 --- /dev/null +++ b/tasks/mytarin_es/lab2/data/copy.txt @@ -0,0 +1,3 @@ +6 +6677 +342 \ No newline at end of file diff --git a/tasks/mytarin_es/lab2/data/data.txt b/tasks/mytarin_es/lab2/data/data.txt new file mode 100644 index 0000000..3115917 --- /dev/null +++ b/tasks/mytarin_es/lab2/data/data.txt @@ -0,0 +1,9 @@ +6 +2 +7 +29 +23 +56 +1 +62 +5 \ No newline at end of file diff --git a/tasks/mytarin_es/lab2/docker-compose.yml b/tasks/mytarin_es/lab2/docker-compose.yml new file mode 100644 index 0000000..84b0b75 --- /dev/null +++ b/tasks/mytarin_es/lab2/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3.1" +services: + worker-1: + build: ./worker-1 #сборка образа + volumes: + # Монтирует локальную папку data к папке data в контейнере. + - ./data:/var/data + # Монтирует локальную папку result-1 к папке result в контейнере. + - ./result-1:/var/result + worker-2: + build: ./worker-2 + volumes: + # Монтирует локальную папку result-1 к папке data в контейнере. + - ./result-1:/var/data + - ./result:/var/result + # Зависимость от первого приложения. + depends_on: #зависимости + - worker-1 \ No newline at end of file diff --git a/tasks/mytarin_es/lab2/im1.png b/tasks/mytarin_es/lab2/im1.png new file mode 100644 index 0000000..4d922fa Binary files /dev/null and b/tasks/mytarin_es/lab2/im1.png differ diff --git a/tasks/mytarin_es/lab2/lab2.sln b/tasks/mytarin_es/lab2/lab2.sln new file mode 100644 index 0000000..b015262 --- /dev/null +++ b/tasks/mytarin_es/lab2/lab2.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1\worker-1.csproj", "{585B6726-A235-4057-896C-EDE6731C6AC6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2\worker-2.csproj", "{1CCB3B9E-92BA-413B-825A-34BCE1482729}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {585B6726-A235-4057-896C-EDE6731C6AC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {585B6726-A235-4057-896C-EDE6731C6AC6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {585B6726-A235-4057-896C-EDE6731C6AC6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {585B6726-A235-4057-896C-EDE6731C6AC6}.Release|Any CPU.Build.0 = Release|Any CPU + {1CCB3B9E-92BA-413B-825A-34BCE1482729}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1CCB3B9E-92BA-413B-825A-34BCE1482729}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1CCB3B9E-92BA-413B-825A-34BCE1482729}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1CCB3B9E-92BA-413B-825A-34BCE1482729}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/tasks/mytarin_es/lab2/result-1/data.txt b/tasks/mytarin_es/lab2/result-1/data.txt new file mode 100644 index 0000000..3115917 --- /dev/null +++ b/tasks/mytarin_es/lab2/result-1/data.txt @@ -0,0 +1,9 @@ +6 +2 +7 +29 +23 +56 +1 +62 +5 \ No newline at end of file diff --git a/tasks/mytarin_es/lab2/result/result.txt b/tasks/mytarin_es/lab2/result/result.txt new file mode 100644 index 0000000..64bb6b7 --- /dev/null +++ b/tasks/mytarin_es/lab2/result/result.txt @@ -0,0 +1 @@ +30 diff --git a/tasks/mytarin_es/lab2/worker-1/Dockerfile b/tasks/mytarin_es/lab2/worker-1/Dockerfile new file mode 100644 index 0000000..6cb925a --- /dev/null +++ b/tasks/mytarin_es/lab2/worker-1/Dockerfile @@ -0,0 +1,16 @@ +#задаем базовый образ на .net 7.0 +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env +#задаем рабочую директорию +WORKDIR /src +#в каталог копируем файлы и папки в контейнер +COPY *.csproj . +#создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:7.0 as runtime +WORKDIR /publish +COPY --from=build-env /publish . +#вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-1.dll"] \ No newline at end of file diff --git a/tasks/mytarin_es/lab2/worker-1/Program.cs b/tasks/mytarin_es/lab2/worker-1/Program.cs new file mode 100644 index 0000000..b0af691 --- /dev/null +++ b/tasks/mytarin_es/lab2/worker-1/Program.cs @@ -0,0 +1,38 @@ +using System.Text; + +string[] f = Directory.GetFiles("../var/data"); + +string maxPath = ""; + +long maxCapacity = 0; + +foreach (var path in f) +{ + FileInfo info = new FileInfo(path); + + if (info.Length > maxCapacity) + { + maxCapacity = info.Length; + + maxPath = path; + } +} +using (FileStream stream_read = File.OpenRead(maxPath)) +{ + byte[] bufffer_read = new byte[stream_read.Length]; + + await stream_read.ReadAsync(bufffer_read, 0, bufffer_read.Length); + + string text = Encoding.Default.GetString(bufffer_read); + + using (FileStream stream_write = new FileStream("../var/result/data.txt", FileMode.OpenOrCreate)) + { + stream_write.SetLength(0); + + byte[] buffer_write = Encoding.Default.GetBytes(text); + + await stream_write.WriteAsync(buffer_write, 0, buffer_write.Length); + } +} + +Console.WriteLine("Программа 1 завершена"); \ No newline at end of file diff --git a/tasks/mytarin_es/lab2/worker-1/worker-1.csproj b/tasks/mytarin_es/lab2/worker-1/worker-1.csproj new file mode 100644 index 0000000..93ad7da --- /dev/null +++ b/tasks/mytarin_es/lab2/worker-1/worker-1.csproj @@ -0,0 +1,11 @@ + + + + Exe + net7.0 + worker_1 + enable + enable + + + diff --git a/tasks/mytarin_es/lab2/worker-2/Dockerfile b/tasks/mytarin_es/lab2/worker-2/Dockerfile new file mode 100644 index 0000000..6e7c79c --- /dev/null +++ b/tasks/mytarin_es/lab2/worker-2/Dockerfile @@ -0,0 +1,16 @@ +#задаем базовый образ на .net 7.0 +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env +#задаем рабочую директорию +WORKDIR /src +#в каталог копируем файлы и папки в контейнер +COPY *.csproj . +#создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:7.0 as runtime +WORKDIR /publish +COPY --from=build-env /publish . +#вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-2.dll"] \ No newline at end of file diff --git a/tasks/mytarin_es/lab2/worker-2/Program.cs b/tasks/mytarin_es/lab2/worker-2/Program.cs new file mode 100644 index 0000000..e01b220 --- /dev/null +++ b/tasks/mytarin_es/lab2/worker-2/Program.cs @@ -0,0 +1,32 @@ +string[] lines = File.ReadAllLines("../var/data/data.txt"); + +int firstNumber = 0; +int lastNumber = 0; + +foreach (string line in lines) +{ + if (int.TryParse(line, out int number)) + { + firstNumber = number; + break; + } +} + +for (int i = lines.Length - 1; i >= 0; i--) +{ + if (int.TryParse(lines[i], out int number)) + { + lastNumber = number; + break; + } +} + +int itog = firstNumber * lastNumber; + +using (StreamWriter writer = new StreamWriter("../var/result/result.txt")) +{ + writer.WriteLine(itog); +} + +Console.WriteLine("Программа 2 завершена"); +Console.WriteLine("Результат: " + itog); \ No newline at end of file diff --git a/tasks/mytarin_es/lab2/worker-2/worker-2.csproj b/tasks/mytarin_es/lab2/worker-2/worker-2.csproj new file mode 100644 index 0000000..b90f9cb --- /dev/null +++ b/tasks/mytarin_es/lab2/worker-2/worker-2.csproj @@ -0,0 +1,11 @@ + + + + Exe + net7.0 + worker_2 + enable + enable + + + diff --git a/tasks/nikiforova-ts/Lab_1/Readme.md b/tasks/nikiforova-ts/Lab_1/Readme.md new file mode 100644 index 0000000..815e92a --- /dev/null +++ b/tasks/nikiforova-ts/Lab_1/Readme.md @@ -0,0 +1,124 @@ +# Отчёт по лабораторной работе №1 +Выполнил: студентка гр. ИСЭбд-41 Никифорова Татьяна Сергеевна. + +## Разворачивание сервера mediawiki + +![](/photo/photo7.png) + +Содержимое файла docker-compose.yml: +```yam +version: '3' +services: + mediawiki: + image: mediawiki # Используемый образ Mediawiki + restart: always # Всегда перезапускать контейнер при остановке + ports: + - 8080:80 # Проброс портов: внешний порт 8080 к внутреннему порту 80 контейнера + links: + - database # Связь с сервисом "database" + volumes: + - images:/var/www/html/images # Монтирование тома для хранения изображений + - ./LocalSettings.php:/var/www/html/LocalSettings.php # Монтирование файла конфигурации LocalSettings.php + database: + image: mariadb # Используемый образ MariaDB + restart: always # Всегда перезапускать контейнер при остановке + environment: + MYSQL_DATABASE: my_wiki # Имя базы данных MariaDB + MYSQL_USER: wikiuser # Имя пользователя базы данных MariaDB + MYSQL_PASSWORD: example # Пароль пользователя базы данных MariaDB + MYSQL_RANDOM_ROOT_PASSWORD: 'yes' # Генерировать случайный пароль для root пользователя MariaDB + volumes: + - db:/var/lib/mysql # Монтирование тома для хранения данных базы данных MariaDB +volumes: + images: # Определение тома "images" для хранения изображений Mediawiki + db: # Определение тома "db" для хранения данных базы данных MariaDB +``` +Разворачивается командой docker-compose up. + + +![](/photo/photo1.jpg) +![](/photo/photo2.jpg) +![](/photo/photo3.jpg) + +## Разворачивание сервера wordpress +```yam +version: '3' +services: + wordpress: + image: wordpress # Используемый образ Docker для WordPress + container_name: wordpress # Имя контейнера WordPress + ports: + - '8081:80' # Проброс портов: внешний порт 8081 к внутреннему порту 80 контейнера + environment: + WORDPRESS_DB_HOST: mysql # Имя хоста базы данных MySQL + WORDPRESS_DB_USER: wp_user # Имя пользователя базы данных WordPress + WORDPRESS_DB_PASSWORD: wp_password # Пароль пользователя базы данных WordPress + WORDPRESS_DB_NAME: wp_database # Имя базы данных WordPress + volumes: + - wordpress_data:/var/www/html # Монтирование тома для хранения данных WordPress + networks: + - wordpress-network # Использование сети "wordpress-network" для связи + + mysql: + image: mysql:5.7 # Используемый образ Docker для MySQL + container_name: mysql # Имя контейнера MySQL + environment: + MYSQL_ROOT_PASSWORD: root_password # Пароль для root пользователя MySQL + MYSQL_DATABASE: wp_database # Имя базы данных MySQL + MYSQL_USER: wp_user # Имя пользователя MySQL для WordPress + MYSQL_PASSWORD: wp_password # Пароль пользователя MySQL для WordPress + volumes: + - mysql_data:/var/lib/mysql # Монтирование тома для хранения данных MySQL + networks: + - wordpress-network # Использование сети "wordpress-network" для связи +networks: + wordpress-network: # Определение сети "wordpress-network" для связи между контейнерами +volumes: + wordpress_data: # Определение тома данных "wordpress_data" для хранения данных WordPress + mysql_data: # Определение тома данных "mysql_data" для хранения данных MySQL +``` +![](/photo/photo4.jpg) + +## Разворачивание сервера redmine +Содержимое файла docker-compose.yml: +```yam +version: '2' +services: + mariadb: # Определение сервиса MariaDB + image: docker.io/bitnami/mariadb:11.0 # Используемый образ MariaDB + volumes: + - 'mariadb_data:/bitnami/mariadb' # Монтирование тома для данных MariaDB + environment: + # ALLOW_EMPTY_PASSWORD is recommended only for development. + - ALLOW_EMPTY_PASSWORD=yes # Разрешение использовать пустой пароль (рекомендуется только для разработки). + - MARIADB_USER=bn_redmine # Имя пользователя базы данных MariaDB + - MARIADB_DATABASE=bitnami_redmine # Имя базы данных MariaDB + + redmine: # Определение сервиса Redmine + image: docker.io/bitnami/redmine:5 # Используемый образ Redmine + ports: + - '3000:3000' # Проброс портов: внешний порт 3000 к внутреннему порту 3000 + volumes: + - 'redmine_data:/bitnami/redmine' # Монтирование тома для данных Redmine + depends_on: + - mariadb # Зависимость от сервиса MariaDB (Redmine будет запущен только после MariaDB) + environment: + # ALLOW_EMPTY_PASSWORD is recommended only for development. + - ALLOW_EMPTY_PASSWORD=yes # Разрешение использовать пустой пароль (рекомендуется только для разработки). + - REDMINE_DATABASE_HOST=mariadb # Имя хоста базы данных MariaDB + - REDMINE_DATABASE_PORT_NUMBER=3306 # Порт базы данных MariaDB + - REDMINE_DATABASE_USER=bn_redmine # Имя пользователя базы данных Redmine + - REDMINE_DATABASE_NAME=bitnami_redmine # Имя базы данных Redmine +volumes: + mariadb_data: # Определение тома mariadb_data + driver: local # Использование локального драйвера для хранения данных на хосте + redmine_data: # Определение тома redmine_data + driver: local # Использование локального драйвера для хранения данных на хосте +``` + +![](/photo/photo6.jpg) +![](/photo/photo5.phg) + + + + diff --git a/tasks/nikiforova-ts/Lab_1/photo/photo1.jpg b/tasks/nikiforova-ts/Lab_1/photo/photo1.jpg new file mode 100644 index 0000000..04e9a63 Binary files /dev/null and b/tasks/nikiforova-ts/Lab_1/photo/photo1.jpg differ diff --git a/tasks/nikiforova-ts/Lab_1/photo/photo2.jpg b/tasks/nikiforova-ts/Lab_1/photo/photo2.jpg new file mode 100644 index 0000000..e153de9 Binary files /dev/null and b/tasks/nikiforova-ts/Lab_1/photo/photo2.jpg differ diff --git a/tasks/nikiforova-ts/Lab_1/photo/photo3.jpg b/tasks/nikiforova-ts/Lab_1/photo/photo3.jpg new file mode 100644 index 0000000..6dbf443 Binary files /dev/null and b/tasks/nikiforova-ts/Lab_1/photo/photo3.jpg differ diff --git a/tasks/nikiforova-ts/Lab_1/photo/photo4.jpg b/tasks/nikiforova-ts/Lab_1/photo/photo4.jpg new file mode 100644 index 0000000..7630598 Binary files /dev/null and b/tasks/nikiforova-ts/Lab_1/photo/photo4.jpg differ diff --git a/tasks/nikiforova-ts/Lab_1/photo/photo5.png b/tasks/nikiforova-ts/Lab_1/photo/photo5.png new file mode 100644 index 0000000..852e4f0 Binary files /dev/null and b/tasks/nikiforova-ts/Lab_1/photo/photo5.png differ diff --git a/tasks/nikiforova-ts/Lab_1/photo/photo6.jpg b/tasks/nikiforova-ts/Lab_1/photo/photo6.jpg new file mode 100644 index 0000000..1614be0 Binary files /dev/null and b/tasks/nikiforova-ts/Lab_1/photo/photo6.jpg differ diff --git a/tasks/nikiforova-ts/Lab_1/photo/photo7.png b/tasks/nikiforova-ts/Lab_1/photo/photo7.png new file mode 100644 index 0000000..e804af5 Binary files /dev/null and b/tasks/nikiforova-ts/Lab_1/photo/photo7.png differ diff --git a/tasks/ostrovskaya-sf/lab_1/README.md b/tasks/ostrovskaya-sf/lab_1/README.md new file mode 100644 index 0000000..01b5e02 --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_1/README.md @@ -0,0 +1,161 @@ +# Отчет по лабораторной работе №1 + +Выполнила: студентка гр. ИСЭбд-41 Островская С.Ф. + +## Разворачивание сервиса GITEA + +Содержимое файла `docker-compose.yml` в папке Gitea: + +```yaml +version: "3" +#задаем контейнеры +networks: + gitea: + external: false +#контейнер gitea (для запуска сервиса) +services: + server: + image: gitea/gitea:1.20.4 #образ gitea и версия + container_name: gitea #имя контейнера + environment: #настройки бд для подключения к серверу + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=mysql + - GITEA__database__HOST=db:3306 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=gitea + restart: always #параметр перезапуска + networks: #параметр сети + - gitea + volumes: #разделы для хранения данных контейнера + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: #порты + - "3000:3000" + - "222:22" + depends_on: + - db +#контейнер mysql (БД) + db: + image: mysql:8 #образ mysql и версия + restart: always #параметр перезапуска + environment: #подлкючение каталога с бд + - MYSQL_ROOT_PASSWORD=gitea + - MYSQL_USER=gitea + - MYSQL_PASSWORD=gitea + - MYSQL_DATABASE=gitea + networks: #параметр сети + - gitea + volumes: #раздел для хранения данных БД + - ./mysql:/var/lib/mysql +``` +Открываем консоль и разворачиваем сервис командой `docker-compose up -d`: +![](pic/pic1.jpg) + +Открываем Docker Desktop и проверяем, что контейнер сервера базы данных и Gitea: созданы и запущены: +![](pic/pic2.jpg) + +Переходим на http://localhost:3000: +![](pic/pic3.jpg) + +Регистрируемся на Gitea: +![](pic/pic4.jpg) + +## Разворачивание сервиса WORDPRESS + +Содержимое файла `docker-compose.yml` в папке Wordpress: + +```yaml +version: '3.1' +#задаем контейнеры +services: +#контейнер wordpress (для запуска сервиса) + wordpress: + image: wordpress #образ wordpress + restart: always #параметр перезапуска + ports: #порт + - 7777:80 + environment: #настройки бд для подключения к серверу + WORDPRESS_DB_HOST: database + WORDPRESS_DB_USER: user + WORDPRESS_DB_PASSWORD: password + WORDPRESS_DB_NAME: name_database + volumes: #разделы для хранения данных контейнера + - wordpress:/var/www/html +#контейнер mysql (БД) + database: + image: mysql:5.7 #образ mysql и версия + restart: always #параметр перезапуска + environment: #подлкючение каталога с бд + MYSQL_DATABASE: name_database + MYSQL_USER: user + MYSQL_PASSWORD: password + MYSQL_RANDOM_ROOT_PASSWORD: '12345' + volumes: #раздел для хранения данных БД + - database:/var/lib/mysql +volumes: + wordpress: + database: +``` +Открываем консоль и разворачиваем сервис командой `docker-compose up -d`: +![](pic/pic5.jpg) + +Открываем Docker Desktop и проверяем, что контейнер сервера базы данных и Wordpress: созданы и запущены: +![](pic/pic16.jpg) + +Переходим на http://localhost:7777: +![](pic/pic6.jpg) + +Регистрируемся на Wordpress: +![](pic/pic7.jpg) +![](pic/pic8.jpg) +![](pic/pic9.jpg) + +## Разворачивание сервиса REDMINE + +Содержимое файла `docker-compose.yml` в папке Redmine: + +```yaml +version: '3.1' +#задаем контейнеры +services: +#контейнер redmine (для запуска сервиса) + redmine: + image: redmine #образ redmine + restart: always #параметр перезапуска + ports: #порт + - 8080:3000 + environment: #настройки подключения к бд + REDMINE_DB_MYSQL: db + REDMINE_DB_PASSWORD: example + REDMINE_SECRET_KEY_BASE: supersecretkey + + db: + image: mysql:5.7 #образ mysql и версия + restart: always #параметр перезапуска + environment: #настойки бд + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: redmine +``` +Открываем консоль и разворачиваем сервис командой `docker-compose up -d`: +![](pic/pic10.jpg) + +Открываем Docker Desktop и проверяем, что контейнер сервера базы данных и Redmine: созданы и запущены: +![](pic/pic16.jpg) + +Переходим на http://localhost:8080: +![](pic/pic11.jpg) + +Регистрируемся: +![](pic/pic12.jpg) + +Пытаемся авторизоваться и видим сообщение о том, что необходимо подтверждение админа, чтобы войти: +![](pic/pic13.jpg) + +Заходим в качестве администратора и разрешаем доступ для пользователя: +![](pic/pic14.jpg) + +Теперь заходим под созданным пользователем: +![](pic/pic15.jpg) diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic1.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic1.jpg new file mode 100644 index 0000000..ac007dc Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic1.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic10.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic10.jpg new file mode 100644 index 0000000..f3217e3 Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic10.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic11.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic11.jpg new file mode 100644 index 0000000..d3803c5 Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic11.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic12.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic12.jpg new file mode 100644 index 0000000..7218e0f Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic12.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic13.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic13.jpg new file mode 100644 index 0000000..4014d1d Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic13.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic14.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic14.jpg new file mode 100644 index 0000000..88a7740 Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic14.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic15.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic15.jpg new file mode 100644 index 0000000..d87f84c Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic15.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic16.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic16.jpg new file mode 100644 index 0000000..f1c310a Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic16.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic2.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic2.jpg new file mode 100644 index 0000000..6a0a469 Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic2.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic3.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic3.jpg new file mode 100644 index 0000000..d6760c0 Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic3.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic4.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic4.jpg new file mode 100644 index 0000000..bb9db8f Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic4.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic5.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic5.jpg new file mode 100644 index 0000000..064b00d Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic5.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic6.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic6.jpg new file mode 100644 index 0000000..10dd753 Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic6.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic7.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic7.jpg new file mode 100644 index 0000000..051fab5 Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic7.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic8.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic8.jpg new file mode 100644 index 0000000..6c390b5 Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic8.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_1/pic/pic9.jpg b/tasks/ostrovskaya-sf/lab_1/pic/pic9.jpg new file mode 100644 index 0000000..cd5d0ce Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_1/pic/pic9.jpg differ diff --git a/tasks/ostrovskaya-sf/lab_2/.gitignore b/tasks/ostrovskaya-sf/lab_2/.gitignore new file mode 100644 index 0000000..8afdcb6 --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_2/.gitignore @@ -0,0 +1,454 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# JetBrains Rider +.idea/ +*.sln.iml + +## +## Visual Studio Code +## +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/tasks/ostrovskaya-sf/lab_2/README.md b/tasks/ostrovskaya-sf/lab_2/README.md new file mode 100644 index 0000000..23fc80a --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_2/README.md @@ -0,0 +1,67 @@ +# Отчёт по лабораторной работе №2 + +Выполнила: студентка гр. ИСЭбд-41 Островская Софья. + +Вариант программы 1: + +4. Формирует файл `/var/result/data.txt` так, что каждая строка файла - количество символов в именах файлов из каталога `/var/data`. + +Вариант программы 2: + +0. Сохраняет произведение первого и последнего числа из файла `/var/data/data.txt` в `/var/result/result.txt`. + +## Создание приложений + +Создадим 2 приложения. +Был выбран язык C# и технология .NET 5. + +Для создания обычных консольных приложений воспользуемся командами: + +```sh +dotnet new console -o worker-1 +dotnet new console -o worker-2 +``` + +Согласно варианту, программа 1 должна сформировать файл `/var/result/data.txt`, в который построчно будут записаны числа, равные количеству символов в именах файлах каталога `/var/data`. + +[Исходный текст программы worker-1](worker-1/Program.cs) + +Согласно варианту, программа 2 должна взять первое и последнее число из файла `/var/data/data.txt`, затем выполнить операцию произведения и записать результат в `/var/result/result.txt`. + +[Исходный текст программы worker-2](worker-2/Program.cs) + +Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего. + +## Настройка окружения + +Для связи двух приложений воспользуемся следующей схемой: + +1. Каталог `./data` должен быть примонтирован в каталог `/var/data` для программы 1. + Оттуда будут браться исходные данные. +2. Каталог `./result-1` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складываться промежуточные данные. +3. Каталог `./result-1` также должен быть примонтирован в каталог `/var/data` для программы 2. + Оттуда будут браться промежуточные результаты. +4. Каталог `./result` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складывать результаты финальной обработки. + +Для каждой программы были созданы файлы Dockerfile ([программа 1](worker-1/Dockerfile), [программа 2](worker-2/Dockerfile)) с подробным описанием процесса сборки. + +Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения. + +## Сборка и запуск + +В каталог `./data` помещены 3 файла с различной длиной названия. + +![](pic1.png) + +На выходе, программа должна сначала записать числа [5 8 9], поскольку именно такую длину имеют файлы (вместе с расширением). А затем, умножив 5 на 9, получится результат программы 2, равный 45 + +Для запуска приложения необходимо ввести команду `docker compose up --build`. +Результат запуска после сборки: + +![](pic2.png) + +В результате в каталоге `./result` создался файл `result.txt` с содержимым `45`. + +Изменение значений в файлах из каталога `./data` также изменяет содержимое в файлах из каталогов `./result-1` и `./result`. \ No newline at end of file diff --git a/tasks/ostrovskaya-sf/lab_2/data/1.txt b/tasks/ostrovskaya-sf/lab_2/data/1.txt new file mode 100644 index 0000000..e69de29 diff --git a/tasks/ostrovskaya-sf/lab_2/data/data.txt b/tasks/ostrovskaya-sf/lab_2/data/data.txt new file mode 100644 index 0000000..b178657 --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_2/data/data.txt @@ -0,0 +1,4 @@ +1 +2 +3 +4 \ No newline at end of file diff --git a/tasks/ostrovskaya-sf/lab_2/data/sonya.txt b/tasks/ostrovskaya-sf/lab_2/data/sonya.txt new file mode 100644 index 0000000..e69de29 diff --git a/tasks/ostrovskaya-sf/lab_2/docker-compose.yml b/tasks/ostrovskaya-sf/lab_2/docker-compose.yml new file mode 100644 index 0000000..9c753e7 --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_2/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3.1" +services: + worker-1: + build: ./worker-1 + volumes: + # Монтирует локальную папку data к папке data в контейнере. + - ./data:/var/data + # Монтирует локальную папку result-1 к папке result в контейнере. + - ./result-1:/var/result + worker-2: + build: ./worker-2 + volumes: + # Монтирует локальную папку result-1 к папке data в контейнере. + - ./result-1:/var/data + - ./result:/var/result + # Зависимость от первого приложения. + depends_on: + - worker-1 \ No newline at end of file diff --git a/tasks/ostrovskaya-sf/lab_2/lab_2.sln b/tasks/ostrovskaya-sf/lab_2/lab_2.sln new file mode 100644 index 0000000..c30048f --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_2/lab_2.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1\worker-1.csproj", "{27BD1451-9A65-4578-8694-DDA354866DA3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2\worker-2.csproj", "{AD4D5CF8-D33E-45A5-B30E-FB86133562EC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {27BD1451-9A65-4578-8694-DDA354866DA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {27BD1451-9A65-4578-8694-DDA354866DA3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27BD1451-9A65-4578-8694-DDA354866DA3}.Debug|x64.ActiveCfg = Debug|Any CPU + {27BD1451-9A65-4578-8694-DDA354866DA3}.Debug|x64.Build.0 = Debug|Any CPU + {27BD1451-9A65-4578-8694-DDA354866DA3}.Debug|x86.ActiveCfg = Debug|Any CPU + {27BD1451-9A65-4578-8694-DDA354866DA3}.Debug|x86.Build.0 = Debug|Any CPU + {27BD1451-9A65-4578-8694-DDA354866DA3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {27BD1451-9A65-4578-8694-DDA354866DA3}.Release|Any CPU.Build.0 = Release|Any CPU + {27BD1451-9A65-4578-8694-DDA354866DA3}.Release|x64.ActiveCfg = Release|Any CPU + {27BD1451-9A65-4578-8694-DDA354866DA3}.Release|x64.Build.0 = Release|Any CPU + {27BD1451-9A65-4578-8694-DDA354866DA3}.Release|x86.ActiveCfg = Release|Any CPU + {27BD1451-9A65-4578-8694-DDA354866DA3}.Release|x86.Build.0 = Release|Any CPU + {AD4D5CF8-D33E-45A5-B30E-FB86133562EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AD4D5CF8-D33E-45A5-B30E-FB86133562EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AD4D5CF8-D33E-45A5-B30E-FB86133562EC}.Debug|x64.ActiveCfg = Debug|Any CPU + {AD4D5CF8-D33E-45A5-B30E-FB86133562EC}.Debug|x64.Build.0 = Debug|Any CPU + {AD4D5CF8-D33E-45A5-B30E-FB86133562EC}.Debug|x86.ActiveCfg = Debug|Any CPU + {AD4D5CF8-D33E-45A5-B30E-FB86133562EC}.Debug|x86.Build.0 = Debug|Any CPU + {AD4D5CF8-D33E-45A5-B30E-FB86133562EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AD4D5CF8-D33E-45A5-B30E-FB86133562EC}.Release|Any CPU.Build.0 = Release|Any CPU + {AD4D5CF8-D33E-45A5-B30E-FB86133562EC}.Release|x64.ActiveCfg = Release|Any CPU + {AD4D5CF8-D33E-45A5-B30E-FB86133562EC}.Release|x64.Build.0 = Release|Any CPU + {AD4D5CF8-D33E-45A5-B30E-FB86133562EC}.Release|x86.ActiveCfg = Release|Any CPU + {AD4D5CF8-D33E-45A5-B30E-FB86133562EC}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/tasks/ostrovskaya-sf/lab_2/pic1.png b/tasks/ostrovskaya-sf/lab_2/pic1.png new file mode 100644 index 0000000..ee226aa Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_2/pic1.png differ diff --git a/tasks/ostrovskaya-sf/lab_2/pic2.png b/tasks/ostrovskaya-sf/lab_2/pic2.png new file mode 100644 index 0000000..d056f79 Binary files /dev/null and b/tasks/ostrovskaya-sf/lab_2/pic2.png differ diff --git a/tasks/ostrovskaya-sf/lab_2/result-1/data.txt b/tasks/ostrovskaya-sf/lab_2/result-1/data.txt new file mode 100644 index 0000000..2ff6a39 --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_2/result-1/data.txt @@ -0,0 +1,3 @@ +5 +8 +9 diff --git a/tasks/ostrovskaya-sf/lab_2/result/result.txt b/tasks/ostrovskaya-sf/lab_2/result/result.txt new file mode 100644 index 0000000..ea90ee3 --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_2/result/result.txt @@ -0,0 +1 @@ +45 diff --git a/tasks/ostrovskaya-sf/lab_2/worker-1/Dockerfile b/tasks/ostrovskaya-sf/lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..ce05e25 --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_2/worker-1/Dockerfile @@ -0,0 +1,17 @@ +#задаем базовый образ на .net 5.0 +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env +#задаем рабочую директорию +WORKDIR /app + +#в каталог копируем файлы и папки в контейнер +COPY . /app +#создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:5.0 +WORKDIR /publish +COPY --from=build-env /publish . +#вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-1.dll"] \ No newline at end of file diff --git a/tasks/ostrovskaya-sf/lab_2/worker-1/Program.cs b/tasks/ostrovskaya-sf/lab_2/worker-1/Program.cs new file mode 100644 index 0000000..716a34c --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_2/worker-1/Program.cs @@ -0,0 +1,34 @@ +using System; +using System.IO; +using System.Net.Http; + +var dir = new DirectoryInfo("/var/data"); + +var files = dir.GetFiles(); + +string resultFilePath = "/var/result/data.txt"; +try +{ + int[] mass = new int[files.Length]; + int i = 0; + // Создаем новый файл или перезаписываем существующий + using (StreamWriter writer = new StreamWriter(resultFilePath, false)) + { + foreach (var file in files) + { + // Записываем в файл количество символов в имени каждого файла + writer.WriteLine(file.Name.Length); + mass[i] = file.Name.Length; + i++; + } + } + Console.WriteLine("Файл успешно создан! Результат: "); + foreach(var item in mass) + { + Console.WriteLine(item); + } +} +catch (Exception ex) +{ + Console.WriteLine("Произошла ошибка: " + ex.Message); +} \ No newline at end of file diff --git a/tasks/ostrovskaya-sf/lab_2/worker-1/worker-1.csproj b/tasks/ostrovskaya-sf/lab_2/worker-1/worker-1.csproj new file mode 100644 index 0000000..328500d --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_2/worker-1/worker-1.csproj @@ -0,0 +1,9 @@ + + + + Exe + net5.0 + worker_1 + + + diff --git a/tasks/ostrovskaya-sf/lab_2/worker-2/Dockerfile b/tasks/ostrovskaya-sf/lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..49ab49f --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_2/worker-2/Dockerfile @@ -0,0 +1,17 @@ +#задаем базовый образ на .net 5.0 +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env +#задаем рабочую директорию +WORKDIR /app + +#в каталог копируем файлы и папки в контейнер +COPY . /app +#создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:5.0 +WORKDIR /publish +COPY --from=build-env /publish . +#вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-2.dll"] \ No newline at end of file diff --git a/tasks/ostrovskaya-sf/lab_2/worker-2/Program.cs b/tasks/ostrovskaya-sf/lab_2/worker-2/Program.cs new file mode 100644 index 0000000..f78f1ec --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_2/worker-2/Program.cs @@ -0,0 +1,14 @@ +using System; +using System.IO; +using System.Linq; + +string[] lines = File.ReadAllLines("/var/data/data.txt"); + +int multiplication = Convert.ToInt32(lines.First()) * Convert.ToInt32(lines.Last()); + +using (StreamWriter writer = new StreamWriter("/var/result/result.txt")) +{ + writer.WriteLine(multiplication); +} + +Console.WriteLine("Произведение успешно записано в файл! Результат: " + multiplication); \ No newline at end of file diff --git a/tasks/ostrovskaya-sf/lab_2/worker-2/worker-2.csproj b/tasks/ostrovskaya-sf/lab_2/worker-2/worker-2.csproj new file mode 100644 index 0000000..fb2480c --- /dev/null +++ b/tasks/ostrovskaya-sf/lab_2/worker-2/worker-2.csproj @@ -0,0 +1,9 @@ + + + + Exe + net5.0 + worker_2 + + + diff --git a/tasks/plaksina-av/lab_1/README.md b/tasks/plaksina-av/lab_1/README.md new file mode 100644 index 0000000..7704f4b --- /dev/null +++ b/tasks/plaksina-av/lab_1/README.md @@ -0,0 +1,115 @@ +# Отчёт по лабораторной работе №1 + +Выполнила: студентка гр. ИСЭбд-41 Плаксина Александра. + +## Разворачивание сервера redmine + +Содержимое файла `docker-compose.yml`: + +```yaml +version: '3.1' + +services: # перечень создаваемых контейнеров + + redmine: + image: redmine #название образа, на основе которого создается контейнер + restart: always # настройка, которая указывает, что должна делать программа, если образ перестанет работать (другой вариант - no) + ports: # на локальной машине используется порт 8000 и подключаемся к порту 3000 контейнера + - 8080:3000 + volumes: # засчет томов можно сохранять различные новые настройки контейнера не только на локальной машине, но и удаленно на сервере + - .:/usr/src/app + environment: # различные настройки, которые могут понадобиться при работе с самим образом + REDMINE_DB_MYSQL: db # позволяет установить имя хоста (если не задано, то по умолчанию - SQLite) + REDMINE_DB_PASSWORD: example # задает пароль, который пользователь будет использовать при подключении к бд + REDMINE_SECRET_KEY_BASE: supersecretkey # используется при балансировки нагрузки между контейнерами + + db: + image: mysql:5.7 #указывается название образа и его версия + restart: always + environment: # настройки для подключения к самой бд + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: redmine +``` + +Разворачивается командой `docker-compose up`. + +Убеждаемся, что всё работает: + +![](redmine_1.jpg) +![](redmine_2.jpg) + +## Разворачивание сервера mediawiki + +Содержимое файла `docker-compose.yml`: + +```yaml +version: '3' + +services: + mediawiki: + image: mediawiki + restart: always + ports: + - 8000:80 + links: # связь контейнеров по сети + - database + volumes: + - images:/var/www/html/images + + database: + image: mariadb + restart: always + environment: + + MYSQL_DATABASE: my_wiki #задается имя для базы данных + MYSQL_USER: wikiuser # создается новый пользователь + MYSQL_PASSWORD: example # устанавливается для этого пользователся пароль + MYSQL_RANDOM_ROOT_PASSWORD: 'yes' # генерируется рандомный пароль для рут пользователя + volumes: + - db:/var/lib/mysql + +volumes: + images: + db: + ``` + + Разворачивается командой `docker-compose up`. + +Убеждаемся, что всё работает: + +![](mediawiki_1.jpg) + +## Разворачивание сервера drupal + +Содержимое файла `docker-compose.yml`: + +```yaml +version: '3.1' + +services: + + drupal: + image: drupal:8-apache + ports: + - 8800:80 + volumes: + - /var/www/html/modules + - /var/www/html/profiles + - /var/www/html/themes + - /var/www/html/sites + restart: always + + postgres: + image: postgres:10 + environment: + POSTGRES_PASSWORD: example + restart: always + ``` + + Разворачивается командой `docker-compose up`. + +Убеждаемся, что всё работает: + +![](drupal_1.jpg) + +![](drupal_2.jpg) diff --git a/tasks/plaksina-av/lab_1/drupal_1.jpg b/tasks/plaksina-av/lab_1/drupal_1.jpg new file mode 100644 index 0000000..c59acdd Binary files /dev/null and b/tasks/plaksina-av/lab_1/drupal_1.jpg differ diff --git a/tasks/plaksina-av/lab_1/drupal_2.jpg b/tasks/plaksina-av/lab_1/drupal_2.jpg new file mode 100644 index 0000000..f349813 Binary files /dev/null and b/tasks/plaksina-av/lab_1/drupal_2.jpg differ diff --git a/tasks/plaksina-av/lab_1/mediawiki_1.jpg b/tasks/plaksina-av/lab_1/mediawiki_1.jpg new file mode 100644 index 0000000..b219d7b Binary files /dev/null and b/tasks/plaksina-av/lab_1/mediawiki_1.jpg differ diff --git a/tasks/plaksina-av/lab_1/redmine_1.jpg b/tasks/plaksina-av/lab_1/redmine_1.jpg new file mode 100644 index 0000000..cd04379 Binary files /dev/null and b/tasks/plaksina-av/lab_1/redmine_1.jpg differ diff --git a/tasks/plaksina-av/lab_1/redmine_2.jpg b/tasks/plaksina-av/lab_1/redmine_2.jpg new file mode 100644 index 0000000..931a79f Binary files /dev/null and b/tasks/plaksina-av/lab_1/redmine_2.jpg differ diff --git a/tasks/plaksina-av/lab_2/.gitignore b/tasks/plaksina-av/lab_2/.gitignore new file mode 100644 index 0000000..154e127 --- /dev/null +++ b/tasks/plaksina-av/lab_2/.gitignore @@ -0,0 +1,477 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk diff --git a/tasks/plaksina-av/lab_2/README.md b/tasks/plaksina-av/lab_2/README.md new file mode 100644 index 0000000..fc39a83 --- /dev/null +++ b/tasks/plaksina-av/lab_2/README.md @@ -0,0 +1,58 @@ +# Отчёт по лабораторной работе №2 + +Выполнила: студентка гр. ИСЭбд-41 Плаксина Александра. + +Вариант программы 1: Формирует файл `/var/result/data.txt` так, что каждая строка файла - количество строк в файлах из каталога `/var/data`. +Вариант программы 2: Ищет наименьшее число из файла `/var/data/data.txt` и сохраняет его третью степень в `/var/result/result.txt`. + +## Создание приложений + +Создадим 2 приложения. +Был выбран язык C# и технология .NET 7. + +Для создания обычных консольных приложений воспользуемся командами: + +```sh +dotnet new console -o worker-1 +dotnet new console -o worker-2 +``` +Согласно варианту, программа 1 должна просматривать все файлы в каталоге `/var/data`, считывать количество строк в каждом файле и результат записывать в `/var/result/data.txt`. + +[Исходный текст программы worker-1](worker-1/Program.cs) + +Согласно варианту программа 2 должна найти наименьшее число из файла `/var/data/data.txt` и сохранить его третью степень в `/var/result/result.txt`. + +[Исходный текст программы worker-2](worker-2/Program.cs) + +Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего. + +## Настройка окружения + +Для связи двух приложений воспользуемся следующей схемой: + +1. Каталог `./data` должен быть примонтирован в каталог `/var/data` для программы 1. + Оттуда будут браться исходные данные. +2. Каталог `./result-1` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складываться промежуточные данные. +3. Каталог `./result-1` также должен быть примонтирован в каталог `/var/data` для программы 2. + Оттуда будут браться промежуточные результаты. +4. Каталог `./result` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складывать результаты финальной обработки. + +Для каждой программы были созданы файлы Dockerfile ([программа 1](worker-1/Dockerfile), [программа 2](worker-2/Dockerfile)) с подробным описанием процесса сборки. + +Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения. + +## Сборка и запуск + +В каталог `./data` помещены 3 файла с различным количеством строк в каждом файле. В первом файле - 3 строки, во втором - 5 строк, а в третьем - 4 строки + +Для запуска приложения необходимо ввести команду `docker compose up ---build`. + +Результат запуска после сборки: + +![](result.jpg) + +В результате в каталоге `./result` создался файл `result.txt` с содержимым `27`, что соответствует входным данным, так как наименьшим числом в нашем случае является `3`. + +Изменение значений в файлах из каталога `./data` также изменяет содержимое в файлах из каталогов `./result-1` и `./result`. \ No newline at end of file diff --git a/tasks/plaksina-av/lab_2/data/data.txt b/tasks/plaksina-av/lab_2/data/data.txt new file mode 100644 index 0000000..fb9ab8c --- /dev/null +++ b/tasks/plaksina-av/lab_2/data/data.txt @@ -0,0 +1,3 @@ +3 +8 +2 \ No newline at end of file diff --git a/tasks/plaksina-av/lab_2/data/milka.txt b/tasks/plaksina-av/lab_2/data/milka.txt new file mode 100644 index 0000000..5b27e61 --- /dev/null +++ b/tasks/plaksina-av/lab_2/data/milka.txt @@ -0,0 +1,5 @@ +самая +красивая +кошечка +на +света \ No newline at end of file diff --git a/tasks/plaksina-av/lab_2/data/ugolek.txt b/tasks/plaksina-av/lab_2/data/ugolek.txt new file mode 100644 index 0000000..53fab8d --- /dev/null +++ b/tasks/plaksina-av/lab_2/data/ugolek.txt @@ -0,0 +1,4 @@ +самый +милый +кот +уголек \ No newline at end of file diff --git a/tasks/plaksina-av/lab_2/docker-compose.yml b/tasks/plaksina-av/lab_2/docker-compose.yml new file mode 100644 index 0000000..ef6bc7d --- /dev/null +++ b/tasks/plaksina-av/lab_2/docker-compose.yml @@ -0,0 +1,16 @@ +version: "3.1" +services: + worker-1: + build: ./worker-1 + volumes: + #монтируем локальную папку в запущенный образ контейнера + - ./data:/var/data + - ./result-1:/var/result + worker-2: + build: ./worker-2 + volumes: + - ./result-1:/var/data + - ./result:/var/result + #добавляется зависимость, так как по условию второе приложение зависит от первого + depends_on: + - worker-1 \ No newline at end of file diff --git a/tasks/plaksina-av/lab_2/lab_2.sln b/tasks/plaksina-av/lab_2/lab_2.sln new file mode 100644 index 0000000..d4c99ce --- /dev/null +++ b/tasks/plaksina-av/lab_2/lab_2.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1\worker-1.csproj", "{43ACD78C-1B90-40A9-B925-40FD839FF4DF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2\worker-2.csproj", "{E34454E8-2FCD-49B1-8D30-314C57A1A1AF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {43ACD78C-1B90-40A9-B925-40FD839FF4DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43ACD78C-1B90-40A9-B925-40FD839FF4DF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43ACD78C-1B90-40A9-B925-40FD839FF4DF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43ACD78C-1B90-40A9-B925-40FD839FF4DF}.Release|Any CPU.Build.0 = Release|Any CPU + {E34454E8-2FCD-49B1-8D30-314C57A1A1AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E34454E8-2FCD-49B1-8D30-314C57A1A1AF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E34454E8-2FCD-49B1-8D30-314C57A1A1AF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E34454E8-2FCD-49B1-8D30-314C57A1A1AF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/tasks/plaksina-av/lab_2/result-1/data.txt b/tasks/plaksina-av/lab_2/result-1/data.txt new file mode 100644 index 0000000..81a8322 --- /dev/null +++ b/tasks/plaksina-av/lab_2/result-1/data.txt @@ -0,0 +1,3 @@ +3 +5 +4 diff --git a/tasks/plaksina-av/lab_2/result.jpg b/tasks/plaksina-av/lab_2/result.jpg new file mode 100644 index 0000000..8c6fae6 Binary files /dev/null and b/tasks/plaksina-av/lab_2/result.jpg differ diff --git a/tasks/plaksina-av/lab_2/result/result.txt b/tasks/plaksina-av/lab_2/result/result.txt new file mode 100644 index 0000000..f64f5d8 --- /dev/null +++ b/tasks/plaksina-av/lab_2/result/result.txt @@ -0,0 +1 @@ +27 diff --git a/tasks/plaksina-av/lab_2/worker-1/Dockerfile b/tasks/plaksina-av/lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..24e5c4a --- /dev/null +++ b/tasks/plaksina-av/lab_2/worker-1/Dockerfile @@ -0,0 +1,15 @@ +#указываем образ из которого будем брать все слои +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env +#наша папочка, с которой мы будем работать +WORKDIR /App +#копируем файлик в нашу рабочую дерикторию +COPY . ./ +#запускаем команду +RUN dotnet restore +RUN dotnet publish -c Release -o out + +FROM mcr.microsoft.com/dotnet/aspnet:7.0 +WORKDIR /App +#копирует не из файловой системы хоста, а из того, что собрали на прерыдущей стадии +COPY --from=build-env /App/out . +ENTRYPOINT ["dotnet", "worker-1.dll"] \ No newline at end of file diff --git a/tasks/plaksina-av/lab_2/worker-1/Program.cs b/tasks/plaksina-av/lab_2/worker-1/Program.cs new file mode 100644 index 0000000..d6d94c3 --- /dev/null +++ b/tasks/plaksina-av/lab_2/worker-1/Program.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; + +string resultFilePath = "/var/result/data.txt"; + +using (StreamWriter writer = new StreamWriter(resultFilePath, false)) + { + foreach (var file in Directory.GetFiles("/var/data")) + { + using (StreamReader sr = new StreamReader(file)) + { + String line; + Int16 i=0; + while ((line = sr.ReadLine()) != null) + { + i++; + } + writer.WriteLine(i.ToString()); + Console.WriteLine("Количество строк в файле: " + i.ToString()); + } + } + } + Console.WriteLine("Файл первого приложения успешно создан: " + resultFilePath); diff --git a/tasks/plaksina-av/lab_2/worker-1/worker-1.csproj b/tasks/plaksina-av/lab_2/worker-1/worker-1.csproj new file mode 100644 index 0000000..93ad7da --- /dev/null +++ b/tasks/plaksina-av/lab_2/worker-1/worker-1.csproj @@ -0,0 +1,11 @@ + + + + Exe + net7.0 + worker_1 + enable + enable + + + diff --git a/tasks/plaksina-av/lab_2/worker-2/Dockerfile b/tasks/plaksina-av/lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..7a5d970 --- /dev/null +++ b/tasks/plaksina-av/lab_2/worker-2/Dockerfile @@ -0,0 +1,15 @@ +#указываем образ из которого будем брать все слои +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env +#наша папочка, с которой мы будем работать +WORKDIR /App +#копируем файлик в нашу рабочую дерикторию +COPY . ./ +#запускаем команду +RUN dotnet restore +RUN dotnet publish -c Release -o out + +FROM mcr.microsoft.com/dotnet/aspnet:7.0 +WORKDIR /App +#копирует не из файловой системы хоста, а из того, что собрали на прерыдущей стадии +COPY --from=build-env /App/out . +ENTRYPOINT ["dotnet", "worker-2.dll"] \ No newline at end of file diff --git a/tasks/plaksina-av/lab_2/worker-2/Program.cs b/tasks/plaksina-av/lab_2/worker-2/Program.cs new file mode 100644 index 0000000..4a3a62e --- /dev/null +++ b/tasks/plaksina-av/lab_2/worker-2/Program.cs @@ -0,0 +1,34 @@ +using System.ComponentModel.DataAnnotations; +using System; +using System.IO; + +string inputFile = "/var/data/data.txt"; + +string resultFilePath = "/var/result/result.txt"; + +using (StreamWriter writer = new StreamWriter(resultFilePath, false)) +{ + int min = int.MaxValue; + using (StreamReader sr = new StreamReader(inputFile)) + { + string line; + int i = 0; + while ((line = sr.ReadLine()) != null) + { + i++; + if (int.TryParse(line, out int value)) + { + if (value < min) + { + min = value; + } + } + } + Console.WriteLine("Наименьшее число в файле: " + min.ToString()); + } + double triplemin = Math.Pow(min, 3); + writer.WriteLine(triplemin.ToString()); + + Console.WriteLine("Файл второго приложения успешно создан: " + resultFilePath); +} + diff --git a/tasks/plaksina-av/lab_2/worker-2/worker-2.csproj b/tasks/plaksina-av/lab_2/worker-2/worker-2.csproj new file mode 100644 index 0000000..b90f9cb --- /dev/null +++ b/tasks/plaksina-av/lab_2/worker-2/worker-2.csproj @@ -0,0 +1,11 @@ + + + + Exe + net7.0 + worker_2 + enable + enable + + + diff --git a/tasks/voronkova-es/lab_1/.gitignore b/tasks/voronkova-es/lab_1/.gitignore new file mode 100644 index 0000000..72748c6 --- /dev/null +++ b/tasks/voronkova-es/lab_1/.gitignore @@ -0,0 +1,2 @@ +/database_wp +/database_wiki \ No newline at end of file diff --git a/tasks/voronkova-es/lab_1/Voronkova_lab_1.md b/tasks/voronkova-es/lab_1/Voronkova_lab_1.md new file mode 100644 index 0000000..6eb6c80 --- /dev/null +++ b/tasks/voronkova-es/lab_1/Voronkova_lab_1.md @@ -0,0 +1,48 @@ +# Лабораторная работа №1 +Выполнила Воронкова Е.С. ✨ +Скачиваем образы всех сервисов: +![Образы](images/photo_2023-10-23_23-29-51.jpg "Образы сервисов") + +## Сервис drupal +>Система управления содержимым (CMS), используемая также как каркас для веб-приложений.\ + +- Подключение к БД: +![БД](images/photo_2023-10-23_23-32-53.jpg "Подключение к БД") + +Добавляем расширение, которое необходимо для drupal +```sh +create extension pg_trgm +``` +![Расширение](images/photo_2023-10-23_23-40-41.jpg "Расширение") +- Установка Drupal +![Установка](images/photo_2023-10-23_23-34-01.jpg "Установка") +- Страница создана: +![Работоспособность системы](images/photo_2023-10-23_23-34-58.jpg "Работоспособность системы") + +## Сервис mediawiki +>Вики-движок, написанный специально для Википедии, используется во многих других проектах фонда Викимедиа, а также частных и государственных организациях. + +- При первичной установки MediaWiki открывается следующее окно: +![Главный экран](images/photo_2023-10-23_23-22-15.jg "Главный экран") +- Подключение к БД: +![БД](images/photo_2023-10-23_23-27-13.jpg "Подключение к БД") +- Обновление существующей установки: +![Работоспособность системы](images/photo_2023-10-23_23-28-25.jpg "Работоспособность системы") +- Конфигурация: +![Конфигурация](images/photo_2023-10-23_23-36-34.jpg "Конфигурация") +- Копируем файл настроек в контейнер: +![Файл настроек](images/photo_2023-10-23_23-38-37.jpg "Файл настроек") +- Успешный запуск +![Успешный запуск](images/photo_2023-10-23_23-38-03.jpg "Успешный запуск") + + +## Сервис wordpress +>Свободно распространяемая система управления содержимым сайта с открытым исходным кодом; написана на PHP; сервер базы данных — MySQL. + +- Заполняем начальную информацию. Указываем наименование сайта, имя пользователя, пароль и почту: +![Главный экран](images/photo_2023-10-23_22-40-59.jpg "Главный экран") +- После успешной регистрации открывается следующее окно: +![Успешная регистрация на Wordpress](images/photo_2023-10-23_23-14-28.jpg "Успешная регистрация на Wordpress") +- Страница создана: +![Работоспособность системы](images/photo_2023-10-23_23-16-43.jpg "Работоспособность системы") + diff --git a/tasks/voronkova-es/lab_1/docker-compose.yml b/tasks/voronkova-es/lab_1/docker-compose.yml new file mode 100644 index 0000000..aad2a69 --- /dev/null +++ b/tasks/voronkova-es/lab_1/docker-compose.yml @@ -0,0 +1,81 @@ +#Указывается версия docker-compose +version: "3" + +#Описываем сервисы +services: + + #Сервис drupal + drupal: + #Докер образ + image: drupal:latest + #Маппинг портов - Порт хоста:порт внутри контейнера + ports: + - 8004:80 + #Вольюмы для сохранение данных после смерти контейнера + volumes: + - drupal_modules:/var/www/html/modules + - drupal_profiles:/var/www/html/profiles + - drupal_themes:/var/www/html/themes + - drupal_sites:/var/www/html/sites + #рестарт политика + restart: always + + postgres: + image: postgres:12 + #Указываем переменные среды + environment: + POSTGRES_PASSWORD: your_postgres_password + ports: + - 5433:5432 + volumes: + - db_data:/var/lib/postgresql/data + restart: always + + wiki: + image: mediawiki:lts + ports: + - 9999:80 + #Зависимости от других сервисов + links: + - database + restart: unless-stopped + volumes: + - ./images:/var/www/html/images + + database: + image: mariadb + environment: + MYSQL_DATABASE: 'wiki' + MYSQL_USER: 'wikiuser234234' + MYSQL_PASSWORD: 'password' + MYSQL_RANDOM_ROOT_PASSWORD: 'yes' + volumes: + - ./database_wiki:/var/lib/mysql + restart: unless-stopped + + wordpress: + image: wordpress + links: + - mariadb:mysql + environment: + - WORDPRESS_DB_PASSWORD=password + - WORDPRESS_DB_USER=root + ports: + - 8005:80 + volumes: + - ./html:/var/www/html + mariadb: + image: mariadb + environment: + - MYSQL_ROOT_PASSWORD=password + - MYSQL_DATABASE=wordpress + volumes: + - ./database_wp:/var/lib/mysql + +#Описание вольюмов +volumes: + drupal_modules: + drupal_profiles: + drupal_themes: + drupal_sites: + db_data: \ No newline at end of file diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_22-40-59.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_22-40-59.jpg new file mode 100644 index 0000000..c8e9e9b Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_22-40-59.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-14-28.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-14-28.jpg new file mode 100644 index 0000000..1ae53c6 Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-14-28.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-16-43.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-16-43.jpg new file mode 100644 index 0000000..1ed2365 Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-16-43.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-22-15.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-22-15.jpg new file mode 100644 index 0000000..1b9c596 Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-22-15.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-26-18.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-26-18.jpg new file mode 100644 index 0000000..2b417f9 Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-26-18.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-27-13.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-27-13.jpg new file mode 100644 index 0000000..f4e852d Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-27-13.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-28-25.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-28-25.jpg new file mode 100644 index 0000000..41bf390 Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-28-25.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-29-51.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-29-51.jpg new file mode 100644 index 0000000..953c0de Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-29-51.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-32-53.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-32-53.jpg new file mode 100644 index 0000000..1d90f8f Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-32-53.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-34-01.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-34-01.jpg new file mode 100644 index 0000000..ebb06b5 Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-34-01.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-34-58.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-34-58.jpg new file mode 100644 index 0000000..12cc119 Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-34-58.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-36-34.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-36-34.jpg new file mode 100644 index 0000000..ea88a26 Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-36-34.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-38-03.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-38-03.jpg new file mode 100644 index 0000000..97bf462 Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-38-03.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-38-37.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-38-37.jpg new file mode 100644 index 0000000..1956174 Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-38-37.jpg differ diff --git a/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-40-41.jpg b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-40-41.jpg new file mode 100644 index 0000000..7a26a66 Binary files /dev/null and b/tasks/voronkova-es/lab_1/images/photo_2023-10-23_23-40-41.jpg differ diff --git a/tasks/voronkova-es/lab_2/.dockerignore b/tasks/voronkova-es/lab_2/.dockerignore new file mode 100644 index 0000000..54fec4f --- /dev/null +++ b/tasks/voronkova-es/lab_2/.dockerignore @@ -0,0 +1,2 @@ +*/*/bin +*/*/obj diff --git a/tasks/voronkova-es/lab_2/.gitignore b/tasks/voronkova-es/lab_2/.gitignore new file mode 100644 index 0000000..f20ffbc --- /dev/null +++ b/tasks/voronkova-es/lab_2/.gitignore @@ -0,0 +1,481 @@ +## Наши данные для работы программы +result-1/ +result/ + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk diff --git a/tasks/voronkova-es/lab_2/README.md b/tasks/voronkova-es/lab_2/README.md new file mode 100644 index 0000000..ba8286b --- /dev/null +++ b/tasks/voronkova-es/lab_2/README.md @@ -0,0 +1,69 @@ +# Отчёт по лабораторной работе №2 + +Выполнил: студент гр. ИСЭбд-41 Воронкова Елизавета. + +Варианты 4 4 + +Вариант программы 1: Формирует файл `/var/result/data.txt` из содержимого всех файлов каталога `/var/data` и записывает в него длины названий всех файлов. + +Вариант программы 2: Ищет максимальное число из файла `/var/data/data.txt` и сохраняет количество максимальных чисел в `/var/result/result.txt`. + +## Создание приложений + +Создадим 2 приложения. +Был выбран язык C# и технология .NET 7. + +Для создания обычных консольных приложений воспользуемся командами: + +```sh +dotnet new console -o worker_1_var_4 +dotnet new console -o worker_2_var_4 +``` + +Согласно варианту программа 1 должна брать все файлы из папки `/var/data`, и записывать длины имен файлов в `/var/result/data.txt`. + +[Исходный текст программы worker-1](worker_1_var_4/Program.cs) + +Согласно варианту программа 2 должна брать строки из файла `/var/data/data.txt`, приводить их к числам и затем находить количество максимальных значений. +Затем результат вычислений копируется в файл `/var/result/result.txt`. + +[Исходный текст программы worker-2](worker_2_var_4/Program.cs) + +Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего. + +## Настройка окружения + +Для связи двух приложений воспользуемся следующей схемой: + +1. Каталог `./data` должен быть примонтирован в каталог `/var/data` для программы 1. + Оттуда будут браться исходные данные. +2. Каталог `./result-1` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складываться промежуточные данные. +3. Каталог `./result-1` также должен быть примонтирован в каталог `/var/data` для программы 2. + Оттуда будут браться промежуточные результаты. +4. Каталог `./result` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складывать результаты финальной обработки. + +Для каждой программы были созданы файлы Dockerfile ([программа 1](worker_1_var_4/Dockerfile), [программа 2](worker_1_var_4/Dockerfile)) с подробным описанием процесса сборки. + +Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения. + +Дополнительно был создан файл [.dockerignore](.dockerignore) и дополнен [.gitignore](.gitignore), чтобы исключить для сборки и коммита всё лишнее. + +## Сборка и запуск + +В каталог `./data` помещены 5 файлов с длинами 16 и 19. +Данные в файле data.txt +16 +16 +19 +19 +19 + +Для запуска приложения необходимо ввести команду `docker compose up ---build`. + +Результат запуска после сборки: + +В результате в каталоге `./result` создался файл `result.txt` с содержимым `19`, что соответствует входным данным. + +Изменение значений в файлах из каталога `./data` также изменяет содержимое в файлах из каталогов `./result-1` и `./result`. diff --git a/tasks/voronkova-es/lab_2/data/f1.txt b/tasks/voronkova-es/lab_2/data/f1.txt new file mode 100644 index 0000000..e69de29 diff --git a/tasks/voronkova-es/lab_2/data/f2.txt b/tasks/voronkova-es/lab_2/data/f2.txt new file mode 100644 index 0000000..e69de29 diff --git a/tasks/voronkova-es/lab_2/data/file1.txt b/tasks/voronkova-es/lab_2/data/file1.txt new file mode 100644 index 0000000..e69de29 diff --git a/tasks/voronkova-es/lab_2/data/file2.txt b/tasks/voronkova-es/lab_2/data/file2.txt new file mode 100644 index 0000000..e69de29 diff --git a/tasks/voronkova-es/lab_2/data/file3.txt b/tasks/voronkova-es/lab_2/data/file3.txt new file mode 100644 index 0000000..e69de29 diff --git a/tasks/voronkova-es/lab_2/docker-compose.yml b/tasks/voronkova-es/lab_2/docker-compose.yml new file mode 100644 index 0000000..34b5db7 --- /dev/null +++ b/tasks/voronkova-es/lab_2/docker-compose.yml @@ -0,0 +1,14 @@ +version: "3.1" +services: + worker-1: + build: ./worker_1_var_4 + volumes: + - ./data:/var/data + - ./result-1:/var/result + worker-2: + build: ./worker_2_var_4 + volumes: + - ./result-1:/var/data + - ./result:/var/result + depends_on: + - worker-1 diff --git a/tasks/voronkova-es/lab_2/worker_1_var_4/Dockerfile b/tasks/voronkova-es/lab_2/worker_1_var_4/Dockerfile new file mode 100644 index 0000000..112b6cc --- /dev/null +++ b/tasks/voronkova-es/lab_2/worker_1_var_4/Dockerfile @@ -0,0 +1,26 @@ +# Используем базовый образ с пакетом SDK .NET 7.0 +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env + +# Устанавливаем рабочую директорию для всех последующих команд +WORKDIR /app + +# Копируем все файлы из текущего контекста в рабочую директорию +COPY . ./ + +# Восстанавливаем зависимости проекта +RUN dotnet restore + +# Публикуем приложение в режиме выпуска +RUN dotnet publish -c Release -o out + +# Используем базовый образ с ASP.NET 7.0 +FROM mcr.microsoft.com/dotnet/aspnet:7.0 + +# Устанавливаем рабочую директорию для всех последующих команд +WORKDIR /app + +# Копируем файлы из build-env в текущую директорию +COPY --from=build-env /app/out . + +# Устанавливаем точку входа в приложение +ENTRYPOINT ["dotnet", "worker_1_var_4.dll"] \ No newline at end of file diff --git a/tasks/voronkova-es/lab_2/worker_1_var_4/Program.cs b/tasks/voronkova-es/lab_2/worker_1_var_4/Program.cs new file mode 100644 index 0000000..b00b7ee --- /dev/null +++ b/tasks/voronkova-es/lab_2/worker_1_var_4/Program.cs @@ -0,0 +1,11 @@ +using System.Text; + +List lines = new(); + +var sb = new StringBuilder(); +foreach (var file in Directory.GetFiles("/var/data")) +{ + lines.Add(file.Length.ToString()); +} + +File.WriteAllLines("/var/result/data.txt", lines); \ No newline at end of file diff --git a/tasks/voronkova-es/lab_2/worker_1_var_4/worker_1_var_4.csproj b/tasks/voronkova-es/lab_2/worker_1_var_4/worker_1_var_4.csproj new file mode 100644 index 0000000..f02677b --- /dev/null +++ b/tasks/voronkova-es/lab_2/worker_1_var_4/worker_1_var_4.csproj @@ -0,0 +1,10 @@ + + + + Exe + net7.0 + enable + enable + + + diff --git a/tasks/voronkova-es/lab_2/worker_1_var_4/worker_1_var_4.sln b/tasks/voronkova-es/lab_2/worker_1_var_4/worker_1_var_4.sln new file mode 100644 index 0000000..fb67561 --- /dev/null +++ b/tasks/voronkova-es/lab_2/worker_1_var_4/worker_1_var_4.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33723.286 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker_1_var_4", "worker_1_var_4.csproj", "{FC249DB1-3674-40D3-9747-7C97BAFD9172}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FC249DB1-3674-40D3-9747-7C97BAFD9172}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC249DB1-3674-40D3-9747-7C97BAFD9172}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC249DB1-3674-40D3-9747-7C97BAFD9172}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC249DB1-3674-40D3-9747-7C97BAFD9172}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {510889DE-4297-48C0-A313-416833248538} + EndGlobalSection +EndGlobal diff --git a/tasks/voronkova-es/lab_2/worker_2_var_4/Dockerfile b/tasks/voronkova-es/lab_2/worker_2_var_4/Dockerfile new file mode 100644 index 0000000..4f4498e --- /dev/null +++ b/tasks/voronkova-es/lab_2/worker_2_var_4/Dockerfile @@ -0,0 +1,11 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env +WORKDIR /app + +COPY . ./ +RUN dotnet restore +RUN dotnet publish -c Release -o out + +FROM mcr.microsoft.com/dotnet/aspnet:7.0 +WORKDIR /app +COPY --from=build-env /app/out . +ENTRYPOINT ["dotnet", "worker_2_var_4.dll"] \ No newline at end of file diff --git a/tasks/voronkova-es/lab_2/worker_2_var_4/Program.cs b/tasks/voronkova-es/lab_2/worker_2_var_4/Program.cs new file mode 100644 index 0000000..9470fb3 --- /dev/null +++ b/tasks/voronkova-es/lab_2/worker_2_var_4/Program.cs @@ -0,0 +1,16 @@ +string[] numbers = File.ReadAllLines("/var/data/data.txt"); +Console.WriteLine("Чисел для обработки: " + numbers.Length); + +try +{ + var numbersInt = numbers.Select(x => Convert.ToInt32(x)); + var maxValue = numbersInt.DefaultIfEmpty().Max(); + if (maxValue != 0) + { + File.WriteAllText("/var/result/result.txt", numbersInt.Where(x => x == maxValue).Count().ToString()); + } +} +catch +{ + throw new ArgumentException("Wrong numbers"); +} \ No newline at end of file diff --git a/tasks/voronkova-es/lab_2/worker_2_var_4/worker_2_var_4.csproj b/tasks/voronkova-es/lab_2/worker_2_var_4/worker_2_var_4.csproj new file mode 100644 index 0000000..f02677b --- /dev/null +++ b/tasks/voronkova-es/lab_2/worker_2_var_4/worker_2_var_4.csproj @@ -0,0 +1,10 @@ + + + + Exe + net7.0 + enable + enable + + + diff --git a/tasks/voronkova-es/lab_2/worker_2_var_4/worker_2_var_4.sln b/tasks/voronkova-es/lab_2/worker_2_var_4/worker_2_var_4.sln new file mode 100644 index 0000000..97ca16e --- /dev/null +++ b/tasks/voronkova-es/lab_2/worker_2_var_4/worker_2_var_4.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33723.286 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker_2_var_4", "worker_2_var_4.csproj", "{484B9DAB-0CAF-426C-9BE9-6F3ECBB02723}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {484B9DAB-0CAF-426C-9BE9-6F3ECBB02723}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {484B9DAB-0CAF-426C-9BE9-6F3ECBB02723}.Debug|Any CPU.Build.0 = Debug|Any CPU + {484B9DAB-0CAF-426C-9BE9-6F3ECBB02723}.Release|Any CPU.ActiveCfg = Release|Any CPU + {484B9DAB-0CAF-426C-9BE9-6F3ECBB02723}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0E6987ED-0E22-4298-90B3-677888BE1682} + EndGlobalSection +EndGlobal diff --git a/tasks/yudenicheva-ds/lab_1/README.md b/tasks/yudenicheva-ds/lab_1/README.md new file mode 100644 index 0000000..2ebee9e --- /dev/null +++ b/tasks/yudenicheva-ds/lab_1/README.md @@ -0,0 +1,246 @@ +# Отчет по лабораторной работе №1 + +### Сервис Redmine +#### Система учета багов, т.е. баг-трекер + +**Код docker-compose.yml:** + +`version: '3.1' #версия` + +`services: #разворачивание сервисов` + +`redmine:` + +`image: redmine #образ, с помощью которого разворачивается контейнер` + +`restart: always` + +`ports:` + +` - 8080:3000 #указываем порт хоста и виртуалки` + +`environment: #настройка переменных окружения` + +`REDMINE_DB_MYSQL: db #подключение и вызов к другому контейнеру (db)` + +`REDMINE_DB_PASSWORD: example #пароль` + +`REDMINE_SECRET_KEY_BASE: supersecretkey` + +`db: #название хоста, с помощью которого подключается к другому контейнеру (redmine)` + +`image: mysql:5.7` + +`restart: always` + +`environment: #настройка переменных окржения` + +`MYSQL_ROOT_PASSWORD: example #пароль` + +`MYSQL_DATABASE: redmine #название БД` + +**Принцип работы:** + +Определяются volume, которые находятся в образе "image: redmine" контейнера "redmine". + +Контейнер "redmine" запускается из образа "image: redmine" из Docker Hub. + +В "ports" указывается локальный хост 8080 и хост виртуальной машины 3000. + +Настройка переменных окружения настривается в "environment": + +-Название БД и вызов другого контейнера с названием db + +-Используемый пароль при подключении к БД + +-БД, которую Redmine будет использовать на указанном сервере + +-Переменная REDMINE_SECRET_KEY_BASE для поддержания сеансовых соединений + +Второй котнейнер "db" подключается к контейнеру "redmine" с помощью названия хоста в настройке переменных окружения. + +В контейнере "db" также в "environment" настраиваются переменные окружения. + +Скришот работы сервиса redmine: + +![Alt text](images/image-1.png) + +### Сервис Wordpress +#### Популярная система управления контентом. + +**Код docker-compose.yml:** + + `db:` + +`image: mariadb:10.6.4-focal #образ, с помощью которого разворачивается контейнер` + +`command: '--default-authentication-plugin=mysql_native_password'` + +`volumes:` + +`- db_data:/var/lib/mysql` + +`restart: always` + +`environment: #настройка переменных окружения` + +`- MYSQL_ROOT_PASSWORD=somewordpress` + +`- MYSQL_DATABASE=wordpress` + +`- MYSQL_USER=wordpress` + +`- MYSQL_PASSWORD=wordpress` + +`expose: #описание сетевых портов` + +`- 3306` + +`- 33060` + +`wordpress: #название хоста, который подключается к другому контейнеру` + +`image: wordpress:latest` + +`volumes:` + +`- wp_data:/var/www/html` + +`ports: #порт хоста и виртуалки` + +`- 80:80` + +`restart: always` + +`environment: #настройка переменных окржуения` + +`- WORDPRESS_DB_HOST=db` + +`- WORDPRESS_DB_USER=wordpress` + +`- WORDPRESS_DB_PASSWORD=wordpress` + +`- WORDPRESS_DB_NAME=wordpress` + +`volumes: #описание вольюмов` + + `db_data:` + + `wp_data:` + +**Принцип работы:** + +Определяются volumes, которые находятся в образах "image: wordpress:latest" и "image: mariadb:10.6.4-focal". + +В "ports" указывается локальный хост 80 и хост виртуальной машины 80. + +Настройка переменных окружения настривается в "environment": + +-Название БД + +-Используемый пароль при подключении к БД + +-БД, которую Redmine будет использовать на указанном сервере + +-Описание сетевых портов expose, которые будут прослушиваться в запущенном контейнере (3306, 33060) + +Скришот работы сервиса wordpress: + +Выбираем язык: + +![Alt text](images/image-2.png) + +Заполняем нужную информацию (название сайта, имя пользователя, пароль, адрес электронной почты): + +![Alt text](images/image-3.png) + +После регистрации открывается следующее окно: + +![Alt text](images/image-4.png) + +Далее проходим авторизацию и наслаждемся работой в WordPress: + +![Alt text](images/image-5.png) + +### Сервис MediaWiki +#### Движок вики. + +**Код docker-compose.yml:** + +`version: '3'` + +`services:` + + `mediawiki:` + +`image: mediawiki #образ, с помощью которого разворачивается контейнер mediawiki` + +`restart: always` + +`ports: #порт хоста и виртуалки` + +`- 80:80` + +`links: #зависимости от других сервисов` + +`- database` + +`volumes:` + +`- images:/var/www/html/images` + + `database:` + +`image: mariadb #образ, с помощью которого разворачивается БД` + +`restart: always` + +`environment: #настройка переменных окржения` + +`MYSQL_DATABASE: my_wiki` + +`MYSQL_USER: wikiuser` + +`MYSQL_PASSWORD: example` + +`MYSQL_RANDOM_ROOT_PASSWORD: 'yes'` + +`volumes:` + +`- db:/var/lib/mysql` + +`volumes: #описание вольюмов` + + `images:` + + `db:` + +**Принцип работы:** + +Скачиваем образ image: mediawiki, с помощью которого разворачивается контейнер mediawiki + +В "ports" указывается локальный хост 80 и хост виртуальной машины 80 + +С помощью настройки links указываем зависимости от других сервисов + +Образ image: mariadb разворачивает контейнер database с БД + +Настройка переменных окружения настривается в "environment": + +-Название БД + +-Пользователь MediaWiki + +-Используемый пароль при подключении к БД + +Скришот работы сервиса wordpress: + +![Alt text](images/image-6.png) + +Подключение к БД: + +![Alt text](images/image-8.png) + +Запускаем MediaWiki: + +![Alt text](images/image-9.png) diff --git a/tasks/yudenicheva-ds/lab_1/images/image-1.png b/tasks/yudenicheva-ds/lab_1/images/image-1.png new file mode 100644 index 0000000..635123f Binary files /dev/null and b/tasks/yudenicheva-ds/lab_1/images/image-1.png differ diff --git a/tasks/yudenicheva-ds/lab_1/images/image-2.PNG b/tasks/yudenicheva-ds/lab_1/images/image-2.PNG new file mode 100644 index 0000000..de68cd8 Binary files /dev/null and b/tasks/yudenicheva-ds/lab_1/images/image-2.PNG differ diff --git a/tasks/yudenicheva-ds/lab_1/images/image-3.PNG b/tasks/yudenicheva-ds/lab_1/images/image-3.PNG new file mode 100644 index 0000000..a6359db Binary files /dev/null and b/tasks/yudenicheva-ds/lab_1/images/image-3.PNG differ diff --git a/tasks/yudenicheva-ds/lab_1/images/image-4.PNG b/tasks/yudenicheva-ds/lab_1/images/image-4.PNG new file mode 100644 index 0000000..5944377 Binary files /dev/null and b/tasks/yudenicheva-ds/lab_1/images/image-4.PNG differ diff --git a/tasks/yudenicheva-ds/lab_1/images/image-5.PNG b/tasks/yudenicheva-ds/lab_1/images/image-5.PNG new file mode 100644 index 0000000..bed7016 Binary files /dev/null and b/tasks/yudenicheva-ds/lab_1/images/image-5.PNG differ diff --git a/tasks/yudenicheva-ds/lab_1/images/image-6.PNG b/tasks/yudenicheva-ds/lab_1/images/image-6.PNG new file mode 100644 index 0000000..b50ef25 Binary files /dev/null and b/tasks/yudenicheva-ds/lab_1/images/image-6.PNG differ diff --git a/tasks/yudenicheva-ds/lab_1/images/image-8.PNG b/tasks/yudenicheva-ds/lab_1/images/image-8.PNG new file mode 100644 index 0000000..748964c Binary files /dev/null and b/tasks/yudenicheva-ds/lab_1/images/image-8.PNG differ diff --git a/tasks/yudenicheva-ds/lab_1/images/image-9.PNG b/tasks/yudenicheva-ds/lab_1/images/image-9.PNG new file mode 100644 index 0000000..97bf462 Binary files /dev/null and b/tasks/yudenicheva-ds/lab_1/images/image-9.PNG differ diff --git a/tasks/zakirova-ar/lab_1/README.md b/tasks/zakirova-ar/lab_1/README.md new file mode 100644 index 0000000..7d4ab70 --- /dev/null +++ b/tasks/zakirova-ar/lab_1/README.md @@ -0,0 +1,134 @@ +# Отчёт по лабораторной работе №1 + +Выполнила: студентка гр. ИСЭбд-41 Закирова Амина. + +## Разворачивание сервера gitea + +Содержимое файла `docker-compose.yml`: + +```yaml +version: "3" + +networks: + gitea: + external: false +# Контейнер +services: # Описание служб + server: + image: gitea/gitea:1.20.4 # Образ gitea + container_name: gitea # Наименование контейнера + environment: # Параметры + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=mysql + - GITEA__database__HOST=db:3306 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=gitea + restart: always + networks: # Параметры сети + - gitea + volumes: # Каталоги для хранения данных контейнера + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: # Порт локальный и внутри сети + - "3000:3000" + - "222:22" + depends_on: + - db +# База данных + db: + image: mysql:8 # Образ БД и версия + restart: always # Параметр перезапуска + environment: # Подключение каталога с бд + - MYSQL_ROOT_PASSWORD=gitea + - MYSQL_USER=gitea + - MYSQL_PASSWORD=gitea + - MYSQL_DATABASE=gitea + networks: # Параметры сети + - gitea + volumes: # Том для хранения данных БД + - ./mysql:/var/lib/mysql +``` + +Разворачивается командой `docker-compose up`. + +Убеждаемся, что всё работает: + +![](gitea.png) + +Удаляется всё командой `docker-compose down` или `docker-compose down -v` или напрямую в приложении Docker desktop. + +## Разворачивание сервера Redmine + +Содержимое файла `docker-compose.yml`: + +```yaml +version: '3.1' + +services: +# Контейнер + redmine: + image: redmine # Образ контейнера + restart: always + ports: # Порт + - 8080:3000 + environment: # Параметры + REDMINE_DB_MYSQL: db + REDMINE_DB_PASSWORD: example + REDMINE_SECRET_KEY_BASE: supersecretkey +# База данных + db: + image: mysql:5.7 # Образ БД и ее версия + restart: always + environment: # Подключение каталога с бд + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: redmine +``` + +Разворачивается командой `docker-compose up`. + +Убеждаемся, что всё работает: + +![](redmine.png) + +Создали и подтвердили пользователя: +![](redmine2.png) + +Удаляется всё командой `docker-compose down` или `docker-compose down -v` или напрямую в приложении Docker desktop. + +## Разворачивание сервера drupal + +Содержимое файла `docker-compose.yml`: + +```yaml +version: '3.1' + +services: +# Контейнер + drupal: + image: drupal:8-apache + ports: # Порт + - 8800:80 + volumes: # Тома + - /var/www/html/modules + - /var/www/html/profiles + - /var/www/html/themes + - /var/www/html/sites + restart: always +# База данных + postgres: + image: postgres:10 + environment: # Подключение каталога с бд + POSTGRES_PASSWORD: example + restart: always +``` + +Разворачивается командой `docker-compose up`. + +Убеждаемся, что всё работает: + +![](drupal.png) + +Удаляется всё командой `docker-compose down` или `docker-compose down -v` или напрямую в приложении Docker desktop. diff --git a/tasks/zakirova-ar/lab_1/drupal.png b/tasks/zakirova-ar/lab_1/drupal.png new file mode 100644 index 0000000..3314e7e Binary files /dev/null and b/tasks/zakirova-ar/lab_1/drupal.png differ diff --git a/tasks/zakirova-ar/lab_1/gitea.png b/tasks/zakirova-ar/lab_1/gitea.png new file mode 100644 index 0000000..4a5645b Binary files /dev/null and b/tasks/zakirova-ar/lab_1/gitea.png differ diff --git a/tasks/zakirova-ar/lab_1/redmine.png b/tasks/zakirova-ar/lab_1/redmine.png new file mode 100644 index 0000000..02ffa11 Binary files /dev/null and b/tasks/zakirova-ar/lab_1/redmine.png differ diff --git a/tasks/zakirova-ar/lab_1/redmine2.png b/tasks/zakirova-ar/lab_1/redmine2.png new file mode 100644 index 0000000..eb57476 Binary files /dev/null and b/tasks/zakirova-ar/lab_1/redmine2.png differ diff --git a/tasks/zinoveva-ad/lab-1/README.md b/tasks/zinoveva-ad/lab-1/README.md new file mode 100644 index 0000000..1d390e5 --- /dev/null +++ b/tasks/zinoveva-ad/lab-1/README.md @@ -0,0 +1,154 @@ +# Отчёт по лабораторной работе №1 + +Выполнила: студентка гр. ИСЭбд-41, Зиновьева А. Д. + +## Разворачивание сервиса Gitea + +Содержимое файла `docker-compose.yml` в папке Gitea: +```yaml +version: "3" + +networks: + gitea: + external: false +# Контейнер Gitea +services: # Описание служб + server: + image: gitea/gitea:1.20.4 # Образ gitea + container_name: gitea # Наименование контейнера + environment: # Наши параметры + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=mysql + - GITEA__database__HOST=db:3306 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=gitea + restart: always + networks: # Параметры сети + - gitea + volumes: # Каталоги для хранения данных контейнера + - ./gitea:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + ports: # Порт локальный и внутри сети + - "3000:3000" + - "222:22" + depends_on: + - db +# База данных + db: + image: mysql:8 # Образ БД и версия + restart: always # Параметр перезапуска + environment: # Подключаем каталог с базой данных + - MYSQL_ROOT_PASSWORD=gitea + - MYSQL_USER=gitea + - MYSQL_PASSWORD=gitea + - MYSQL_DATABASE=gitea + networks: # Параметры сети + - gitea + volumes: # Том для хранения данных БД + - ./mysql:/var/lib/mysql +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](img/photo_2023-09-23_15-43-22.jpg) + +Открываем Docker Desktop и проверяем, что контейнер сервера БД и Gitea созданы и запущены: +![](img/photo_2023-09-23_15-44-37.jpg) + +Переходим на http://localhost:222: +![](img/photo_2023-09-23_15-48-54.jpg) + +Регистрируемся и автоматически входим в учетную запись: +![](img/photo_2023-09-23_15-50-10.jpg) + +## Разворачивание сервиса Wordpress + +Также в файл `docker-compose.yml` в папке Wordpress прописываем следующий код: + +```yaml +version: '3.1' + +services: +# Контейнер Wordpress + wordpress: + image: wordpress # Образ + restart: always # Параметр перезапуска + ports: # На каком порте запускаем + - 7071:80 + environment: # Настройки БД WordPress для подключения + WORDPRESS_DB_HOST: database # Имя хоста БД MySQL + WORDPRESS_DB_USER: user # Имя пользователя БД + WORDPRESS_DB_PASSWORD: password # Пароль пользователя БД + WORDPRESS_DB_NAME: name_database # Имя БД + volumes: # Каталог хранения файлов WordPress + - wordpress:/var/www/html +# Контейнер MySQL + database: + image: mysql:5.7 # Образ и его версия + restart: always # Параметр перезапуска + environment: # Настройки БД для подключения + MYSQL_DATABASE: name_database + MYSQL_USER: user + MYSQL_PASSWORD: password + MYSQL_RANDOM_ROOT_PASSWORD: '12345' + volumes: # Каталог хранения данных БД + - database:/var/lib/mysql + +volumes: + wordpress: + database: +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](img/photo_2023-09-23_16-20-48.jpg) + +Открываем Docker Desktop и проверяем, что контейнер сервера БД и Wordpress созданы и запущены: +![](img/photo_2023-09-23_18-16-16.jpg) + +Устанавливаем Wordpress и проверяем, что все работает: +![](img/photo_2023-09-23_16-42-34.jpg) +![](img/photo_2023-09-23_16-43-24.jpg) +![](img/photo_2023-09-23_16-43-38.jpg) +![](img/photo_2023-09-23_16-44-05.jpg) + +## Разворачивание сервиса Redmine + +Также в файл `docker-compose.yml` в папке Redmine прописываем код: + +```yaml +version: '3.1' + +services: +# Контейнер Redmine + redmine: + image: redmine # Образ контейнера + restart: always + ports: # На какой порт запускать + - 8080:3000 + environment: + REDMINE_DB_MYSQL: db + REDMINE_DB_PASSWORD: example + REDMINE_SECRET_KEY_BASE: supersecretkey +# Контейнер БД MySQL + db: + image: mysql:5.7 # Образ БД и ее версия + restart: always + environment: # Название и пароль админа БД + MYSQL_ROOT_PASSWORD: example + MYSQL_DATABASE: redmine +``` +Далее в командной строке разворачиваем сервис командой `docker-compose up -d`: +![](img/photo_2023-09-23_16-50-03.jpg) + +Открываем Docker Desktop и проверяем, что контейнер сервера БД и Redmine созданы и запущены: +![](img/photo_2023-09-23_18-16-36.jpg) + +Переходим на http://localhost:8080: +![](img/photo_2023-09-23_17-00-57.jpg) + +Регистрируемся и проверяем, что все работает: +![](img/photo_2023-09-23_17-03-28.jpg) +Заходим под админом и подтверждаем учетную запись пользователя: +![](img/photo_2023-09-23_17-07-57.jpg) +Выполнгяем вход под пользователем: +![](img/photo_2023-09-23_17-08-36.jpg) diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_15-43-22.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_15-43-22.jpg new file mode 100644 index 0000000..6e78e95 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_15-43-22.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_15-44-37.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_15-44-37.jpg new file mode 100644 index 0000000..a08b37f Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_15-44-37.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_15-48-54.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_15-48-54.jpg new file mode 100644 index 0000000..2afd0c2 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_15-48-54.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_15-50-10.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_15-50-10.jpg new file mode 100644 index 0000000..11b81d3 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_15-50-10.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-20-48.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-20-48.jpg new file mode 100644 index 0000000..8512fa2 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-20-48.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-42-34.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-42-34.jpg new file mode 100644 index 0000000..2599486 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-42-34.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-43-24.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-43-24.jpg new file mode 100644 index 0000000..a95e21a Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-43-24.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-43-38.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-43-38.jpg new file mode 100644 index 0000000..e2fb8a6 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-43-38.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-43-52.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-43-52.jpg new file mode 100644 index 0000000..815108f Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-43-52.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-44-05.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-44-05.jpg new file mode 100644 index 0000000..39b39f1 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-44-05.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-50-03.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-50-03.jpg new file mode 100644 index 0000000..48c4564 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_16-50-03.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-00-57.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-00-57.jpg new file mode 100644 index 0000000..12ffd6a Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-00-57.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-01-23.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-01-23.jpg new file mode 100644 index 0000000..051852d Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-01-23.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-03-28.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-03-28.jpg new file mode 100644 index 0000000..503b73c Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-03-28.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-05-02.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-05-02.jpg new file mode 100644 index 0000000..7e5a99d Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-05-02.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-06-46.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-06-46.jpg new file mode 100644 index 0000000..f2ae7b9 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-06-46.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-07-31.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-07-31.jpg new file mode 100644 index 0000000..c3fa2f0 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-07-31.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-07-57.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-07-57.jpg new file mode 100644 index 0000000..43a18a3 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-07-57.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-08-36.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-08-36.jpg new file mode 100644 index 0000000..0783158 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_17-08-36.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_18-16-16.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_18-16-16.jpg new file mode 100644 index 0000000..b01f6f7 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_18-16-16.jpg differ diff --git a/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_18-16-36.jpg b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_18-16-36.jpg new file mode 100644 index 0000000..32ccee8 Binary files /dev/null and b/tasks/zinoveva-ad/lab-1/img/photo_2023-09-23_18-16-36.jpg differ diff --git a/tasks/zinoveva-ad/lab_2/.gitignore b/tasks/zinoveva-ad/lab_2/.gitignore new file mode 100644 index 0000000..8afdcb6 --- /dev/null +++ b/tasks/zinoveva-ad/lab_2/.gitignore @@ -0,0 +1,454 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# JetBrains Rider +.idea/ +*.sln.iml + +## +## Visual Studio Code +## +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/tasks/zinoveva-ad/lab_2/README.md b/tasks/zinoveva-ad/lab_2/README.md new file mode 100644 index 0000000..962212d --- /dev/null +++ b/tasks/zinoveva-ad/lab_2/README.md @@ -0,0 +1,85 @@ +# Отчёт по лабораторной работе №2 + +Выполнил: студентка гр. ИСЭбд-41, Зиновьева Анна. + +Вариант программы 1: 4. Формирует файл `/var/result/data.txt` так, что каждая строка файла - количество символов в именах файлов из каталога `/var/data`. + +Вариант программы 2: 3. Ищет набольшее число из файла `/var/data/data.txt` и сохраняет количество таких чисел из последовательности в `/var/result/result.txt`. + +## Создание приложений + +Создадим 2 приложения. +Был выбран язык C# и технология .NET 7. + +Для создания обычных консольных приложений воспользуемся командами: + +```sh +dotnet new console -o worker-1 +dotnet new console -o worker-2 +``` + +Согласно варианту, программа 1 должна брать все файлы из папки `/var/data`, считывать длину их названия, найти минимальное и переложить его в папку `/var/result`. + +[Исходный текст программы worker-1](worker-1/Program.cs) + +Согласно варианту программа 2 должна брать строки из папки `/var/data/` с скопированным файлом, пытаться привести их к числам, затем найти минимальное из них. +Далее найти количество вхождений этого числа и результат записать в файл `/var/result/result.txt`. + +[Исходный текст программы worker-2](worker-2/Program.cs) + +Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего. + +## Настройка окружения + +Для связи двух приложений воспользуемся следующей схемой: + +1. Каталог `./data` должен быть примонтирован в каталог `/var/data` для программы 1. + Оттуда будут браться исходные данные. +2. Каталог `./result-1` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складываться промежуточные данные. +3. Каталог `./result-1` также должен быть примонтирован в каталог `/var/data` для программы 2. + Оттуда будут браться промежуточные результаты. +4. Каталог `./result` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складывать результаты финальной обработки. + +Для каждой программы были созданы файлы Dockerfile ([программа 1](worker-1/Dockerfile), [программа 2](worker-2/Dockerfile)) с подробным описанием процесса сборки. + +Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения. + + +## Сборка и запуск + +1. В каталог `./data` помещены 3 файла с различной длиной названия и содержимым. + +![](photo_2023-10-10_16-25-51.jpg) + +На выходе программа должна записать 7 8 8. + +![](Screenshot_2.jpg) + +2. Теперь, обрабатывая этот файл: + +![](Screenshot_3.jpg) + +На выходе программа должна записать число 2 в `./result` так как в файле c названием data.txt максимальное число = 8, которое встречается 2 раза. + +![](Screenshot_4.jpg) + +Для запуска приложения необходимо ввести команду `docker compose up --build`. +Результат запуска после сборки: + +``` +[+] Running 2/0 + ✔ Container lab_2-worker-1-1 Created 0.0s + ✔ Container lab_2-worker-2-1 Created 0.0s +Attaching to lab_2-worker-1-1, lab_2-worker-2-1 +lab_2-worker-1-1 | Файл успешно создан: ../var/result/data.txt +lab_2-worker-2-1 | The maximum number is: 8 +lab_2-worker-2-1 | The count of maximum numbers is: 2 +lab_2-worker-1-1 exited with code 0 +lab_2-worker-2-1 exited with code 0 +``` + +В результате в каталоге `./result` создался файл `result.txt` с содержимым `7 8 8`, что соответствует входным данным. + +Изменение значений в файлах из каталога `./data` также изменяет содержимое в файлах из каталогов `./result-1` и `./result`. \ No newline at end of file diff --git a/tasks/zinoveva-ad/lab_2/Screenshot_1.jpg b/tasks/zinoveva-ad/lab_2/Screenshot_1.jpg new file mode 100644 index 0000000..2264de6 Binary files /dev/null and b/tasks/zinoveva-ad/lab_2/Screenshot_1.jpg differ diff --git a/tasks/zinoveva-ad/lab_2/Screenshot_2.jpg b/tasks/zinoveva-ad/lab_2/Screenshot_2.jpg new file mode 100644 index 0000000..0c4e55e Binary files /dev/null and b/tasks/zinoveva-ad/lab_2/Screenshot_2.jpg differ diff --git a/tasks/zinoveva-ad/lab_2/Screenshot_3.jpg b/tasks/zinoveva-ad/lab_2/Screenshot_3.jpg new file mode 100644 index 0000000..63c5514 Binary files /dev/null and b/tasks/zinoveva-ad/lab_2/Screenshot_3.jpg differ diff --git a/tasks/zinoveva-ad/lab_2/Screenshot_4.jpg b/tasks/zinoveva-ad/lab_2/Screenshot_4.jpg new file mode 100644 index 0000000..6545985 Binary files /dev/null and b/tasks/zinoveva-ad/lab_2/Screenshot_4.jpg differ diff --git a/tasks/zinoveva-ad/lab_2/data/123.txt b/tasks/zinoveva-ad/lab_2/data/123.txt new file mode 100644 index 0000000..e69de29 diff --git a/tasks/zinoveva-ad/lab_2/data/1234.txt b/tasks/zinoveva-ad/lab_2/data/1234.txt new file mode 100644 index 0000000..e69de29 diff --git a/tasks/zinoveva-ad/lab_2/data/data.txt b/tasks/zinoveva-ad/lab_2/data/data.txt new file mode 100644 index 0000000..728ae1c --- /dev/null +++ b/tasks/zinoveva-ad/lab_2/data/data.txt @@ -0,0 +1,12 @@ +5 +7 +3 +7 +5 +8 +8 +9 +9 +5 +2 +1 \ No newline at end of file diff --git a/tasks/zinoveva-ad/lab_2/docker-compose.yml b/tasks/zinoveva-ad/lab_2/docker-compose.yml new file mode 100644 index 0000000..9c753e7 --- /dev/null +++ b/tasks/zinoveva-ad/lab_2/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3.1" +services: + worker-1: + build: ./worker-1 + volumes: + # Монтирует локальную папку data к папке data в контейнере. + - ./data:/var/data + # Монтирует локальную папку result-1 к папке result в контейнере. + - ./result-1:/var/result + worker-2: + build: ./worker-2 + volumes: + # Монтирует локальную папку result-1 к папке data в контейнере. + - ./result-1:/var/data + - ./result:/var/result + # Зависимость от первого приложения. + depends_on: + - worker-1 \ No newline at end of file diff --git a/tasks/zinoveva-ad/lab_2/lab_2.sln b/tasks/zinoveva-ad/lab_2/lab_2.sln new file mode 100644 index 0000000..2c78217 --- /dev/null +++ b/tasks/zinoveva-ad/lab_2/lab_2.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1\worker-1.csproj", "{634E1073-C536-49F1-92E2-48812E9724D4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2\worker-2.csproj", "{CD71CC0E-6A85-4AC9-B8CE-47910331C868}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {634E1073-C536-49F1-92E2-48812E9724D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {634E1073-C536-49F1-92E2-48812E9724D4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {634E1073-C536-49F1-92E2-48812E9724D4}.Debug|x64.ActiveCfg = Debug|Any CPU + {634E1073-C536-49F1-92E2-48812E9724D4}.Debug|x64.Build.0 = Debug|Any CPU + {634E1073-C536-49F1-92E2-48812E9724D4}.Debug|x86.ActiveCfg = Debug|Any CPU + {634E1073-C536-49F1-92E2-48812E9724D4}.Debug|x86.Build.0 = Debug|Any CPU + {634E1073-C536-49F1-92E2-48812E9724D4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {634E1073-C536-49F1-92E2-48812E9724D4}.Release|Any CPU.Build.0 = Release|Any CPU + {634E1073-C536-49F1-92E2-48812E9724D4}.Release|x64.ActiveCfg = Release|Any CPU + {634E1073-C536-49F1-92E2-48812E9724D4}.Release|x64.Build.0 = Release|Any CPU + {634E1073-C536-49F1-92E2-48812E9724D4}.Release|x86.ActiveCfg = Release|Any CPU + {634E1073-C536-49F1-92E2-48812E9724D4}.Release|x86.Build.0 = Release|Any CPU + {CD71CC0E-6A85-4AC9-B8CE-47910331C868}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD71CC0E-6A85-4AC9-B8CE-47910331C868}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD71CC0E-6A85-4AC9-B8CE-47910331C868}.Debug|x64.ActiveCfg = Debug|Any CPU + {CD71CC0E-6A85-4AC9-B8CE-47910331C868}.Debug|x64.Build.0 = Debug|Any CPU + {CD71CC0E-6A85-4AC9-B8CE-47910331C868}.Debug|x86.ActiveCfg = Debug|Any CPU + {CD71CC0E-6A85-4AC9-B8CE-47910331C868}.Debug|x86.Build.0 = Debug|Any CPU + {CD71CC0E-6A85-4AC9-B8CE-47910331C868}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD71CC0E-6A85-4AC9-B8CE-47910331C868}.Release|Any CPU.Build.0 = Release|Any CPU + {CD71CC0E-6A85-4AC9-B8CE-47910331C868}.Release|x64.ActiveCfg = Release|Any CPU + {CD71CC0E-6A85-4AC9-B8CE-47910331C868}.Release|x64.Build.0 = Release|Any CPU + {CD71CC0E-6A85-4AC9-B8CE-47910331C868}.Release|x86.ActiveCfg = Release|Any CPU + {CD71CC0E-6A85-4AC9-B8CE-47910331C868}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/tasks/zinoveva-ad/lab_2/photo_2023-10-10_16-25-51.jpg b/tasks/zinoveva-ad/lab_2/photo_2023-10-10_16-25-51.jpg new file mode 100644 index 0000000..f3c265d Binary files /dev/null and b/tasks/zinoveva-ad/lab_2/photo_2023-10-10_16-25-51.jpg differ diff --git a/tasks/zinoveva-ad/lab_2/result-1/data.txt b/tasks/zinoveva-ad/lab_2/result-1/data.txt new file mode 100644 index 0000000..b54cc0d --- /dev/null +++ b/tasks/zinoveva-ad/lab_2/result-1/data.txt @@ -0,0 +1,3 @@ +7 +8 +8 diff --git a/tasks/zinoveva-ad/lab_2/result/result.txt b/tasks/zinoveva-ad/lab_2/result/result.txt new file mode 100644 index 0000000..d8263ee --- /dev/null +++ b/tasks/zinoveva-ad/lab_2/result/result.txt @@ -0,0 +1 @@ +2 \ No newline at end of file diff --git a/tasks/zinoveva-ad/lab_2/worker-1/Dockerfile b/tasks/zinoveva-ad/lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..e4756e5 --- /dev/null +++ b/tasks/zinoveva-ad/lab_2/worker-1/Dockerfile @@ -0,0 +1,18 @@ +# Задаем базовый образ на .net +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env +# Задаем рабочую директорию +WORKDIR /src + + +# Копируем файлы и папки в каталог в контейнер +COPY . ./ +# Создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:5.0 +WORKDIR /publish +COPY --from=build-env /publish . +# Вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-1.dll"] \ No newline at end of file diff --git a/tasks/zinoveva-ad/lab_2/worker-1/Program.cs b/tasks/zinoveva-ad/lab_2/worker-1/Program.cs new file mode 100644 index 0000000..93b6bfb --- /dev/null +++ b/tasks/zinoveva-ad/lab_2/worker-1/Program.cs @@ -0,0 +1,27 @@ +using System; +using System.IO; + +var dir = new DirectoryInfo("/var/data"); + +var files = dir.GetFiles(); + +//var quantity_files = dir.GetFiles().Length; + +string resultFilePath = "/var/result/data.txt"; +try +{ + // Создаем новый файл или перезаписываем существующий + using (StreamWriter writer = new StreamWriter(resultFilePath, false)) + { + foreach (var file in files) + { + // Записываем в файл количество символов в имени каждого файла + writer.WriteLine(file.Name.Length); + } + } + Console.WriteLine("Файл успешно создан: " + resultFilePath); +} +catch (Exception ex) +{ + Console.WriteLine("Произошла ошибка: " + ex.Message); +} diff --git a/tasks/zinoveva-ad/lab_2/worker-1/worker-1.csproj b/tasks/zinoveva-ad/lab_2/worker-1/worker-1.csproj new file mode 100644 index 0000000..328500d --- /dev/null +++ b/tasks/zinoveva-ad/lab_2/worker-1/worker-1.csproj @@ -0,0 +1,9 @@ + + + + Exe + net5.0 + worker_1 + + + diff --git a/tasks/zinoveva-ad/lab_2/worker-2/Dockerfile b/tasks/zinoveva-ad/lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..f80c2dc --- /dev/null +++ b/tasks/zinoveva-ad/lab_2/worker-2/Dockerfile @@ -0,0 +1,18 @@ +# Задаем базовый образ на .net +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env +# Задаем рабочую директорию +WORKDIR /src + + +# Копируем файлы и папки в каталог в контейнер +COPY . ./ +# Создаем образы и устанавливаем данные пакеты в контейнер +RUN dotnet restore +COPY . . +RUN dotnet publish -c Release -o /publish + +FROM mcr.microsoft.com/dotnet/aspnet:5.0 +WORKDIR /publish +COPY --from=build-env /publish . +# Вызываем приложение во время выполнения контейнера +ENTRYPOINT ["dotnet", "worker-2.dll"] \ No newline at end of file diff --git a/tasks/zinoveva-ad/lab_2/worker-2/Program.cs b/tasks/zinoveva-ad/lab_2/worker-2/Program.cs new file mode 100644 index 0000000..75a622e --- /dev/null +++ b/tasks/zinoveva-ad/lab_2/worker-2/Program.cs @@ -0,0 +1,58 @@ +using System; +using System.IO; + +string filePath = "/var/data/data.txt"; +string resultPath = "/var/result/result.txt"; + +// Считываем числа из файла +int[] numbers = ReadNumbersFromFile(filePath); + +// Ищем наибольшее число +int maxNumber = FindMaxNumber(numbers); + +// Считаем количество таких чисел + int count = CountNumbers(numbers, maxNumber); + +// Сохраняем результат в файл + SaveCountToFile(resultPath, count); + +Console.WriteLine($"Максимальное число: {maxNumber}"); +Console.WriteLine($"Количество макисмальных чисел: {count}"); + + static int[] ReadNumbersFromFile(string filePath) + { + string[] lines = File.ReadAllLines(filePath); + int[] numbers = Array.ConvertAll(lines, int.Parse); + return numbers; + } + + static int FindMaxNumber(int[] numbers) + { + int maxNumber = int.MinValue; + foreach (int number in numbers) + { + if (number > maxNumber) + { + maxNumber = number; + } + } + return maxNumber; + } + + static int CountNumbers(int[] numbers, int targetNumber) + { + int count = 0; + foreach (int number in numbers) + { + if (number == targetNumber) + { + count++; + } + } + return count; + } + + static void SaveCountToFile(string filePath, int count) + { + File.WriteAllText(filePath, count.ToString()); + } \ No newline at end of file diff --git a/tasks/zinoveva-ad/lab_2/worker-2/worker-2.csproj b/tasks/zinoveva-ad/lab_2/worker-2/worker-2.csproj new file mode 100644 index 0000000..fb2480c --- /dev/null +++ b/tasks/zinoveva-ad/lab_2/worker-2/worker-2.csproj @@ -0,0 +1,9 @@ + + + + Exe + net5.0 + worker_2 + + +