forked from Alexey/DAS_2024_1
Compare commits
1 Commits
borschevsk
...
balakhonov
| Author | SHA1 | Date | |
|---|---|---|---|
| 221f3e248b |
59
balakhonov_danila_lab_1/README.md
Normal file
59
balakhonov_danila_lab_1/README.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# Лабораторная работа номер 1
|
||||
|
||||
> Здравствуйте меня зовут Балахонов Данила группа ПИбд-42
|
||||
>
|
||||
> *— Балахонов Данила ПИбд-42*
|
||||
|
||||
Видео лабораторной работы номер 1 доступно по этой [ссылке](https://drive.google.com/file/d/1Up_JzDcK_TjYLixpfYXN7PhJmOeg_Uck/view?usp=sharing).
|
||||
|
||||
## Как запустить лабораторную работу номер 1?
|
||||
### Необходимые компоненты для запуска лабораторной работы номер 1
|
||||
> Здесь рассказана установка необходимых компонентов для запуска лабораторной работы номер 1 под дистрибутив GNU/Linux **Ubuntu**.
|
||||
|
||||
Для запуска лабораторной работы номер 1 необходимы такие компоненты:
|
||||
- Git
|
||||
- Docker
|
||||
- Docker compose
|
||||
|
||||
Чтобы установить **Git**, необходимо ввести данные команды в командную строку:
|
||||
``` bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install git
|
||||
```
|
||||
|
||||
Чтобы установить **Docker** и **Docker compose**, стоит ввести такие команды:
|
||||
``` bash
|
||||
# Настройка репозитория Docker
|
||||
sudo apt-get update
|
||||
sudo apt-get install ca-certificates curl
|
||||
sudo install -m 0755 -d /etc/apt/keyrings
|
||||
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
|
||||
sudo chmod a+r /etc/apt/keyrings/docker.asc
|
||||
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
|
||||
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
|
||||
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
sudo apt-get update
|
||||
|
||||
# Установка Docker и его компонентов
|
||||
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
```
|
||||
### Запуск лабораторной работы номер 1
|
||||
Для запуска лабораторной работы номер 1 необходимо **склонировать** репозиторий в любую папку и **перейти на ветку** balakhonov_danila_lab_1.
|
||||
Далее в папке с `docker-compose.yaml` нужно вызвать такую команду:
|
||||
``` bash
|
||||
sudo docker-compose up -d
|
||||
```
|
||||
Таким образом будут запущены контейнеры в фоновом режиме.
|
||||
## Какие технологии были использованы?
|
||||
Для выполнения лабораторной работы номер 1 использовались такие технологии, как: *git*, *docker*, *docker compose*.
|
||||
|
||||
Сервисы, выбранные для запуска в docker-compose файле:
|
||||
- *Gitea* - удобный сервис отслеживания версий разрабатываемого ПО
|
||||
- *MediaWiki* - сервис создания и ведения электронной энциклопедии
|
||||
- *PostgreSQL* - база данных, используемая сервисами выше
|
||||
|
||||
Системой, на которую были установлены указанные технологии, является Ubuntu 22.
|
||||
## Что делает лабораторная работа номер 1?
|
||||
Лабораторная работа номер 1 заключается в написании docker-compose файла для удобного запуска и администрирования сразу нескольких сервисов в docker-контейнерах.
|
||||
58
balakhonov_danila_lab_1/docker-compose.yaml
Normal file
58
balakhonov_danila_lab_1/docker-compose.yaml
Normal file
@@ -0,0 +1,58 @@
|
||||
services:
|
||||
# PostgreSQL
|
||||
db:
|
||||
# Образ контейнера PostgreSQL последней версии
|
||||
image: postgres
|
||||
# Название контейнера
|
||||
container_name: db
|
||||
# Переменные окружения для настройки базы данных
|
||||
environment:
|
||||
- POSTGRES_USER=gitea
|
||||
- POSTGRES_PASSWORD=gitea
|
||||
- POSTGRES_DB=gitea
|
||||
# Настройка корневого каталога, где хранятся данные
|
||||
# Слева указан каталог компьютера, справа - каталог контейнера
|
||||
# Нужно для сохранения данных на сервере после отключения контейнера
|
||||
volumes:
|
||||
- ./postgres:/var/lib/postgresql/data
|
||||
# Порт, через который можно будет подключиться к базе данных
|
||||
ports:
|
||||
- 5432:5432
|
||||
# После перезапуска докера всегда запускать этот контейнер
|
||||
restart: always
|
||||
# Gitea
|
||||
gitea:
|
||||
# Используется Gitea последней версии
|
||||
image: gitea/gitea
|
||||
container_name: gitea
|
||||
# После перезапуска докера всегда запускать этот контейнер
|
||||
restart: always
|
||||
volumes:
|
||||
- ./data:/var/lib/gitea
|
||||
- ./config:/etc/gitea
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- 3000:3000
|
||||
- 2222:2222
|
||||
environment:
|
||||
- GITEA__database__DB_TYPE=postgres
|
||||
- GITEA__database__HOST=db:5432
|
||||
- GITEA__database__NAME=gitea
|
||||
- GITEA__database__USER=gitea
|
||||
- GITEA__database__PASSWD=gitea
|
||||
# Указывается, что этот контейнер запускается только после запуска контейнера db
|
||||
depends_on:
|
||||
- db
|
||||
# MediaWiki
|
||||
mediawiki:
|
||||
# Образ контейнера MediaWiki последней версии
|
||||
image: mediawiki
|
||||
container_name: mediawiki
|
||||
restart: always
|
||||
ports:
|
||||
- 8080:80
|
||||
links:
|
||||
- db
|
||||
volumes:
|
||||
- ./images:/var/www/html/images
|
||||
@@ -1,61 +0,0 @@
|
||||
# Отчет. Лабораторная работа 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).
|
||||
@@ -1,34 +0,0 @@
|
||||
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 к брокеру сообщений
|
||||
@@ -1,15 +0,0 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user