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

Как устроено меню

Проект разделяет исходный код репозитория и установленное на сервер меню.

Ключевые пути на сервере

Что Путь
Каталог меню /root/vm_menu
Точка входа /root/vm_menu/menu.sh
Удобная ссылка /root/menu.sh
Пользовательские переменные /root/.env.menu
Бэкапы меню /root/backup_vm_menu

Как формируется конфигурация

Runtime-конфигурация складывается из двух уровней:

  1. дефолты из vm_menu/bash_scripts/config.sh;
  2. переопределения из /root/.env.menu, если файл существует.

Именно поэтому значения в установленном окружении могут отличаться от дефолтов репозитория. Например:

  • в config.sh в репозитории могут быть одни значения;
  • в .env.menu.example и на вашем сервере другие.

Из каких частей состоит проект

Основные каталоги и файлы:

  • vm_menu/bash_scripts/config.sh - дефолтные переменные;
  • vm_menu/bash_scripts/functions.sh - диалоги меню и сбор ввода;
  • vm_menu/bash_scripts/actions.sh - вызовы ansible-playbook и системных команд;
  • vm_menu/helpers - вспомогательные shell/perl/php-скрипты;
  • vm_menu/ansible/playbooks - реальное применение изменений на сервере.

Как мыслить о потоке выполнения

Почти каждый пункт меню проходит одинаковую цепочку:

  1. functions.sh показывает вопросы пользователю;
  2. значения кладутся в shell-переменные;
  3. actions.sh запускает соответствующий playbook;
  4. playbook меняет конфиги и службы на сервере.

Это полезно помнить, если вы хотите:

  • понять, откуда берется конкретный prompt;
  • найти playbook, который отвечает за действие;
  • доработать пункт меню под свои нужды.

Что видно в главном меню

На верхнем уровне есть:

  • операции с сайтами и сертификатами;
  • PHP, SMTP, FTP;
  • подменю расширений и security;
  • системные действия вроде update и reboot.

Кроме видимых пунктов есть и сервисные команды:

  • update_menu - обновление меню;