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,83 @@
|
||||
# dsh (DeepSeek Harness) — сборка archeon
|
||||
|
||||
Самодостаточный репозиторий: Docker-образ [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)
|
||||
(`@deepseek-ai/dsh`) + **обновление кода dsh прямо из работающего контейнера**
|
||||
(как плагины, без пересборки) + **path/user-агностичный docker-compose** как
|
||||
пример для разработчиков.
|
||||
|
||||
## Что внутри
|
||||
|
||||
| Путь | Что это |
|
||||
|---|---|
|
||||
| `upstream/` | вендоренный исходник Docker-образа ([yjrszcq/dsh-docker](https://github.com/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` | как работает обновление изнутри (анатомия платформы) |
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
```sh
|
||||
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 «как плагины» (главная фича)
|
||||
|
||||
```sh
|
||||
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-режиме сборки не проверяется — версию можно задать напрямую:
|
||||
|
||||
```sh
|
||||
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`.
|
||||
Reference in new issue
Block a user