5.7 KiB
dsh (DeepSeek Harness) — сборка archeon
Самодостаточный репозиторий: Docker-образ DeepSeek Harness
(@deepseek-ai/dsh) + обновление кода dsh прямо из работающего контейнера
(как плагины, без пересборки) + path/user-агностичный docker-compose как
пример для разработчиков.
Что внутри
| Путь | Что это |
|---|---|
upstream/ |
вендоренный исходник Docker-образа (yjrszcq/dsh-docker, MIT; см. upstream/PROVENANCE.md) |
docker-compose.yml |
path/user-агностичный стенд: dsh + вложенный dind + воркспейс |
.env.example |
все настройки в одном месте (пути, порты, ключи) |
scripts/update-dsh.sh |
обновление dsh изнутри контейнера до npm latest (пробация + автокат) |
scripts/update-plugins.sh |
установка/обновление плагинов профиля web + фикс code-server |
scripts/build-image.sh |
пересборка образа под конкретную версию dsh |
docs/UPDATE-MECHANISM.md |
как работает обновление изнутри (анатомия платформы) |
Быстрый старт
cp .env.example .env # вписать DEEPSEEK_API_KEY
docker compose -p dsh up -d
docker compose -p dsh exec dsh dsh-platform access generate-key # одноразовый ключ админа
xdg-open http://127.0.0.1:3080
Все пути по умолчанию относительные: данные — ./data/, проекты — ./workspace/
(рядом с compose-файлом). Перенос на другой хост/пользователя: cp -r всего
каталога (или переопределите DSH_DATA_DIR/DSH_WORKSPACE_DIR в .env).
Контейнер работает под uid 1000; если ваш uid другой:
docker compose -p dsh --profile fix-perms run --rm fixperms.
Обновление dsh «как плагины» (главная фича)
scripts/update-dsh.sh # до npm latest: download → probation → commit
scripts/update-dsh.sh check # только посмотреть installed / available
- Ставится в персистентный volume
/data/platform→ переживаетdown/upи пересоздание контейнера. - Важно: механизм обновления живёт в stage0/management из образа, поэтому
работает только у живого контейнера (обновлять «выключенный» контейнер нельзя —
сначала
up -d). При переходе на существенно новый образ заново проверьте патчи окружения (upstream/container/environment/resources/patches/) против новой версии dsh: образ собирается с dev-патчами, которые якорятся на внутренностиbin.js/profile-boot(в upstream пин версий стоит именно поэтому). Наши патчи толерантны к 0.1.x и 0.2.x — проверены на обеих ветках. - Experimental-канал платформы качает официальный tarball с npm (canonical
URL, sha256, без редиректов) и активирует новую версию с пробацией
(
DSH_EXPERIMENTAL_PROBATION_SECONDS, по умолчанию 120 c) и автооткатом при провале здоровья. - Тот же механизм в UI: Management Console
/_dsh_platform/console/(Update → channel experimental → Update). - Плагины профиля web живут в
/data/dshи обновляются отдельно (scripts/update-plugins.sh).
Пересборка образа под конкретную версию
Community-пин latestSupportedDsh (в upstream-исходнике = 0.1.5-rc.2) в
dev-режиме сборки не проверяется — версию можно задать напрямую:
scripts/build-image.sh 0.2.0-rc.2 --push # тегирует <repo>:<версия> + :latest и пушит
Почему не официальный образ
Официального образа у DeepSeek Harness нет; community-образ szcq/deepseek-harness
застрял на 0.1.5-rc.2 (пин автора). Этот репозиторий собирает свой образ из
того же исходника с актуальной версией и держит механизм обновления изнутри,
не дожидаясь пересборки.
Изоляция песочниц агента
Контейнеры, которые запускает агент dsh, живут во вложенном dind
(DOCKER_HOST=tcp://dind:2375) — отдельный демон, отдельные образы/тома
(./data/dind/). Каталог проектов смонтирован в dind под тем же путём
/workspace, поэтому агент может бинд-маунтить свои песочницы на файлы
воркспейса. Порт web UI по умолчанию слушает только 127.0.0.1 — для доступа
из LAN настройте DSH_LISTEN_ADDRESS + DSH_TRUSTED_HOSTS.