Перейти до основного вмісту

Розгортання через Docker

Запускайте Sinaptic® DROID+ у продакшні за допомогою Docker. Офіційний образ є мінімальним (<15 МБ), запускається не від імені root і має вбудовану перевірку працездатності (healthcheck).

Образи

РеєстрОбразКоманда завантаження
Docker Hub (основний)sinapticai/droiddocker pull sinapticai/droid:latest
GHCR (дзеркало)ghcr.io/sinapticai/droiddocker pull ghcr.io/sinapticai/droid:latest

Теги: latest, 0.5.0, 0.5, 0 (semver), а також sha-<commit> для фіксації конкретної версії.

Швидкий старт

docker run -d \
--name droid \
-p 8080:8080 \
-p 8081:8081 \
-v ./droid.yaml:/etc/droid/droid.yaml \
-v ./configs/agents:/etc/droid/agents \
-e OPENAI_API_KEY=$OPENAI_API_KEY \
sinapticai/droid

Це запустить Sinaptic® DROID+ з такими параметрами:

  • Порт 8080: API, сумісне з OpenAI
  • Порт 8081: API керування + інтерфейс Agent Builder
  • Ваша локальна конфігурація та файли агентів підмонтовані в контейнер
  • Ключ API передається через змінну середовища

Конфігурація

Контейнер очікує два шляхи:

ШляхПризначенняТип
/etc/droid/droid.yamlКонфігурація середовищаОбов'язково (підмонтуйте свій файл)
/var/lib/droidКаталог даних (RAG, логи, аудит)Створюється автоматично

Шлях до конфігурації можна змінити за допомогою змінної DROID_CONFIG, а каталог даних — через DROID_DATA_DIR.

Змінні середовища

Передавайте ключі API та перевизначення налаштувань через змінні середовища. Файл конфігурації підтримує синтаксис ${VAR}:

docker run -d \
-e OPENAI_API_KEY=sk-... \
-e ANTHROPIC_API_KEY=sk-ant-... \
-e GEMINI_API_KEY=AIza... \
-e GROK_API_KEY=xai-... \
sinapticai/droid

Docker Compose

Для використання в продакшні рекомендується Docker Compose:

# docker-compose.yml
version: "3.8"

services:
droid:
image: sinapticai/droid:latest
ports:
- "8080:8080" # API, сумісне з OpenAI
- "8081:8081" # API керування + Builder UI
volumes:
- ./droid.yaml:/etc/droid/droid.yaml:ro
- ./configs/agents:/etc/droid/agents:ro
- droid-data:/var/lib/droid
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
restart: unless-stopped
healthcheck:
test: ["/usr/local/bin/droid", "health", "--openai-port", "8080"]
interval: 30s
timeout: 3s
start_period: 5s
retries: 3

volumes:
droid-data:

Запуск:

docker compose up -d

Перевірки працездатності (Health Checks)

Контейнер має вбудовану перевірку, яка запускає droid health кожні 30 секунд. Ви також можете перевірити стан вручну:

# Зовні контейнера
curl http://localhost:8081/health

# Через Docker inspect
docker inspect --format='{{.State.Health.Status}}' droid

Рекомендації для продакшну

Томи (Volumes)

Підмонтуйте конфігурацію в режимі "тільки для читання" (:ro) і використовуйте іменований том для даних:

-v ./droid.yaml:/etc/droid/droid.yaml:ro
-v ./configs/agents:/etc/droid/agents:ro
-v droid-data:/var/lib/droid

Безпека

За замовчуванням контейнер запускається не від імені root (образ distroless). Для додаткової безпеки:

  • Не відкривайте порт 8081 для публічного доступу — API керування та інтерфейс Builder призначені для внутрішнього використання.
  • Використовуйте секрети Docker або сховище (vault) для ключів API замість змінних середовища.
  • Увімкніть SinapticAI у режимі блокування для всіх агентів у продакшні.
# Відкривайте лише порт API для зовнішнього доступу
ports:
- "8080:8080"
# Порт 8081 залиште лише у внутрішній мережі

Ліміти ресурсів

Sinaptic® DROID+ сам по собі дуже легкий, але відповіді LLM можуть споживати пам'ять під час стрімінгу. Рекомендовані мінімуми:

deploy:
resources:
limits:
memory: 512M
cpus: "1.0"
reservations:
memory: 128M
cpus: "0.25"

Логування

За замовчуванням Sinaptic® DROID+ виводить структуровані JSON-логи в stdout. Ви можете збирати їх за допомогою вашого агрегатора логів:

logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"

Мережа

Якщо ви запускаєте кілька екземплярів Sinaptic® DROID+ або підключаєтеся до локальних LLM (Ollama, LM Studio):

services:
droid:
# ... налаштування droid ...
networks:
- droid-net

ollama:
image: ollama/ollama:latest
networks:
- droid-net

networks:
droid-net:
driver: bridge

Після цього звертайтеся до Ollama за назвою сервісу в droid.yaml:

ollama:
base_url: "http://ollama:11434/v1"

Оновлення

docker pull sinapticai/droid:latest
docker compose up -d

Контейнер не зберігає внутрішній стан — уся конфігурація міститься в підмонтованих файлах, а всі дані — у томі. Ви можете безпечно замінити контейнер у будь-який час.

Збірка з вихідного коду

Якщо ви хочете зібрати образ Docker самостійно:

git clone https://github.com/SinapticAI/droid-community.git
cd droid-community
docker build -t droid:local .

Вирішення проблем

Контейнер миттєво завершує роботу: Перевірте логи командою docker logs droid. Найпоширеніша причина: відсутній або неправильний файл droid.yaml.

Перевірка працездатності (healthcheck) не проходить: Переконайтеся, що порт 8080 доступний усередині контейнера, а файл конфігурації є валідним YAML.

Неможливо підключитися до локальної LLM: Якщо Ollama або LM Studio працюють на хост-машині, використовуйте host.docker.internal замість localhost:

ollama:
base_url: "http://host.docker.internal:11434/v1"

Доступ до томів заборонено (Permission denied): Контейнер запускається не від імені root. Переконайтеся, що підмонтовані каталоги доступні для читання користувачу з UID 65534 (nobody).