Установка на текущем сервере
То же самое, что era_installer/install-ssh.adoc#era-installer-install-ssh, но каталог поставки уже лежит на сервере и команда запускается там.
bash era/scripts/install.sh
Отличий от ssh-варианта два: нет экрана подключения и нет доставки файлов. Экраны мастера, экран подтверждения и фаза применения совпадают полностью.
Когда это удобнее
-
Каталог уже на сервере — например, вы копировали его один раз, а установку повторяете.
-
Образ платформы весит гигабайты, а канал до сервера узкий: копировать его каждый раз незачем.
-
Установка выполняется из чужого сценария развёртывания, у которого свой способ доставки файлов.
Каталог копируется любым привычным способом, обычно rsync:
rsync -a --exclude='logs/' ./ user@192.168.0.10:/tmp/era_installer/
ssh -t user@192.168.0.10 'cd /tmp/era_installer && bash era/scripts/install.sh'
То же самое через диспетчер, если так привычнее:
ssh -t user@192.168.0.10 'cd /tmp/era_installer && bash era/era.sh install'
|
Ключ Если запуск идёт из сценария, где терминала нет вовсе, передавайте пароли файлом: |
Каталог назначения — /tmp: в него пишет любой пользователь, и копирование не требует прав root.
В /opt обычный пользователь писать не может, и rsync остановится на отказе в доступе ещё до установки.
Поставку можно разместить в любом каталоге — корень она определяет по собственному пути, — но этот каталог должен быть доступен на запись тому, кто копирует.
Порядок действий фазы применения
Он всегда один и тот же и повторяет план, который вы видели на экране подтверждения.
-
Прокси — если задан, переменные окружения выставляются до всего остального.
-
Docker — ставится, если его нет; служба включается, если не запущена.
-
PostgreSQL — контейнер или кластер в хосте.
-
Каталоги-тома — создаются и, при запуске без root, передаются пользователю с uid 1000.
-
Общие каталоги — роль NFS-сервера, роль клиента или пропуск с созданием маркеров.
-
Параметры ядра — лимиты inotify и, по запросу, сетевые.
-
Порты в firewalld — до запуска контейнера, чтобы платформа была доступна сразу.
-
Образ платформы — загружается в docker.
-
Контейнер платформы — запускается.
-
Ожидание инициализации — установщик ждёт от контейнера отчёта о результате.
-
Продуктовый слой — копируется, если найден в
era/assets.
Шаг пропускается, если он не нужен при ваших ответах: например, docker не трогается, если он уже работает. Пропущенных шагов нет и в плане — он и очередь действий строятся из одних и тех же условий.
Что изменилось на сервере
Сразу после применения печатается форма: перечень изменений и итог каждого.
== Что изменилось на сервере ==
[ ok ] Пакеты docker-ce, docker-ce-cli, containerd.io и ещё 1
[ ok ] PostgreSQL контейнер postgres<постфикс>, порт 5441
[ ok ] Роли базы данных platformpgadmin
[ ok ] Каталоги-тома 12 в /opt
[ ok ] NFS-сервер служба nfs-kernel-server, экспортировано каталогов: 3
[FAIL] Общие каталоги не смонтированы: /opt/era<постфикс>/era_recpath
[ ok ] Параметры ядра fs.inotify.max_user_watches = 10000000
[warn] Порты в firewalld не открыты: 8080/tcp
[ ok ] Образ платформы era_1_11_0-2026_8_31_1_docker
[ ok ] Контейнер платформы era<постфикс>, запущен
[ ok ] Инициализация платформы Install server success!
Изменены системные файлы:
/etc/exports.d/era_nfs.exports
/etc/sysctl.d/97-era-platform-inotify.conf
Метки те же, что у предпроверок, но отвечают они на другой вопрос. Предпроверки смотрят, можно ли начинать; форма — что получилось на самом деле, и берёт это из состояния системы, а не из кода возврата команды: контейнер запущен, служба активна, каталог смонтирован, кластер отвечает.
Это важно, потому что часть шагов намеренно не прерывает установку: неудачное монтирование NFS, неоткрытый порт в firewalld, молчание контейнера по таймауту. Без формы их отказ остался бы только в логе.
Проверки не зависят от того, от кого запущен установщик: лимит ядра читается из /proc, а не через sysctl (его каталог /usr/sbin в PATH обычного пользователя обычно отсутствует), сведения о базе берутся из самой базы, о контейнерах — у docker.
Если значение прочитать не удалось совсем, строка получает [warn], а не [FAIL]: не увидев значения, утверждать, что изменение не сделано, нельзя.
| Метка | Что значит |
|---|---|
|
Изменение сделано и подтверждено проверкой. |
|
Сервер работает, но не полностью: например, порт не открыт — платформа поднимется, а снаружи будет недоступна. На код возврата не влияет. |
|
Изменение не удалось. Установщик завершается с кодом 5, даже если очередь действий дошла до конца. |
|
До этого шага не дошли: установка оборвалась раньше. |
Форма печатается и после отказа — тогда она нужнее всего: видно, что успели изменить и что осталось работать.
При --dry-run формы нет: сервер не менялся, отчитываться не о чем.
При удалении печатается такая же форма, но отвечает она на вопрос «что осталось»: контейнер, кластер, монтирования, каталог инстанса.
Что показывается в конце
После успешной установки печатаются:
-
команда, которой этот сервер устанавливается заново;
-
команда, которой он удаляется;
-
команда установки по ssh, если адрес подключения известен;
-
команды для дополнительных серверов, если вы их перечислили на экране 10;
-
путь к файлу с готовой командой.
Пароли в напечатанных командах скрыты: экран остаётся в прокрутке терминала.
Команда с настоящими значениями лежит в файле .cmd рядом с логом, с правами 0600 — копируйте оттуда; команды дополнительных серверов лежат там же.
Команды для дополнительных серверов
Если на экране 10 вы ответили, что планируются другие серверы, и перечислили их имена и адреса, в конце печатается по одной готовой команде на каждый. Команда неинтерактивная: её остаётся выполнить на том сервере.
Основа команды — ответы этого запуска: сервера входят в одну систему, и постфикс, каталоги, пароль базы и параметры сети у них общие. Отличается роль и то, что из неё следует:
-
--master=n, а домен мастера не передаётся — мастер в системе один; -
--micaddress=mic1@<адрес мастера>— по этому адресу сервер находит мастер; -
--dopginstall=nи--pghost=<адрес мастера>— своя база не ставится, сервер подключается к базе мастера; -
--installnfsserver=n, а при NFS-сервере на мастере —--nfsserveraddr=<адрес мастера>; -
--lang— тот же, на котором шла установка мастера: команду выполняет человек, и получить установку на другом языке было бы неожиданностью. В команде повтора этого ключа нет — её выполняет сценарий.
Проверьте команду перед запуском: установщик берёт за основу ответы мастера и не знает, чем именно отличается конкретный сервер.