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). Только действительно самостоятельно размещаемые модели работают офлайн. См. страницу честность и ограничения для полной границы.
Следующие шаги
- Подключите реальный сигнал: подключение источника и подключение Claude Code.
- Настройте установку: справочник конфигурации.
- Поймите модель: карта доступа чтение/запись.