Files
dsh/docker-compose.yml
hermes 2757302e79
Build and Publish dsh image / Build, smoke-test, publish (push) Failing after 8m21s
defaults: image lives at archeon/dsh (CI-published); docs updated
2026-10-01 20:51:03 +00:00

106 lines
6.0 KiB
YAML

# ════════════════════════════════════════════════════════════════════════════
# DeepSeek Harness (dsh) + вложенный dind для песочниц агента
# ════════════════════════════════════════════════════════════════════════════
# Path/user-агностично: ВСЕ пути хоста — относительные (рядом с этим файлом)
# и переопределяются через .env. Работает у любого пользователя на любом хосте.
#
# Быстрый старт:
# cp .env.example .env # и вписать DEEPSEEK_API_KEY
# docker compose -p dsh up -d
# docker compose -p dsh exec dsh dsh-platform access generate-key # ключ первого входа
# UI: http://127.0.0.1:${DSH_PORT:-3080}
#
# Обновление dsh изнутри контейнера (как плагины):
# scripts/update-dsh.sh # до npm latest, с пробацией и откатом
# Management Console: /_dsh_platform/console/
#
# Права на каталогах данных: контейнер работает под uid 1000 (node).
# Если ваш uid ≠ 1000: docker compose -p dsh --profile fix-perms run --rm fixperms
# ════════════════════════════════════════════════════════════════════════════
services:
dsh:
image: ${DSH_IMAGE:-gitea.archeon.io/archeon/dsh:latest}
# build: альтернатива — собрать прямо из этого репо:
# docker build --build-arg DSH_VERSION=<версия|latest> -t dsh-local upstream/
# # затем DSH_IMAGE=dsh-local в .env
container_name: ${DSH_CONTAINER_NAME:-dsh}
restart: unless-stopped
depends_on:
dind:
condition: service_started
ports:
- "${DSH_LISTEN_ADDRESS:-127.0.0.1}:${DSH_PORT:-3080}:3080" # web UI + management console
- "${DSH_LISTEN_ADDRESS:-127.0.0.1}:${DSH_EDITOR_PORT:-18500}:18500" # code-server редактора
environment:
DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-}
DSH_HOME: /data/dsh
DSH_PLATFORM_DATA: /data/platform
DSH_DEFAULT_WORKSPACE: ${DSH_DEFAULT_WORKSPACE:-/workspace}
DSH_TRUSTED_HOSTS: ${DSH_TRUSTED_HOSTS:-}
DSH_TELEMETRY_DISABLED: ${DSH_TELEMETRY_DISABLED:-true}
DSH_EXPERIMENTAL_PROBATION_SECONDS: ${DSH_EXPERIMENTAL_PROBATION_SECONDS:-120}
DOCKER_HOST: tcp://dind:2375 # песочницы агента — во вложенный dind
# Опциональная память агентов (раскомментировать при необходимости):
# OPENVIKING_URL: ${OPENVIKING_URL}
# OPENVIKING_API_KEY: ${OPENVIKING_API_KEY}
group_add:
- "dsh-sudo-${DSH_SUDO_ENABLED:-false}"
volumes:
# Данные — относительные каталоги рядом с compose-файлом (переопределяются .env):
- ${DSH_DATA_DIR:-./data}/home:/home/node # HOME: .dsh-editor, кэши, user-data
- ${DSH_DATA_DIR:-./data}/dsh:/data/dsh # DSH_HOME: профили, ПЛАГИНЫ, settings.yaml
- ${DSH_DATA_DIR:-./data}/platform:/data/platform # состояние платформы: ОБНОВЛЕНИЯ, откаты
- ${DSH_WORKSPACE_DIR:-./workspace}:/workspace # проекты (= DSH_DEFAULT_WORKSPACE)
# Глобальные правила агента (опционально): раскомментировать и положить AGENTS.md
# рядом с compose-файлом:
# - ./AGENTS.md:/data/dsh/AGENTS.md:ro
networks: [dshnet]
healthcheck:
test: ["CMD", "curl", "--fail", "--silent", "--noproxy", "*", "http://127.0.0.1:3080/_dsh_gateway/health"]
interval: 30s
timeout: 5s
start_period: 60s
retries: 3
# Вложенный docker-демон: контейнеры, которые запускает агент dsh.
dind:
image: docker:29-dind
container_name: ${DSH_DIND_NAME:-dsh-dind}
restart: unless-stopped
privileged: true
environment:
DOCKER_TLS_CERTDIR: "" # plain tcp://2375 — только внутри сети dshnet
command:
- --host=tcp://0.0.0.0:2375
- --default-address-pool=base=10.200.0.0/16,size=24
volumes:
- ${DSH_DATA_DIR:-./data}/dind:/var/lib/docker # образы/тома песочниц — персистентны
- ${DSH_WORKSPACE_DIR:-./workspace}:/workspace # ТЕ ЖЕ проекты под ТЕМ ЖЕ путём:
# агент монтирует /workspace/... в песочницы
networks: [dshnet]
# Разовый помощник: чинит владельца каталогов данных под uid 1000 (контейнерный node).
# Запуск: docker compose -p dsh --profile fix-perms run --rm fixperms
fixperms:
image: alpine:3.20
profiles: ["fix-perms"]
user: "0:0"
entrypoint: ["sh", "-c"]
command:
- |
echo "Fixing ownership of data dirs to uid 1000 (container user 'node')...";
chown -R 1000:1000 /fix/home /fix/dsh /fix/platform /fix/workspace /fix/dind 2>/dev/null || true;
chgrp -R 1000 /fix/home /fix/dsh /fix/platform /fix/workspace /fix/dind 2>/dev/null || true;
echo "Done."
volumes:
- ${DSH_DATA_DIR:-./data}/home:/fix/home
- ${DSH_DATA_DIR:-./data}/dsh:/fix/dsh
- ${DSH_DATA_DIR:-./data}/platform:/fix/platform
- ${DSH_DATA_DIR:-./data}/dind:/fix/dind
- ${DSH_WORKSPACE_DIR:-./workspace}:/fix/workspace
networks:
dshnet:
driver: bridge