dsh 0.2.0-rc.2: in-container update (experimental channel), path-agnostic compose, upstream patches adapted to 0.1.x/0.2.x
This commit is contained in:
commit
e6dcef9bf5
302 files changed
+75178
No files matched your search
@@ -0,0 +1,105 @@
|
||||
# ════════════════════════════════════════════════════════════════════════════
|
||||
# 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
|
||||
Reference in new issue
Block a user