Перейти к содержанию

Установка

Docker

Необходимо установить docker на каждый сервер, который будет участвовать в docker swarm.

Ниже можно запустить только 3й пункт этой инструкции и на большинстве серверов все будет работать, но рекомендуется пройти шаги с 1 по 4 полностью.

1.0. Удаляем конфликтующие с docker программы (в т.ч. старые версии).

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove $pkg; done

2.0. Настраиваем docker пакетный репозиторий, устанавливаем необходимые пакеты для установки Docker Engine.

sudo apt update && sudo apt install -y 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

Добавляем репозиторий docker в источники apt.

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 update

3.0. Устанавливаем пакеты docker.

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4.0. Проверяем успешную установку docker.

Смотрим информацию без проверки функций скачивания и развертывания

sudo docker info

и (или) скачиваем с официального репозитория образов docker тестовое приложение и запускаем его в контейнере.

sudo docker run hello-world

Nfs server

Необходимо установить nfs server на том сервере, где будет файловое хранилище.

1.0. Устанавливаем nfs server.

sudo apt update && sudo apt install -y nfs-kernel-server

2.0. Cоздаем папку (папки), которые будут доступны по сети.

sudo mkdir /var/notio/<directory>

Например:

sudo mkdir /var/notio/filestorage
sudo mkdir /var/notio/postgres
sudo mkdir /var/notio/rabbitmq
sudo mkdir /var/notio/elastic
sudo mkdir /var/notio/license
sudo mkdir /var/notio/webgate
sudo mkdir /var/notio/otel

3.0. Конфигурируем mount для сервиса nfs, для этого:

3.1. Переименовываем имеющийся дефолтный файл конфига nfs для будущей возможности его использования

sudo mv /etc/exports /etc/exports.origin

3.2. Создаем новый конфиг и прописываем в него mount, т.е. создаем файл и открываем его с помощью текстового редактора

sudo nano /etc/exports

и пишем в файле необходимые настройки, например:

/var/notio/<directory> 192.168.42.0/255.255.255.0(rw,no_subtree_check)

где /var/notio/<directory> это путь к хранилищу, для которого мы ранее создали папку (папки), а 192.168.42.0 это ip-address, которому мы разрешаем пользоваться ресурсами этой папки. Последняя цифра 0 обозначает, что она может быть любая. При этом мы задаем дополнительные права в скобках (о них - можно почитать отдельно). Таких строчек в файле /etc/exports можно делать столько сколько нужно.

Итоговая конфигурация может выглядеть так:

/var/notio/filestorage *(rw,no_subtree_check,no_root_squash)
/var/notio/postgres *(rw,no_subtree_check,no_root_squash)
/var/notio/rabbitmq *(rw,no_subtree_check,no_root_squash)
/var/notio/elastic *(rw,no_subtree_check,no_root_squash)
/var/notio/license *(rw,no_subtree_check,no_root_squash)
/var/notio/webgate *(rw,no_subtree_check,no_root_squash)
/var/notio/otel *(rw,no_subtree_check,no_root_squash)

3.3. Перезапускаем сервис и проверяем его состояние.

sudo systemctl restart nfs-kernel-server
sudo systemctl status nfs-kernel-server

Должны увидеть подсвеченную зеленым информацию Active: active (exited). alt text

Конфигурацию сервиса можно перезапустить с помощью инструкции:

sudo exportfs -a

Перезапуск конфигурации необходимо делать после любого изменения структуры файлов (папок) nfs или прав доступа.

4.0. Копируем otel/collector/config.yaml на свой nfs сервер в директорию /var/notio/otel/collector.

5.0. Копируем assets/cover на свой nfs сервер в директорию /var/notio/filestorage/cover. 6.0. Заполняем документами nfs сервер - директорию /var/notio/filestorage/main.

Docker swarm

Далее по тексту нода - это один из серверов.

1.0. Инициализация режима swarm.

На управляющей ноде, инициируем docker swarm и указываем ip этого сервера.

sudo docker swarm init --advertise-addr=<ip-address>

Выйти из режима swarm можно следующим образом.

на нодах, с ролью worker:

sudo docker swarm leave

на нодах, с ролью manager:

sudo docker swarm leave --force

2.0. На ноде, где проинициализирован docker swarm получаем токен, для подключения к нему других нод.

для подключения ноды, с ролью manager:

sudo docker swarm join-token -q manager

для подключения ноды, с ролью worker:

sudo docker swarm join-token -q worker

Указанные выше инструкции вернут токен, который используется на подключаемой ноде. Если убрать флаг -q тогда вернется не только токен, но и инструкция, которую можно скопировать и запустить на подключаемой ноде.

3.0. На подключаемой ноде.

Запускаем либо инструкцию (полученную в п. 2 командой без флага -q), либо сами пишем инструкцию и вставляем в нее полученный в п. 2 токен и ip адрес c 2377 портом управляющей ноды.

sudo docker swarm join --token <join-token> <ip-address>:2377

4.0. Посмотреть список нод, входящих в swarm можно инструкцией на управляющей ноде:

sudo docker node ls

5.0. Посмотреть список развернутых стэков, входящих в swarm можно инструкцией на управляющей ноде:

sudo docker stack ls

6.0. Посмотреть список развернутых сервисов в стэках можно инструкцией на управляющей ноде:

sudo docker service ls

Portainer

portainer необходим для управления контейнерами.

Необходимо устанавливать portainer на управляющей ноде, где проинициализирован docker swarm, если он используется.

1.0. Скачиваем конфиг файл.

curl -L https://downloads.portainer.io/ce2-21/portainer-agent-stack.yml -o portainer-agent-stack.yml

2.0. Разворачиваем stack с portainer.

sudo docker stack deploy -c portainer-agent-stack.yml portainer

3.0. Теперь веб-интерфейс portainer доступен по адресу:

https://<ip-address>:9443

где ip-address это адрес сервера, где развернут portainer.

После первого запуска portainer предложит создать пользователя и задать ему пароль. Это желательно сделать в течении 5 минут, иначе portainer попросит перезапустить его сервис в docker.

4.0. Необходимо добавить registry. alt text

5.0. Для создания стэка:

  • переходим в соответствующий подраздел, нажимаем Add stack, stack
  • именуем стэк notio, вставляем docker-stack.yml в соответствующую область Web editor, name_define_stack
  • загружаем .env, alt text
  • нажимаем кнопку Deploy the stack,
  • ждем, пока стэк развернется, контейнеры скачаются, создадуться volumes. Первый запуск будет длительным.

После успешного завершения - все сервисы должны иметь значения 1/1, 2/2 и т.д. в зависимости от количества реплик. alt text