Перейти к содержимому

Машинный перевод. Авторитетным источником является английская версия; проверка носителем языка ещё не выполнена.

Начало работы

Установка и самостоятельное размещение

Продакшен-установка единого бинарного файла Olivares AI — без учётных данных по умолчанию, TLS включён по умолчанию, пробы /readyz и /livez.

Обновлено:

Olivares AI поставляется как один статический бинарный файл со встроенной веб-консолью. Плоскость управления — часть, которая наблюдает, управляет и аудирует AI-агентов на вашей инфраструктуре — работает в вашем периметре и может быть изолирована от сети. Эта страница описывает продакшен-установку: один хост, безопасные настройки по умолчанию, пробы здоровья и выбор хранилища, который важен для мультитенантных развёртываний.

Если вы хотите сначала просто посмотреть, быстрый старт запускает синтетическое демонстрационное окружение примерно за пять минут. Эта страница — реальная позиция.

Получите бинарный файл

Нет публичного URL для скачивания. Вы получаете бинарный файл olivares одним из двух способов:

  • Подписанный артефакт релиза — верифицируйте его перед запуском. См. верификация релиза для цепочки подписи и провенанса.
  • Сборка из исходников — хранилище на чистом Go SQLite, поэтому C-тулчейн не нужен. task build создаёт ./bin/olivares со встроенным веб-интерфейсом и коннекторами первой стороны; olivares version подтверждает, что вы собрали.

В любом случае вы получаете один файл. Установите его и создайте выделенного пользователя сервиса вместо запуска от root.

Безопасные настройки по умолчанию

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

По умолчаниюПоведение
Учётные данныеНет. Первый запуск печатает одноразовый токен настройки (префикс olst_); вы создаёте первого администратора с его помощью.
TLSВключён. Без --tls-cert/--tls-key движок генерирует самоподписанный сертификат в каталоге данных и логирует его fingerprint_sha256. --insecure (открытый текст) только для локальной разработки.
ПривязкаLoopback. --listen по умолчанию 127.0.0.1:8443 и gRPC 127.0.0.1:8444; открывайте их намеренно, за собственным ingress и TLS.

Минимальный первый запуск:

olivares serve \
  --listen 127.0.0.1:8443 \
  --grpc-listen 127.0.0.1:8444 \
  --data-dir /var/lib/olivares

Каталог данных содержит хранилище, ключ подписи аудита и материалы TLS. Делайте его резервную копию и защищайте ограничительными правами доступа.

Используйте одноразовый токен настройки

Свежая установка не имеет учётных данных по умолчанию. При первом запуске, пока пользователей нет, движок генерирует одноразовый токен настройки и выводит его только в stdout — никогда в логи:

=== FIRST-BOOT SETUP ===
No users exist yet. Create the first administrator:
  POST /v1/setup  {"token":"olst_…","email":"you@example.com","password":"..."}
This token is shown ONCE and is single-use.
========================

Хранится только хеш токена, поэтому пропущенный токен невозможно восстановить и перезапуск не печатает его повторно. На совершенно новой установке без пользователей удаление сохранённого токена из каталога данных и перезапуск генерирует новый. Это восстановление работает только пока пользователей нет, поэтому оно никогда не может перехватить настроенную установку.

После создания первого администратора эндпоинт настройки закрывается навсегда.

Пробы здоровья

HTTP-слушатель предоставляет две пробы с намеренно разной семантикой. Подключите их к соответствующим пробам Kubernetes — путаница вызывает циклы перезапуска или устаревшую маршрутизацию.

/livez — это liveness. Он не проверяет зависимости: если процесс может ответить, он жив. Сбой зависимости никогда не должен вызывать перезапуск по liveness.

curl -ks https://127.0.0.1:8443/livez
# {"status":"ok"}

/readyz — это readiness, и это сигнал доступности, по которому балансировщик нагрузки должен отключать. Он возвращает 503 в двух случаях, различимых в теле для ваших логов:

  • Хранилище недоступно{"status":"unavailable","store":"down"}. Пинг хранилища выполняется с коротким таймаутом, поэтому зависший бэкенд отключает инстанс, а не подвешивает.
  • Не активный писатель{"status":"standby","store":"up","leader":false}. В активно-пассивном кластере standby отвечает 503 здесь, чтобы Service прекратил маршрутизацию к нему, не перезапуская его (это задача /livez — горячий standby должен оставаться запущенным для перехвата). Когда лидер умирает, standby получает лидерство и это переключается на 200, поэтому трафик автоматически следует за новым лидером.

Когда движок готов, он возвращает 200:

{"status":"ok","store":"up","leader":true,"setup_required":false}

setup_required сообщается для наблюдаемости, но не ломает readiness — свежезапущенный движок готов к настройке. На одноузловом хранилище писатель всегда активен, поэтому /readyz просто отслеживает доступность хранилища.

Выбор хранилища

Хранилище выбирается с помощью --engine. Выбирайте по топологии, а не по предпочтению.

SQLite (по умолчанию)

Встроенное хранилище SQLite на чистом Go не требует ничего внешнего и является правильным выбором для одного узла, лаборатории, небольшого окружения или установки в изолированной сети. Всё состояние хранится в каталоге данных.

Postgres (мультитенант)

Для многоузловых или мультитенантных развёртываний используйте Postgres. Не подключайтесь как суперпользователь или как роль с BYPASSRLS. Изоляция тенантов обеспечивается FORCE ROW LEVEL SECURITY, и Postgres молча обходит всю безопасность на уровне строк для таких ролей — что оставляет только предикат приложения между тенантами. Движок отказывается запускаться с привилегированной ролью, если вы явно не передадите --allow-privileged-db-role (только для однотенантных или одноразовых окружений).

Вместо этого создайте выделенную роль с минимальными привилегиями — NOSUPERUSER NOBYPASSRLS NOCREATEROLE NOCREATEDB. Она владеет собственной базой данных и может применять миграции схемы; FORCE ROW LEVEL SECURITY применяет политику тенанта даже к владельцу таблицы, поэтому владеющая, но не обходящая роль остаётся полностью изолированной.

olivares serve --engine postgres \
  --dsn "postgres://olivares_app:$DB_PASSWORD@db:5432/olivares?sslmode=verify-full" \
  --data-dir /var/lib/olivares

Используйте sslmode=verify-full и надёжный пароль SCRAM. Действительно кросс-тенантные системные чтения (список организаций, покрытие мультитенантных контрольных точек) требуют отдельной роли: создайте NOSUPERUSER BYPASSRLS — минимальные привилегии, но с возможностью чтения между тенантами — и укажите --admin-dsn на неё. Пропустите для однотенантных развёртываний, и эти чтения просто ограничены RLS.

Перед тем как считать настройку завершённой

Две вещи определяют, переживут ли ваши доказательства инцидент:

  • Сохраните ключ подписи аудита вне хоста. Он подписывает аудиторский журнал только для добавления; если он потерян, журнал больше нельзя верифицировать. Движок предупреждает при первом запуске — принудительного эскроу нет.
  • Храните копию публичного ключа журнала вне хоста. Эта внешняя копия — то, что делает верификацию аудита устойчивой после компрометации хоста.

Затем настройте реальные бэкапы каталога данных.

Что где работает

Только плоскость управления — ваша для размещения — в изолированной сети, если выберете. Сборщики (плоскость данных) всегда работают на вашей инфраструктуре. Одна оговорка, которую стоит сказать прямо: Olivares управляет и аудирует использование Claude, но инференс Claude сам по себе не самостоятельно размещается — он обращается к API Anthropic (напрямую или через Bedrock, Vertex или Foundry). Только действительно самостоятельно размещаемые модели работают офлайн. См. страницу честность и ограничения для полной границы.

Следующие шаги

Поиск в документации