210 lines
12 KiB
Markdown
210 lines
12 KiB
Markdown
# Установщик Inventera для Windows
|
||
|
||
Проект собирает две редакции из одной кодовой базы:
|
||
|
||
- полная: `dist\Inventera.exe`;
|
||
- «Картриджи»: `dist\Inventera-Cartridge.exe`.
|
||
|
||
Редакция сохраняется в `config.json`. Полная редакция включает все реализованные
|
||
разделы, а редакция «Картриджи» блокирует функции, которых нет в её комплекте.
|
||
|
||
## Что входит в установщик
|
||
|
||
- сервер Inventera, собранный в `Inventera.Server.exe`;
|
||
- официальный 64-битный установщик PostgreSQL 18 от EDB;
|
||
- мастер с автоматическим и ручным режимами;
|
||
- проверка занятости портов;
|
||
- создание базы, пользователя и конфигурации приложения;
|
||
- правило брандмауэра Windows для выбранного порта Inventera;
|
||
- ярлыки веб-приложения Inventera в меню «Пуск» и на рабочем столе;
|
||
- автоматический запуск сервера Inventera при старте Windows.
|
||
|
||
## Автоматический режим
|
||
|
||
- PostgreSQL устанавливается без дополнительных вопросов;
|
||
- логин администратора PostgreSQL: `postgres`;
|
||
- пароль администратора генерируется установщиком и пользователю не показывается;
|
||
- база: `Inv_Web`;
|
||
- пользователь базы: `invwebuser`;
|
||
- пароль базы: `invwebpassword`;
|
||
- порт PostgreSQL по умолчанию: `5432`;
|
||
- порт веб-приложения по умолчанию: `5050`.
|
||
|
||
Порты PostgreSQL и веб-приложения не могут совпадать. Если один из требуемых портов занят, мастер не позволит продолжить установку.
|
||
|
||
Перед запуском PostgreSQL установщик сохраняет его автоматически созданный пароль
|
||
и выбранный порт в реестре Windows:
|
||
|
||
```text
|
||
HKEY_LOCAL_MACHINE\Software\Inventera\Installer
|
||
```
|
||
|
||
Это позволяет корректно продолжить установку после ошибки или отмены без генерации
|
||
нового пароля для уже созданного кластера.
|
||
|
||
## Режим обновления
|
||
|
||
Если мастер обнаруживает установленную Inventera с тем же идентификатором
|
||
приложения, он автоматически переходит в режим обновления:
|
||
|
||
- показывает установленную и новую версии;
|
||
- использует существующий каталог установки;
|
||
- не запускает установку PostgreSQL и не показывает страницы первичной настройки;
|
||
- сохраняет `%ProgramData%\Inventera\config.json` и всю существующую базу данных;
|
||
- определяет текущий порт Inventera из конфигурации;
|
||
- останавливает работающий сервер или службу;
|
||
- заменяет файлы приложения и восстанавливает автозапуск;
|
||
- запускает обновлённую Inventera после завершения.
|
||
|
||
Режим обновления включается и при повторной сборке с тем же номером версии, но
|
||
для понятного отображения версии в Windows рекомендуется увеличивать номер при
|
||
каждом выпуске.
|
||
|
||
## Повторный запуск первичной установки
|
||
|
||
Если служба `InventeraPostgreSQL18` уже существует, установщик:
|
||
|
||
- не запускает установщик PostgreSQL повторно;
|
||
- читает фактический порт из `postgresql.conf`;
|
||
- показывает этот порт в мастере и запрещает случайно изменить его;
|
||
- использует сохранённый автоматический пароль;
|
||
- повторяет создание базы и конфигурации Inventera.
|
||
|
||
Занятый порт обнаруженной службы PostgreSQL является нормальным состоянием и не
|
||
считается ошибкой.
|
||
|
||
Старые сборки Inventera не сохраняли случайный пароль администратора PostgreSQL.
|
||
Если найден такой PostgreSQL, автоматический режим остановится с пояснением. Нужно
|
||
либо выбрать ручной режим и указать известный пароль администратора, либо удалить
|
||
неудачную старую установку PostgreSQL вместе с её каталогом данных и выполнить
|
||
чистую автоматическую установку. Каталог данных нельзя удалять, если в нём уже
|
||
есть нужные базы.
|
||
|
||
## Ручной режим
|
||
|
||
Мастер предлагает:
|
||
|
||
1. установить PostgreSQL из комплекта или использовать существующую установку;
|
||
2. ввести логин и пароль администратора PostgreSQL;
|
||
3. указать порты PostgreSQL и Inventera;
|
||
4. изменить имя базы, логин и пароль приложения;
|
||
5. при использовании существующего PostgreSQL указать путь к `psql.exe`.
|
||
|
||
Поля базы заранее заполнены значениями `Inv_Web`, `invwebuser`, `invwebpassword`.
|
||
|
||
## Конфигурация приложения
|
||
|
||
После успешного создания базы установщик записывает:
|
||
|
||
```text
|
||
%ProgramData%\Inventera\config.json
|
||
```
|
||
|
||
При запуске `Inventera.Server.exe` читает из этого файла адрес и порт PostgreSQL, имя базы, логин, пароль и порт веб-приложения. Поэтому введённые в мастере значения автоматически используются кодом приложения.
|
||
|
||
## Ярлык и автозапуск
|
||
|
||
Ярлык `Inventera` на рабочем столе открывает веб-приложение в браузере по адресу:
|
||
|
||
```text
|
||
http://127.0.0.1:<порт Inventera>
|
||
```
|
||
|
||
В полной редакции сервер регистрируется в Планировщике заданий Windows под именем
|
||
`Inventera Server`.
|
||
|
||
В редакции «Картриджи» сервер работает через настоящую службу Windows
|
||
`InventeraServer`. Служба запускается от системной учётной записи вместе с
|
||
Windows, даже если пользователь ещё не вошёл. При аварийном завершении Windows
|
||
пытается перезапустить её до трёх раз с интервалом в одну минуту. Если PostgreSQL
|
||
установлен самим мастером, служба Inventera также получает зависимость от службы
|
||
PostgreSQL и запускается после неё.
|
||
|
||
При обновлении удаляется старый ярлык `Inventera Server` из общей папки
|
||
«Автозагрузка», чтобы одновременно не запускались два экземпляра сервера.
|
||
При обновлении картриджной редакции старое задание Планировщика удаляется, чтобы
|
||
не запускались два экземпляра сервера. При удалении Inventera соответствующее
|
||
задание или служба также удаляются.
|
||
|
||
## Сборка на Windows x64
|
||
|
||
Требования:
|
||
|
||
- Python 3 с командой `py`;
|
||
- Inno Setup 6 или 7;
|
||
- заранее скачанный официальный установщик PostgreSQL для Windows x64.
|
||
|
||
Перед сборкой скачайте установщик PostgreSQL, переименуйте его в `postgresql.exe` и положите по адресу:
|
||
|
||
```text
|
||
installer\prerequisites\postgresql.exe
|
||
```
|
||
|
||
Запустить:
|
||
|
||
```bat
|
||
build_inventera_installer_windows.bat
|
||
```
|
||
|
||
Также для полной редакции доступна явная команда-обёртка:
|
||
|
||
```bat
|
||
build_inventera_full_installer_windows.bat
|
||
```
|
||
|
||
Номер выпуска можно передать первым аргументом. Например:
|
||
|
||
```bat
|
||
build_inventera_full_installer_windows.bat 0.2.0
|
||
```
|
||
|
||
Если номер не передан, используется `0.1.0-beta`.
|
||
|
||
Для редакции «Картриджи» используется отдельная команда:
|
||
|
||
```bat
|
||
build_inventera_cartridge_installer_windows.bat
|
||
```
|
||
|
||
Для картриджной редакции версия передаётся так же:
|
||
|
||
```bat
|
||
build_inventera_cartridge_installer_windows.bat 0.2.0
|
||
```
|
||
|
||
Общий код установщика находится в `Inventera.iss`. Настройки картриджной сборки
|
||
вынесены в `Inventera.Cartridge.iss`, поэтому изменения общего процесса установки
|
||
автоматически попадают в обе редакции.
|
||
|
||
Картриджный установщик показывает изображения из `picture\Setup` в правом нижнем
|
||
углу основных страниц мастера: приветствие, выбор режима, настройка базы, выбор
|
||
папки, процесс и завершение. Для совместимости с Inno Setup их подготовленные
|
||
BMP-копии лежат в `installer\assets\cartridge`.
|
||
|
||
Автозапуск картриджной редакции выполняет служба Windows `InventeraServer`.
|
||
Она запускается автоматически вместе с Windows и настроена на три попытки
|
||
перезапуска с интервалом в одну минуту. Старое задание Планировщика при обновлении
|
||
удаляется.
|
||
|
||
Скрипт:
|
||
|
||
1. проверит наличие `installer\prerequisites\postgresql.exe`;
|
||
2. соберёт сервер через PyInstaller;
|
||
3. скомпилирует `Inventera.iss`;
|
||
4. создаст `dist\Inventera.exe`.
|
||
|
||
Установщик PostgreSQL должен находиться здесь:
|
||
|
||
```text
|
||
installer\prerequisites\postgresql.exe
|
||
```
|
||
|
||
Этот файл включается внутрь `dist\Inventera.exe`, поэтому готовый установщик работает без интернета.
|
||
|
||
## Важно
|
||
|
||
- Установщик требует права администратора Windows.
|
||
- При удалении Inventera база PostgreSQL и файл конфигурации не удаляются автоматически, чтобы не потерять данные.
|
||
- Служебные параметры автоматической установки также сохраняются после удаления Inventera, чтобы PostgreSQL оставался доступен при повторной установке приложения.
|
||
- Если используется другая основная версия PostgreSQL, измените `PostgreSqlMajor` в `Inventera.iss`.
|