Перейти к основному содержанию Перейти к навигации Перейти к нижнему колонтитулу
Ограниченное время: Программа Design Partner. План BUSINESS бесплатно на всю жизнь.

Локальная установка

Развёртывание сервера учётных записей и дистрибуции CLI на собственной инфраструктуре.

Rediacc может работать полностью на собственной инфраструктуре. Автономный Docker-образ включает сервер учётных записей, веб-портал, маркетинг-сайт и точку распределения CLI. Внешние зависимости от размещённых на Rediacc сервисов не требуются.

Docker образ

Загрузите автономный образ:

docker pull ghcr.io/rediacc/server:stable

Запустите со стандартными параметрами:

docker run -p 80:80 -p 443:443 ghcr.io/rediacc/server:stable

Образ предоставляет доступ к:

  • Account API по адресу /account/api/v1/
  • Веб-портал по адресу /account/
  • Маркетинг-сайт по адресу /
  • Артефакты CLI по адресу /releases/
  • Бинарные файлы Renet по адресу /bin/

Установка CLI с вашего сервера

Установите CLI непосредственно с вашего локального сервера. Скрипт установки автоматически определяет канал обновлений и направляет CLI на ваш сервер для получения обновлений.

curl -fsSL https://account.example.com/install.sh | \
  REDIACC_SERVER_URL=https://account.example.com bash

Эта одиночная команда:

  1. Загружает бинарный файл CLI из конечной точки /releases/ вашего сервера
  2. Запрашивает /account/api/v1/.well-known/server-info для обнаружения канала обновлений
  3. Записывает server.json с URL вашего сервера, каналом обновлений и ключами шифрования
  4. Настраивает rdc update для проверки обновлений на вашем сервере

Переменная REDIACC_CHANNEL не требуется. Скрипт установки автоматически читает канал из конфигурации вашего сервера.

Конфигурация CLI с именованными конфигурациями

Если вы подключаетесь к нескольким серверам (локально, production, edge), именованные конфигурации держат каждое окружение изолированным:

# Создайте конфигурацию для вашего локального сервера
rdc config init --name myserver --server https://account.example.com

# Выполните вход, используя эту конфигурацию
rdc --config myserver subscription login

# Все команды с --config используют локальный сервер
rdc --config myserver machine query --name prod-1

Каждая именованная конфигурация хранит свой URL сервера учётных записей и токен подписки. Переключение конфигураций переключает весь контекст сервера.

Окружения без доступа в сеть

Для окружений без доступа в интернет установите как URL сервера, так и пользовательский URL релизов:

curl -fsSL https://account.example.com/install.sh | \
  REDIACC_SERVER_URL=https://account.example.com \
  REDIACC_RELEASES_URL=https://account.example.com/releases \
  bash

CLI будет проверять account.example.com/releases/cli/stable/manifest.json на наличие обновлений вместо общедоступной CDN релизов.

Если сервер полностью в автономном режиме, установите CLI через npm из упакованного архива:

npm install -g https://account.example.com/npm/rediacc-cli-latest.tgz

Справочник переменных окружения

ПеременнаяИспользуетсяНазначение
REDIACC_SERVER_URLСкрипт установкиURL сервера учётных записей. Автоматически обнаруживает канал и ключи шифрования.
REDIACC_RELEASES_URLСкрипт установки, обновитель CLIПользовательская конечная точка релизов для бинарных файлов CLI. По умолчанию: https://releases.rediacc.com
REDIACC_CHANNELСкрипт установкиПереопределить канал обновлений. Автоматически определяется с сервера, если не установлено.
REDIACC_ACCOUNT_SERVERСреда выполнения CLIПереопределить URL сервера учётных записей для всех команд CLI.
RDC_UPDATE_CHANNELСреда выполнения CLIПереопределить канал обновлений для rdc update.

Конфигурация сервера

Docker-образ локального сервера использует ту же переменную ENVIRONMENT, что и размещённый сервис. Установите её в переменных окружения Docker или конфигурации оркестрации:

  • ENVIRONMENT=production (по умолчанию): стандартные ограничения ресурсов; CLI, подключающиеся к этому серверу, по умолчанию используют канал обновлений stable. Имя значения production это устаревший идентификатор развёртывания. Оба режима production и edge имеют качество production.
  • ENVIRONMENT=edge: 2X Community лимиты; CLI по умолчанию используют канал обновлений edge

См. Каналы релизов для подробностей о том, что предоставляет каждое окружение.

Что сервер сообщает CLI

Когда CLI подключается к вашему серверу, он запрашивает /.well-known/server-info для обнаружения:

  • Открытый ключ E2E шифрования: для хранения конфигурации с нулевым знанием
  • Минимальная версия CLI: блокирует подключение устаревших CLI
  • Канал обновлений: сообщает CLI, какой канал релизов использовать для обновлений
  • Окружение: какой профиль развёртывания использует сервер (standard-limits vs. edge-with-2X-limits)

Эта автоматическая конфигурация означает, что вам нужен только URL сервера. Всё остальное определяется автоматически.

Лицензирование для изолированных развёртываний

Изолированные и самостоятельно размещённые локальные серверы выдают лицензии локально, используя сертификат делегирования, подписанный главным ключом. Сертификат ограничивает локальный сервер лимитами его плана и создаёт цепь с очевидными следами изменений. См. Цепь лицензий и делегирование для криптографического дизайна (целостность цепи, обнаружение форков, доказательства аудита).

Этот раздел охватывает оперативную настройку: генерирование ключей, запрос сертификата, настройка автоматического обновления и процесс обновления в автономном режиме (изолированный от сети).

Одна подписка, одна локальная установка

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

Если вам нужны отдельные окружения (production, staging, DR, multi-region), купите одну подписку на установку. Применение единого активного сертификата кодифицирует этот договор: попытка создать второй активный сертификат возвращает 409 DELEGATION_CERT_ALREADY_ACTIVE с id существующего сертификата и инструкциями по обновлению (предпочтительно, сохраняет цепь) или отзыву и созданию (сбрасывает цепь).

1. Сгенерируйте пару ключей Ed25519 локального сервера

Локальный сервер использует отдельную пару ключей Ed25519 для подписи лицензий. Сертификат делегирования в вышестоящей системе авторизует этот конкретный открытый ключ.

# Сгенерируйте новую пару ключей
openssl genpkey -algorithm Ed25519 -out onprem-private.pem
openssl pkey -in onprem-private.pem -pubout -out onprem-public.pem

# Преобразуйте в base64 (формат, который ожидает локальный сервер в переменных окружения)
ON_PREMISE_PRIVATE_KEY=$(openssl pkey -in onprem-private.pem -outform DER | base64 -w 0)
ON_PREMISE_PUBLIC_KEY=$(openssl pkey -in onprem-private.pem -pubout -outform DER | base64 -w 0)

Сохраните приватный ключ вместе с другими секретами (например, в Docker secret или Kubernetes Secret). Он никогда не покидает локальный сервер.

2. Запросите сертификат делегирования из вышестоящей системы

Вы можете запросить сертификат из портала учётных записей вышестоящей системы тремя способами:

Вариант A: Самообслуживание клиента (рекомендуется). Войдите на портал вышестоящей системы как владелец организации или администратор и перейдите на /account/delegation-certs. Нажмите Create New, вставьте открытый ключ локального сервера (base64 SPKI), выберите срок действия (или примите значение по умолчанию для плана) и загрузите полученный файл .json.

Вариант B: Администратор (кросс-клиент). Поддержка Rediacc или администратор вышестоящей системы могут вызвать POST /admin/delegation-certs с теми же параметрами.

Вариант C: rdc CLI (планируется). Будущая команда CLI обернёт процесс портала.

Возвращённый .json выглядит так:

{
  "payload": "eyJ2ZXJzaW9uIjoxLCJzdWJzY3JpcHRpb25JZCI6...",
  "signature": "...",
  "publicKeyId": "..."
}

Срок действия сертификата регулируется политикой валидности (значения по умолчанию и потолки для каждого плана, переопределение для каждой подписки, ограничено концом подписки + 3-дневный льготный период). Ответ также включает effectiveDays и reason, поэтому вы можете видеть, почему он выбрал это значение. См. Цепь лицензий - Политика валидности для полных правил.

3. Установите сертификат на локальный сервер

Сохраните загруженный .json в известный путь и укажите локальный сервер на него:

DELEGATION_CERT_PATH=/etc/rediacc/delegation-cert.json

Или, для эфемерных / Docker-secrets рабочих потоков, встройте сертификат в виде base64 в переменную окружения:

DELEGATION_CERT_BASE64=$(base64 -w 0 < delegation-cert.json)

4. Настройте проверку вышестоящей системы + автоматическое обновление (опционально, но рекомендуется)

Если ваш локальный сервер имеет исходящий HTTPS доступ к вышестоящей системе, установите автоматическое обновление, чтобы сертификат обновлялся перед истечением без ручного вмешательства:

# Требуется для /onprem/cert-upload для проверки загруженных сертификатов против главного ключа вышестоящей системы.
# Быстро падает при запуске, если UPSTREAM_API_KEY установлен без этого.
UPSTREAM_PUBLIC_KEY="<upstream master Ed25519 SPKI public key, base64>"

# Требуется для цикла автоматического обновления. Создайте через портал:
#   Владелец организации/администратор → /account/delegation-certs → "Get auto-renew token"
# Это ЕДИНСТВЕННЫЙ способ получить api token с областью delegation:renew.
UPSTREAM_URL="https://www.rediacc.com"
UPSTREAM_API_KEY="rdt_..."

# Опциональная настройка (показаны значения по умолчанию).
AUTO_RENEW_INTERVAL_HOURS=24
RENEW_THRESHOLD_DAYS=14

Цикл автоматического обновления локального сервера запускается один раз при запуске, а затем в установленном интервале. Он использует адаптивный порог (min(env.RENEW_THRESHOLD_DAYS, ceil(certValidityDays / 3))), поэтому 15-дневный сертификат COMMUNITY обновляется за 5 дней до истечения вместо срабатывания обновления на день 1. 90-дневный сертификат BUSINESS обновляется за 14 дней до истечения (потолок, установленный в окружении).

Если обновление не удаётся, сертификат остаётся в использовании до естественного истечения. Ошибка откатывается на 1 час и записывается в ${DELEGATION_CERT_PATH}.status.json плюс открывается через GET /onprem/cert-status.

5. Обновление без выхода в сеть (нет исходящего HTTPS)

Если ваш локальный сервер не может связаться с вышестоящей системой, используйте ручной процесс передачи:

  1. Загрузите запрос обновления из портала администратора локального сервера. Как администратор локальной системы, обратитесь к GET /onprem/renewal-request. Это возвращает манифест JSON, содержащий голову локальной цепи, делегированный открытый ключ и подпись Ed25519 с очевидным следом изменений из вашего приватного ключа локального сервера.
  2. Передайте манифест вышестоящей системе через USB, зашифрованную электронную почту или любой внеполосный канал. Манифест небольшой (несколько КБ) и не содержит секретов.
  3. Обработайте манифест вышестоящей системе. Владелец организации/администратор открывает /account/delegation-certsUpload renewal request → выбирает файл манифеста. Вышестоящая система проверяет подпись манифеста против delegatedPublicKey активного сертификата (доказывает, что она пришла от держателя приватного ключа локального сервера), проверяет защиту от повторов (манифесты старше 7 дней отклоняются), затем выдаёт свежий сертификат.
  4. Загрузите новый сертификат с портала вышестоящей системы в виде файла .json.
  5. Передайте сертификат обратно на локальный сервер.
  6. Загрузите на локальный сервер через портал администратора (POST /onprem/cert-upload). Локальный сервер проверяет новый сертификат против UPSTREAM_PUBLIC_KEY и валидирует, что genesisSequence сертификата всё ещё связана с записью цепи в локальном реестре выдачи (продвижение последовательности во время передачи поддерживается - цепь расширяется естественно).

Этот весь цикл никогда не требует исходящего трафика сети с локального сервера.

Режимы отказа манифеста

КодПричинаИсправление
NO_ACTIVE_CERTВышестоящая система не имеет активного сертификата для этой подпискиВыдайте новый сертификат через процесс создания вместо обновления
DELEGATED_KEY_MISMATCHМанифестный delegatedPublicKey отличается от активного сертификатаМанифест может быть повтором с другой установки локального сервера
MANIFEST_SIGNATURE_INVALIDПодпись не проверяется против делегированного открытого ключаМанифест был изменён при передаче, или вы сгенерировали его на другом локальном сервере
MANIFEST_EXPIREDМанифест старше 7 днейСоздайте свежий запрос обновления с локального сервера

Режимы отказа загрузки сертификата

КодПричинаИсправление
CHAIN_HEAD_BEHINDgenesisSequence нового сертификата впереди голова локальной цепиВышестоящая система находится на форкнутой цепи - расследуйте
CHAIN_FORK_ON_UPLOADХеш цепи в genesisSequence сертификата не совпадает с локальным реестромЛокальная цепь расходится с вышестоящей системой - расследуйте
Signature verification failedСертификат не подписан настроенным UPSTREAM_PUBLIC_KEYПроверьте, что UPSTREAM_PUBLIC_KEY совпадает с главным открытым ключом вышестоящей системы

6. Состояние и мониторинг

Запросите состояние локального сертификата локального сервера в любое время:

curl https://onprem.example.com/account/api/v1/onprem/cert-status \
  -H "Cookie: <admin session>"

Возвращает subscriptionId, planCode, validUntil, daysUntilExpiry загруженного сертификата, плюс блок autoRenew (enabled, lastSuccessAt, lastErrorAt, lastError). Подключите это в стек мониторинга, чтобы предупредить о устаревшем lastSuccessAt или ненулевом lastError.

Для резервного копирования и аудита администратор локального сервера может также загрузить текущий загруженный подписанный сертификат через GET /onprem/cert-current (требуется повышенная сессия).

Справочник переменных окружения сертификата делегирования

ПеременнаяТребуется?Назначение
ON_PREMISE_MODEДаУстановите на true для включения подмножества маршрутов локального сервера
ON_PREMISE_PRIVATE_KEYДаПриватный ключ Base64 PKCS8 Ed25519 для делегированной подписи
ON_PREMISE_PUBLIC_KEYДаОткрытый ключ Base64 SPKI Ed25519 (должен совпадать с delegatedPublicKey сертификата)
DELEGATION_CERT_PATHОдин из этихПуть в файловой системе к подписанному сертификату JSON
DELEGATION_CERT_BASE64Один из этихСертификат JSON в кодировке Base64 (альтернатива пути файла)
UPSTREAM_PUBLIC_KEYТребуется, если установлен UPSTREAM_API_KEY, или для работы /onprem/cert-uploadBase64 SPKI главного открытого ключа вышестоящей системы. Быстро падает при запуске, если отсутствует.
UPSTREAM_URLДля автоматического обновленияБазовый URL сервера учётных записей вышестоящей системы, например https://www.rediacc.com
UPSTREAM_API_KEYДля автоматического обновленияAPI-токен с областью delegation:renew. Создайте через портал - см. Шаг 4.
AUTO_RENEW_INTERVAL_HOURSОпциональноПо умолчанию 24. Как часто проверять нужно ли обновление сертификата.
RENEW_THRESHOLD_DAYSОпциональноПо умолчанию 14. Действует как потолок для адаптивного порога 1/3 валидности.

Резюме модели угроз

Модель делегированного сертификата защищает от:

  • Поддельные лицензии: локальный сервер может подписывать только в пределах своих лимитов плана; renet отклоняет всё выходящее за границы сертификата.
  • Совместное использование сертификата между развёртываниями: расхождение цепи обнаруживается при обновлении (возвращает CHAIN_FORK_DETECTED).
  • Обход квоты через мультиустановку: применяется вышестоящей системой через одиночный активный (один сертификат на подписку).
  • Откат цепи: renet хранит самую высокую последовательность для каждой подписки и отклоняет любые данные с более низкой последовательностью.
  • Скомпрометированные учётные данные вышестоящей системы: токен bootstrap delegation:renew может быть создан только через выделенную конечную точку портала и контролируется администратором. Токен предоставляет только обновление - он не может читать или изменять какой-либо другой ресурс.
  • Атаки повтора на манифесты: манифесты старше 7 дней отклоняются.

От чего это не защищает:

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