diff --git a/borschevskaya_anna_lab_1/README.md b/borschevskaya_anna_lab_1/README.md new file mode 100644 index 0000000..2a99c3f --- /dev/null +++ b/borschevskaya_anna_lab_1/README.md @@ -0,0 +1,61 @@ +# Отчет. Лабораторная работа 1 + +В рамках лабораторной работы с помощью технологии контейнеризации docker были развернуты сервисы: +- Redmine - система баг-трекинга +- Postgres - СУБД +- RabbitMQ - брокер сообщений + +## Описание +В docker-compose.yml файле описаны настройки для запуска трех выбранных сервисов в контейнерах. Для большинства строк файла оставлены +комментарии, объясняющие содержимое файла. + +Стоит отметить, для сервиса Redmine было принято решение в качестве сервера баз данных не использовать базу данных по умолчанию - SQLite, +а поднять внешний сервер баз данных Postgres, который был запущен в рамках этого же файла docker-compose.yml. + +Для того, чтобы при старте postgres уже была создана база данных для Redmine, а также пользователь, под учетной записью +которого будет работать Redmine, был написан скрипт init-database.sh с использованием bash и sql: +``` +# Создаем пользователя redmine и БД redminedb +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + CREATE USER redmine WITH PASSWORD 'redmine-password'; + CREATE DATABASE redminedb; + GRANT ALL PRIVILEGES ON DATABASE redminedb TO redmine; +EOSQL + +# Даем права на схему public +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USERNAME" -d redminedb <<-EOSQL + ALTER SCHEMA public OWNER TO redmine; + GRANT ALL ON SCHEMA public TO redmine; +EOSQL +``` + +Этот скрипт монтируется в директорию контейнера postgres ``docker-entrypoint-initdb.d``, которая является специальной точкой входа +для инициализации БД и содержит соответствующие скрипты. + +## Как запустить +Для того, чтобы запустить сервисы, необходимо выполнить следующие действия: +1. Установить и запустить Docker Engine или Docker Desktop (включает в себя Docker Engine и предоставляет UI) +2. Через консоль перейти в папку, в которой расположен файл docker-compose.yml +3. Выполнить команду: +``` +docker compose up -d +``` +В случае успешного запуска всех контейнеров в консоли будет выведено следующее сообщение: +``` +[+] Running 3/3 +✔ Container rabbitmq Started 0.8s +✔ Container redmine Started 1.2s +✔ Container postgres Started 0.5s +``` +Также будет создана папка postgres_data, которая монтируется в контейнере postgres + +Мы также можем увидеть статус всех запущенных контейнеров, если выполним команду: +``` +docker ps +``` +Или обратившись к логам каждого из контейнеров: +`` +docker logs +`` +## Видео-отчет +Работоспособность лабораторной работы можно оценить в следующем [видео](https://disk.yandex.ru/d/15QhUl3KQYSavA). \ No newline at end of file diff --git a/borschevskaya_anna_lab_1/docker-compose.yml b/borschevskaya_anna_lab_1/docker-compose.yml new file mode 100644 index 0000000..991b838 --- /dev/null +++ b/borschevskaya_anna_lab_1/docker-compose.yml @@ -0,0 +1,34 @@ +services: + postgres: + image: postgres:latest # название и версия образа docker + container_name: postgres # название контейнера + environment: # блок переменных окружения, которые будут использованы для запуска и настройки + POSTGRES_USERNAME: postgres # имя пользователя супер-пользователя СУБД + POSTGRES_PASSWORD: postgres-admin # имя пользователя супер-пользователя СУБД + PGDATA: "/var/lib/postgresql/data/pgdata" # путь к директории, где Postgres будет хранить свои данные. + ports: + - "5432:5432" # пробрасываем стандартный порт для доступа к postgres + volumes: + - ./postgres_data:/var/lib/postgresql/data/ # монтируем локальную директорию в директорию внутри контейнера с данными базы данных + - ./init-database.sh:/docker-entrypoint-initdb.d/init-database.sh # Монтирует скрипт инициализации базы данных в специальную директорию внутри контейнера. + redmine: + image: redmine + container_name: redmine + ports: + - "8080:3000" + environment: + REDMINE_DB_POSTGRES: postgres # хост, на котором расположена база данных Postgres + REDMINE_DB_USERNAME: redmine # имя пользователя для подключения к базе данных Redmine + REDMINE_DB_DATABASE: redminedb # база данных, к которой будет подключаться Redmine + REDMINE_DB_PASSWORD: redmine-password # пароль, который будет использоваться для подключения + depends_on: # обозначаем зависимость запуска сервиса redmine от запуска сервиса postgres + - postgres + rabbitmq: + container_name: rabbitmq + image: rabbitmq:3-management + environment: + RABBITMQ_DEFAULT_USER: rabbit # переопределяем значения имя для пользователя, который создается по умолчанию + RABBITMQ_DEFAULT_PASS: rabbit-password # переопределяем значения пароля для пользователя, который создается по умолчанию + ports: + - "15672:15672" # порт для доступа к веб-интерфейсу + - "5672:5672" # порт для доступа через протокол AMQP к брокеру сообщений \ No newline at end of file diff --git a/borschevskaya_anna_lab_1/init-database.sh b/borschevskaya_anna_lab_1/init-database.sh new file mode 100644 index 0000000..92721e1 --- /dev/null +++ b/borschevskaya_anna_lab_1/init-database.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -e + +# Создаем пользователя redmine и БД redminedb +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + CREATE USER redmine WITH PASSWORD 'redmine-password'; + CREATE DATABASE redminedb; + GRANT ALL PRIVILEGES ON DATABASE redminedb TO redmine; +EOSQL + +# Даем права на схему public +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USERNAME" -d redminedb <<-EOSQL + ALTER SCHEMA public OWNER TO redmine; + GRANT ALL ON SCHEMA public TO redmine; +EOSQL \ No newline at end of file