Установка на удалённом сервере

Обычный способ: команда запускается на вашей машине, платформа встаёт на сервере.

bash install_ssh.sh --host=192.168.0.10 --user=user

Что происходит по шагам

  1. Локальные предпроверки. Кодировка терминала, наличие псевдографики.

  2. Опрос данных подключения — адрес, пользователь, порт, ключ.

  3. Соединение и предпроверки удалённого сервера: ОС, версия bash, права, свободное место, занятость портов, наличие контейнера с таким именем. Здесь же спрашивается пароль ssh, если вход не по ключу.

  4. План доставки: что будет скопировано, что запущено и на каком сервере. Он печатается на экран и в лог, но не спрашивает подтверждения: обёртка только доставляет файлы и запускает установщик, а согласие на это вы уже дали, запустив её. Отдельно спрашивается каждый крупный образ — перед самым копированием. Опрос идёт дальше, на целевом сервере — умолчания зависят от его ОС (пути PostgreSQL, имена пакетов), поэтому вычисляются там.

  5. Доставка: rsync копирует установщик, затем отдельно — крупные файлы образов, чтобы их можно было не пересылать повторно.

  6. Запуск: на сервере выполняется era/scripts/install.sh, его мастер работает в вашем терминале.

  7. Забор логов: лог удалённой стороны копируется к вам в logs/remote/<хост>/.

Обе половины говорят на одном языке: выбранный язык передаётся на сервер вместе с остальными ключами «как запускать».

Экраны мастера

Опрос установки идёт на целевом сервере — после подтверждения доставки и копирования файлов, а не сразу после подключения. Экраны одинаковы для локальной и удалённой установки. Ключи, заданные в командной строке обёртки, туда передаются, и о них сервер не переспрашивает.

Экран О чём спрашивает

0

Подключение

Только в ssh-режиме: адрес, порт, пользователь, ключ.

1

Сервер и роль

Адрес платформы, постфикс, каталог данных, имя сервера, мастер или узел, домен или адреса mic, ключ PSK.

2

Пакеты и сеть

Ставить ли пакеты из интернета, прокси.

3

PostgreSQL — режим

Ставить ли базу, в контейнере или в хосте, мастер или реплика, репликация, образ с Docker Hub.

4

PostgreSQL — доступ

Адрес сервера БД, порт, пользователь платформы и пароли, пользователь репликации, группа ОС.

5

PostgreSQL — каталоги

Каталог кластера, каталог резервных копий, очищать ли существующий.

6

Тома платформы

Двенадцать каталогов, монтируемых в контейнер. Умолчания выводятся из каталога данных и постфикса.

7

NFS

Клиентские каталоги, роль сервера или клиента, маска сети, экспортируемые каталоги.

8

Параметры ядра

Переиспользование соединений в TIME_WAIT.

9

Дополнительно

Появляется только с ключом --advanced: порты платформы, docker-сети, SELinux и firewalld, запуск без root.

10

Дополнительные серверы

Только у мастера: планируется ли установка других серверов, сколько их, имя и адрес каждого. Сами серверы здесь не устанавливаются — в конце будут показаны готовые команды для каждого из них.

Экран пропускается целиком, если ни один его вопрос не нужен при текущих ответах. Например, экран 5 не появится, если базу вы не ставите.

Управление во время опроса

Клавиша Действие

kbd:[Enter]

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

<

Вернуться к предыдущему вопросу и изменить ответ.

?

Подсказка по текущему вопросу.

!

Показать всё, что уже введено.

kbd:[Ctrl+C]

Прервать. Ничего не изменено.

Кнопки в псевдографике называют то, что произойдёт по нажатию. На экранах с вопросом это «Далее» и «Назад». На экранах, где ничего не вводят — предпроверки, сводка, план, отчёт, — кнопка тоже называется «Далее»: она ведёт к следующему шагу. «ОК» остаётся только на последнем окне запуска — после сохранения ответов, когда продолжения не будет.

В псевдографическом режиме способ выйти назван в каждом окне, и зависит он от инструмента:

  • whiptail (Debian, Ubuntu, Linux Mint, Astra Linux и другие производные Debian) — kbd:[Esc];

  • dialog (остальные системы) — кнопка «Выйти», она есть на каждом экране.

Выход завершает работу немедленно и не сохраняет ничего: ни файла ответов, ни команды повтора, ни лога этого запуска. Сервер при этом не изменяется — до подтверждения установщик его и не трогает.

Разделение не произвольное. В библиотеке newt, на которой построен whiptail, kbd:[Esc] не является штатным хоткеем закрытия формы: он работает только там, где сборка содержит соответствующий патч — в deb-подобных дистрибутивах. На остальных системах окно whiptail не закрыть вовсе, поэтому там берётся dialog, у которого есть третья кнопка. Если dialog не установлен, установщик работает в текстовом режиме.

Возврат работает и между экранами: с первого вопроса экрана < уводит на последний вопрос предыдущего. Если изменённый ответ меняет ветку — скажем, вы переключили базу с контейнера на хост — вопросы, потерявшие смысл, будут заданы заново.

Экран подтверждения

Он показывается на целевом сервере — там же, где идёт опрос. У обёртки своего экрана подтверждения нет: подтверждать ей нечего, она только копирует файлы и запускает установщик, а про каждый крупный образ спрашивает отдельно перед копированием.

Показывает три вещи:

  • сводку введённого — параметр, значение и откуда оно взялось: из командной строки, из файла ответов, по умолчанию или от вас;

  • план — пронумерованный список того, что будет сделано, и отдельно список системных файлов, которые будут изменены;

  • предупреждения предпроверок, если они есть.

Доступные действия:

Пункт Что делает

Продолжить

Переход к фазе применения.

Изменить…​

Возврат на выбранный экран мастера. На повторном заходе спрашивается и то, что пришло из файла ответов или ключом: прежнее значение подставлено умолчанием, исправленное отмечается источником исправлено.

Показать пароли

Снимает маскировку в сводке. Пароли скрыты, потому что экран остаётся в прокрутке терминала.

Сохранить ответы

Записывает файл ответов и выходит, ничего не меняя.

Показать команду

Печатает готовую неинтерактивную команду с теми же значениями.

Отмена

Выход. Сервер не изменён.

Что показывается в конце

Всё, что печатает установщик на целевом сервере, видно и здесь: вывод идёт через ssh без изменений. Поэтому после применения вы увидите ту же форму «что изменилось на сервере» и те же команды для этого сервера, что и при локальном запуске — см. era_installer/install-local.adoc#era-installer-install-local-changes.

Отдельно обёртка забирает лог с целевого хоста к себе, в logs/remote/<адрес>/: разбирать отказ, заходя на сервер вручную, не придётся. Лог забирается и после пробного прогона: он выполняется на той же стороне, и разбирать его нужно так же.

Примеры

Мастер с базой в контейнере, без единого вопроса:

bash install_ssh.sh --non-interactive \
     --host=192.168.0.10 --user=user \
     --ipaddress=192.168.0.10 --srvname=srv1 \
     --master=y --masterdomain=example.ru \
     --dopginstall=y --pgmode=d --usedockerhubpgimage=y

Узел, подключаемый к уже развёрнутому мастеру:

bash install_ssh.sh --non-interactive \
     --host=192.168.0.11 --user=user \
     --ipaddress=192.168.0.11 --srvname=srv2 \
     --master=n --micaddress=mic@192.168.0.10 \
     --dopginstall=n --pghost=192.168.0.10

Нестандартный порт ssh и вход по ключу:

bash install_ssh.sh --host=192.168.0.10 --port=2222 \
     --user=user --sshkey=~/.ssh/id_ed25519

Посмотреть план и не менять ничего:

bash install_ssh.sh --dry-run --host=192.168.0.10 --user=user

--dry-run относится к целевому хосту, а не к обёртке: план строит сам сервер, и показать его может только он. Поэтому обёртка свою работу делает по-настоящему — копирует поставку в /tmp/era_installer и запускает там установщик с тем же ключом, — а сервер при этом не изменяется. Поставка остаётся в /tmp и исчезает при перезагрузке.