Wardhold

Свой сервер

Один процесс рядом с PostgreSQL

Продукт с самого начала проектировался под коробку и закрытый контур: REST, MCP, веб-кабинет, планировщик и доставка вебхуков живут в одном процессе. Ни брокера, ни Redis, ни внешнего CDN.

Порядок установки

# 1. база данных: PostgreSQL 16 и пустая база wardhold
export WARDHOLD_DATABASE_URL=postgres://wardhold@localhost:5432/wardhold

# 2. мастер-ключ инстанса — хранить отдельно от базы и в бэкапе
export WARDHOLD_MASTER_KEY=$(openssl rand -hex 32)

# 3. миграции применяет сам бинарь, отдельного инструмента нет
./wardhold migrate
export WARDHOLD_ADDR=127.0.0.1:8080
./wardhold serve

# 4. первый токен для потребителя
./wardhold token create --help

Схему обновляет тот же бинарь при выкатке, поэтому порядок «миграции до подъёма нового кода» соблюдается автоматически.

Что важно в закрытом контуре

Никаких внешних вызововработает

Шрифты и веб-кабинет вшиты в бинарь, проверок лицензии по сети нет, обновления ставятся заменой файла.

Мастер-ключ и бэкапработает

Значения зашифрованы ключом инстанса: потеря ключа равна потере данных. Ключ обязан лежать в офлайн-копии отдельно от копий базы.

Резервные копии по расписаниюработает

Сам бинарь снимает полную копию базы в каталог или S3, шифрует её парольной фразой и подписывает; restore возвращает её в пустой инстанс со сверкой, а проверка восстановления живёт в тестах продукта.

Ротация ключаработает

Команда rotate-key перезаворачивает рабочие ключи порциями на работающем инстансе: содержимое не перечитывается, старый ключ выводится после проверки status. Ключ подписи заворачивается вместе со всеми.

Кластер из нескольких узловEnterprise

Для отказоустойчивости и общих лимитов запросов между узлами — коммерческое издание.

Как получить сборку

Community Edition выпускается под AGPLv3. Публикация репозитория и бинарных релизов готовится; до неё сборку и инструкцию присылаем по запросу на hello@wardhold.ru — напишите, какая платформа нужна (Linux amd64 или arm64) и в каком виде удобнее: бинарь, образ или архив для внутреннего зеркала.

Коммерческое издание собирается отдельным артефактом: в сборке Community коммерческого кода нет физически, а не отключён флагом.