# Отчет. Лабораторная работа 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 <container_name>
``
## Видео-отчет
Работоспособность лабораторной работы можно оценить в следующем [видео](https://disk.yandex.ru/d/15QhUl3KQYSavA).