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

Настройка автоматического запуска воркспейса

Описание функционала

Данный функционал реализован в версиях воркспейса 9.100.148.101, 9.200.164.260, 9.300

Упрощённо, логика работы следующая:

  • После перезапуска машины, на которой установлен воркспейс, срабатывает system-d-служба, которая ищет контейнер в состоянии STOPPED;
  • сверяет манифест контейнера с манифестом воркспейса;
  • завершает работу контейнера и запускает воркспейс.

Если контейнер не найден или манифесты не совпадают, служба ничего не делает.

Danger

Данная служба предназначена для запуска воркспейса при нештатных ситуациях на сервере/машине, и не заменяет работу DevOps специалистов, т.к. не может диагностировать и исправлять проблемы, возникающие при запуске воркспейса. Для штатной перезагрузки сервера/машины, на которой установлен воркспейс мы настоятельно рекомендуем выключать воркспейс и запускать его в ручную, что бы избежать возможных неисправностей.

Перезапуск машины с рабочим воркспейсом приведёт к потере данных, и возможным поломкам внутри воркспейса и неконсистентности Баз Данных.

Все необходимые файлы находятся в архиве установщика в папке autostart.

autostart_1

В папке находится скрипт, инструкция и systemd-файл службы.

Info

Далее в инструкции путь установщика считаем: /om/workspace-installer/current/, путь до манифеста воркспейса считаем: /om/workspace1/manifest.json.

Если ваша директория в которой находится установщик и воркспейс отличаются - необходимо изменить соответствующие команды и поля.

Инициализация

Создаем пользователя и меняем ему пароль (команда от имени суперпользователя).

useradd -m startup-workspace
passwd startup-workspace

Для подключения по ssh рекомендуется заранее создать директорию .ssh и файл authorized_keys с необходимыми ssh ключами. Например взять их от существующего пользователя:

rsync -av /home/existing-user/.shh /home/startup-workspace/
chmod -R startup-workspace:startup-workspace /home/startup-workspace/.shh

Заранее подготавливаем необходимые файлы:

touch /om/workspace1/.env
chown startup-workspace:startup-workspace /om/workspace1/.env
cd /om/workspace-installer/current/
chown -R startup-workspace:startup-workspace ./autostart

Подготавливаем права sudoers:

Создание конфигурационного файла vim /etc/sudoers.d/workspaces.

Необходимо прописать пути ко всем используемым инсталляторам через запятую в Cmnd_Alias. (Необходимы права суперпользователя)

Cmnd_Alias WORKSPACE_INSTALLERS = /om/workspace-installer/current/install, /usr/bin/lxc-config, /usr/bin/lxc-ls, /usr/bin/cat
startup-workspace ALL=(ALL:ALL) NOPASSWD: WORKSPACE_INSTALLERS

Логинимся под ранее созданным пользователем и вводим команды:

# подготовка директорий
mkdir -p ~/.config/systemd/user
mkdir -p ~/bin
mkdir -p ~/var/log

# создание сервиса шаблона
cp /om/workspace-installer/current/autostart/workspace@.service ~/.config/systemd/user

# reload systemd
systemctl --user daemon-reload

# создание скрипта bash
cp /om/workspace-installer/current/autostart/startup-workspace.sh ~/bin

# права доступа к скрипту
chmod +x  ~/bin/startup-workspace.sh

# включение авто логина для сервиса
loginctl enable-linger startup-workspace

Конфигурирование

Конфигурирование осуществляется через файл .env в директории, где располагается manifest.json, который мы создали ранее: /om/workspace1/.env

Пример конфигурационного файла

WORK_DIR=/home/startup-workspace
WITH_SUDO=yes
WITH_SHUTDOWN_FORCE=yes
WORKSPACE_INSTALLER_PATH=/om/workspace-installer/current
MANIFEST_PATH=/om/workspace1/manifest.json

Описание переменных

Наименование Значение по умолчанию Описание
WORK_DIR /home/startup-workspace Рабочая директория сервиса
WITH_SUDO yes Запуск команд через sudo
WITH_SHUTDOWN_FORCE yes Принудительное завершение работы воркспейса (обязательно yes)
WORKSPACE_INSTALLER_PATH /om/workspace-installer/current Путь до папки с инсталлятором
MANIFEST_PATH /om/workspace1/manifest.json Путь к манифесту
LOG_DIR ${WORK_DIR}/var/log Директория с логам (нужен доступ на чтение и запись пользователю startup-workspace )

Создание сервиса

# Команда создания сервиса для воркспейса с конфигурацией /om/имя воркспейса/.env (запускается от имени startup-workspace)
systemctl --user enable workspace@имя_воркспейса.service

# Пример создания сервиса для воркспейса с конфигурацией /om/workspace1/.env (запускается от имени startup-workspace)
systemctl --user enable workspace@workspace1.service

После выполнения данной инструкции, когда происходит перезагрузка виртуальной машины будет срабатывать служба автозапуска, и, если во время перезагрузки был запущен воркспейс - служба попытается его перезапустить.