ВВЕДЕНИЕ
Установка и обновление
«Формула» ставится одной командой. Установщик сам поднимает нужное окружение (Node.js, pnpm и настоящий MySQL), скачивает дистрибутив, раскладывает его в отдельную папку, создаёт базу данных, заводит системную службу с автозапуском и сразу запускает платформу — останется открыть напечатанный адрес.
Для одиночной установки есть два установщика:
| ОС | Установка |
|---|---|
| Linux | curl -sSL https://getformula.ru/install.sh | bash |
| Windows 10/11 | irm https://getformula.ru/install.ps1 | iex |
# Что понадобится
| Требование | Детали |
|---|---|
| Операционная система | Linux: Debian/Ubuntu, Fedora, RHEL-совместимые (CentOS Stream, Rocky, AlmaLinux, Oracle, EL7–10), Arch и производные, openSUSE Leap/Tumbleweed. Windows 10/11 (x64). Отдельного установщика для macOS нет — на macOS разворачивают вручную |
| Права | Linux — root (скрипт сам повышает права через sudo); Windows — администратор (скрипт сам перезапускается через UAC) |
| Node.js | 24 LTS — установщик поставит сам, если его нет (Linux — через nvm, Windows — официальный MSI) |
| pnpm | ставится автоматически (через corepack; если не выйдет — npm install -g pnpm) |
| MySQL | именно MySQL 8.x, не MariaDB. Установщик ставит его с официального источника; если MySQL уже стоял, спросит пароль root и ничего не сбросит |
| Порт | первый свободный начиная с 3000. У каждого экземпляра на машине — свой порт |
| Серийный ключ | формат FORM-XXXX-XXXX-XXXX-XXXX, получить на getformula.ru |
| Интернет | для скачивания дистрибутива с getformula.ru |
Несколько экземпляров на одной машине. Ставить можно сколько угодно копий: у каждой своя папка, свой порт, своя база данных и своя служба. Экземпляры не мешают друг другу, а список установленных хранится в реестре (Linux —
/etc/formula/*.cfg, Windows —C:\ProgramData\Formula\*.cfg).
# Установка на Linux
curl -sSL https://getformula.ru/install.sh | bashЗапускать sudo заранее не нужно — скрипт сам запросит повышение прав. При запуске «через пайп» он сначала перекачивает себя во временный файл, поэтому установка по ссылке и по локальному файлу работает одинаково.
# Что спросит установщик
- Пароль root MySQL — только если MySQL стоял на машине раньше и скрипт не смог войти без пароля. Пароль останется прежним и попадёт в
.env.local; если в нём есть символы, небезопасные для файла.env(пробел,',",\,#), скрипт попросит задать новый пароль. - Имя экземпляра (по умолчанию
formula). Из него получаются папка/opt/formula/<имя>, имя базы данных и имя службы. Допустимы латиница, цифры,-и_. - Лицензионный ключ
FORM-XXXX-XXXX-XXXX-XXXX.
Порт, каталог и параметры базы отдельно не спрашиваются: порт подбирается автоматически, а база называется так же, как экземпляр (символы кроме букв, цифр и _ заменяются на _).
# Что установщик делает по шагам
- Определяет дистрибутив и пакетный менеджер (
apt/dnf/yum/pacman/zypper), доставляет базовые пакеты (curl,unzip,openssl, компилятор и т. д.). - Ставит Node.js 24 LTS через nvm и pnpm через corepack.
- Ставит MySQL:
- Debian/Ubuntu — официальный APT-репозиторий
dev.mysql.com; - Fedora — пакеты
community-mysql(-server); - RHEL-совместимые (EL7–10) — официальный YUM/DNF-репозиторий
dev.mysql.com(8.0 LTS для EL7–9, 8.4 LTS для EL10); - Arch/openSUSE — официальный generic-бинарник Oracle в
/opt/mysql(в этих репозиториях настоящего MySQL нет, только MariaDB). Затем настраивает доступroot@localhostпо TCP так, как его будет использовать приложение.
- Скачивает
https://getformula.ru/release.zipи распаковывает в/opt/formula/<имя>. - Выполняет
pnpm install. Если pnpm блокирует build-скрипты зависимостей, установщик сам их разрешает и повторяет установку. - Пишет
<папка>/.env.local, создаёт базу данных<имя>(utf8mb4) и регистрирует экземпляр в/etc/formula/<имя>.cfg. - Создаёт юнит systemd
formula-<имя>.serviceв/etc/systemd/system/, включает автозапуск, запускает службу и ждёт её HTTP-ответа. - Печатает итог и адрес входа, например
http://localhost:3000.
Схему и таблицы базы создаёт само приложение при первом запуске, там же появляется учётная запись Администратор с пустым паролем — см. Первый вход.
# Установка на Windows
irm https://getformula.ru/install.ps1 | iexУстановщик делает то же, что и на Linux: проверяет/ставит Node.js 24.x (официальный MSI с nodejs.org), pnpm (через npm) и MySQL (официальный дистрибутив dev.mysql.com), настраивает доступ root, спрашивает имя экземпляра и лицензионный ключ, подбирает свободный порт, скачивает и распаковывает релиз в C:\Formula\<имя>, выполняет pnpm install, создаёт .env.local, базу данных и службу Windows Formula-<имя> с автозапуском.
# Повторный запуск: управление экземплярами
На машине, где уже есть установленные экземпляры, установщик показывает меню.
Linux:
1) установить новый экземпляр
2) обновить существующий
3) удалить существующий (если он последний — предложу снести и зависимости)
4) удалить ВСЁ: экземпляры + Node.js, pnpm, MySQL (чистая система)
5) выйтиWindows: меню строится по списку экземпляров — «Установить новый», затем «Обновить «<имя>»» и «Удалить «<имя>»» для каждого, затем «Удалить ВСЁ» и «Выход».
| Действие | Что происходит |
|---|---|
| Обновить | Заново скачивает свежий релиз, сохраняет .env.local, обновляет зависимости, перезаписывает службу и перезапускает её. MySQL и .env.local не трогает |
| Удалить | Отдельно спрашивает, удалять ли базу данных (по умолчанию — нет). Останавливает и удаляет службу, папку и запись реестра. Если экземпляр последний, предлагает снести и зависимости |
| Удалить ВСЁ | Сносит все экземпляры, затем Node.js/nvm, pnpm, MySQL вместе со всеми его базами, каталоги приложения и логи. Операция необратима |
# Где что лежит
| Что | Linux | Windows |
|---|---|---|
Папка экземпляра (код и .env.local) | /opt/formula/<имя> | C:\Formula\<имя> |
| Реестр экземпляров | /etc/formula/<имя>.cfg | C:\ProgramData\Formula\<имя>.cfg |
| Служба | /etc/systemd/system/formula-<имя>.service | служба Formula-<имя> |
| Журнал приложения | /var/log/formula-<имя>.log | <папка экземпляра>\service.log |
| База данных | MySQL, имя = имя экземпляра | MySQL, имя = имя экземпляра |
В файле реестра (.cfg) хранятся только служебные сведения: имя, папка, путь к .env.local, URL релиза, имя базы, порт, версия и даты установки/обновления. Секретов в нём нет — пароли и ключи лежат в .env.local.
# Что записывается в .env.local
| Переменная | Назначение |
|---|---|
DB_HOST | хост MySQL (localhost) |
DB_USER | пользователь MySQL (root) |
DB_PASSWORD | пароль root MySQL |
DB_DATABASE | имя базы данных экземпляра |
JWT_SECRET | секрет подписи сессий (генерируется установщиком) |
SERIAL_KEY | лицензионный ключ |
На Linux файл получает права 600. Дополнительно в него можно вписать DB_CLEAR_RECOVERY_PASSWORD — пароль для аварийных операций с базой на экране входа (по умолчанию db_clear_recovery_password, см. Первый вход).
# Обслуживание службы
Linux:
systemctl status formula-<имя> # состояние
journalctl -u formula-<имя> -f # журнал
systemctl restart formula-<имя> # перезапускWindows:
Get-Service Formula-<имя>
sc.exe stop Formula-<имя>
sc.exe start Formula-<имя>
Get-Content -Wait "C:\Formula\<имя>\service.log"# Обновление платформы
Запустите установщик снова и выберите пункт «обновить существующий» — или неинтерактивно:
FORMULA_ACTION=update FORMULA_INSTANCE=<имя> curl -sSL https://getformula.ru/install.sh | bashУстановщик скачает свежий релиз, сохранит .env.local, обновит зависимости, перезапишет службу и перезапустит её.
Если браузер держит старую версию приложения, экран входа покажет блок «Доступно обновление платформы» с кнопкой Выполнить обновление — она сбросит кэш и перезагрузит приложение.
# Удаление
# Linux: удалить экземпляр (база данных остаётся)
FORMULA_ACTION=delete FORMULA_INSTANCE="<имя>" FORMULA_CONFIRM=yes \
curl -sSL https://getformula.ru/install.sh | bash
# удалить экземпляр вместе с его базой данных
FORMULA_ACTION=delete FORMULA_INSTANCE="<имя>" FORMULA_CONFIRM=yes FORMULA_DROP_DB=yes \
curl -sSL https://getformula.ru/install.sh | bash
# полная очистка машины: экземпляры + Node.js, pnpm, MySQL со всеми базами
FORMULA_ACTION=purge FORMULA_CONFIRM=yes curl -sSL https://getformula.ru/install.sh | bashНа Windows — -Action delete -Instance <имя> -Yes (при необходимости добавить -DropDb и/или -PurgeDeps). Полная очистка: -Action purge -Yes.
ОсторожноПолная очистка сносит все базы данных на этом MySQL, включая базы других приложений. Перед ней сделайте резервную копию — см. Обслуживание БД.
