mirror of
https://github.com/okxlin/appstore.git
synced 2026-09-25 16:01:04 +00:00
162 lines
6.3 KiB
Markdown
162 lines
6.3 KiB
Markdown
# OpenCode Workstation
|
||
|
||
## 产品介绍
|
||
|
||
这是一个按 1Panel v2 应用商店目录组织的 OpenCode 运行环境。容器封装了持久化存储、运行时模式切换、oh-my-opencode 自动安装等能力,可在 1Panel 上快速部署一个带 Web UI 或 ACP 接口的 OpenCode 工作节点。
|
||
|
||
## 主要功能
|
||
|
||
- **持久化存储**:工作区、配置、缓存、运行时数据分别独立挂载,容器重建不丢失
|
||
- **双模式运行**:`serve`(Web UI)和 `acp`(agent<->agent 协议)两种模式
|
||
- **oh-my-opencode 集成**:支持单次执行或持久化安装,配套 DCP / GPT Unlocked 插件可选
|
||
- **多 provider 支持**:OpenAI、Anthropic、OpenRouter、Gemini 等 API Key / Base URL 均可通过表单配置
|
||
- **Docker 套接字可选**:通过表单可配置是否挂载宿主机 Docker 套接字
|
||
|
||
## 访问说明
|
||
|
||
- Web / serve 默认端口:`http://<host>:4096`
|
||
- ACP 默认端口:`8765`
|
||
- `serve` 模式适合通过 1Panel 反向代理后再对外提供访问
|
||
- `acp` 端口用于 ACP transport,不适合用浏览器页面探活
|
||
|
||
## 环境变量
|
||
|
||
所有敏感信息(API Key 等)通过表单中的 `password` 字段填写,写入 `.env` 文件。容器启动后由 `entrypoint.sh` 动态注入 OpenCode 配置。
|
||
|
||
## 内部升级指南
|
||
|
||
这个镜像的升级分成两部分:
|
||
|
||
- **OpenCode userland**:升级 `opencode-ai` 本体
|
||
- **oh-my-opencode**:刷新插件、安装脚本和相关配置逻辑
|
||
|
||
### 重建容器会更新什么
|
||
|
||
重建容器会拉取最新镜像,但**不会保证自动升级已持久化的 OpenCode 本体**。
|
||
|
||
原因是容器启动时:
|
||
- `OPENCODE_BOOTSTRAP=1` 只会在 `opencode` 不存在时执行首次安装
|
||
- 如果 `/data/opencode` 里已经有现成的 `opencode`,bootstrap 会直接跳过
|
||
- `OMO_AUTO_INSTALL=1` 则会在每次启动时重新执行 `oh-my-opencode` 安装/刷新流程
|
||
|
||
所以真实效果是:
|
||
- **重建容器**:一定会更新镜像层
|
||
- **OpenCode 本体**:已存在时默认不会自动升级
|
||
- **oh-my-opencode**:开启自动安装时会刷新
|
||
|
||
### 手动升级 OpenCode userland
|
||
|
||
如果你要升级已持久化的 OpenCode 本体,应直接在容器内执行:
|
||
|
||
```bash
|
||
docker exec -it <container_name> bash
|
||
/app/scripts/update-opencode-userland.sh
|
||
```
|
||
|
||
升级完成后,可检查版本文件:
|
||
|
||
```bash
|
||
cat /data/state/oh-my-opencode-bootstrap/opencode.version
|
||
```
|
||
|
||
### 刷新 oh-my-opencode
|
||
|
||
如果你希望同步最新的 `oh-my-opencode` 安装逻辑、插件注册和配置刷新,有两种方式:
|
||
|
||
#### 方式一:重建容器
|
||
|
||
前提:
|
||
- `启动时自动安装 oh-my-opencode = true`
|
||
|
||
执行:
|
||
1. 打开 1Panel → 已安装应用 → OpenCode Workstation
|
||
2. 点击 **重建**
|
||
|
||
#### 方式二:容器内手动刷新
|
||
|
||
```bash
|
||
docker exec -it <container_name> bash
|
||
bunx oh-my-opencode install --no-tui ...
|
||
bunx oh-my-opencode doctor
|
||
```
|
||
|
||
### 什么时候用哪种方式
|
||
|
||
- **只更新 OpenCode 本体**:执行 `/app/scripts/update-opencode-userland.sh`
|
||
- **只刷新 oh-my-opencode 行为**:重建容器,或手动重新执行 `bunx oh-my-opencode install ...`
|
||
- **安装指定版本**:
|
||
- `OpenCode Package` 主要影响首次安装,或清空 `/data/opencode` 后重新安装
|
||
- `oh-my-opencode Package` 可配合重建容器或手动安装流程生效
|
||
- **镜像层也要更新**:在 1Panel 里重建容器
|
||
|
||
### 在 1Panel 里重建容器
|
||
|
||
1. 1Panel 应用商店 → 已安装应用 → OpenCode Workstation → 参数/重建
|
||
2. 按当前表单参数重新创建容器
|
||
|
||
### 持久化数据说明
|
||
|
||
容器数据按功能拆分挂载,重建容器不会丢失:
|
||
- `APP_DATA_DIR_1`(./data/workspace):工作区代码
|
||
- `APP_DATA_DIR_2`(./data/config):OpenCode 配置
|
||
- `APP_DATA_DIR_3`(./data/cache):npm/opencode 缓存
|
||
- `APP_DATA_DIR_4`(./data/runtime):运行时数据
|
||
|
||
销毁容器时若勾选"删除数据目录"才会丢失持久化数据。
|
||
|
||
## 表单填写指南
|
||
|
||
### 必填字段
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| Serve Port | Web UI 访问端口,默认 4096 |
|
||
| ACP Port | ACP 协议端口,默认 8765 |
|
||
| 时区 | 容器时区,默认 `Asia/Shanghai` |
|
||
| 工作区/配置/缓存/运行时挂载目录 | 四个数据持久化目录,默认挂载到 `./data/` 下 |
|
||
| 运行模式 | `serve`(Web UI)或 `acp`(协议模式) |
|
||
|
||
### oh-my-opencode 选项
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| Bootstrap OpenCode on Start | 首次运行此开关打开即自动安装 OpenCode 本体 |
|
||
| 启动时自动安装 oh-my-opencode | 默认开启,自动安装 oh-my-opencode 及其配套插件 |
|
||
| Install DCP Plugin | 启用 DCP(分布式代码处理)插件,默认开启 |
|
||
| Install GPT Unlocked Plugin | 启用 GPT Unlocked 插件,默认开启 |
|
||
| Claude / Gemini / Copilot Install Mode | 控制各模型 provider 的安装模式 |
|
||
| Extra Install Args | 传递给 oh-my-opencode 安装脚本的额外参数 |
|
||
| OpenCode Package | 默认为 `opencode-ai`;可改为 `opencode-ai@版本`,主要用于首次安装或重装 |
|
||
| oh-my-opencode Package | 默认为 `oh-my-opencode`;可改为 `oh-my-opencode@版本` |
|
||
|
||
### API Key 填写
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| OpenAI API Key + Base URL | 填写 OpenAI 或兼容第三方接口(vLLM、LiteLLM、Ollama 等)的 Key 与地址 |
|
||
| Anthropic / OpenRouter / Gemini | 对应 provider 的 Key 与自定义地址(若有) |
|
||
| GitHub Token | 用于 Git 操作(拉取私有仓库等) |
|
||
| Git Author / Committer | 容器内 Git 提交的作者信息 |
|
||
|
||
### 高级选项
|
||
|
||
| 字段 | 说明 |
|
||
|---|---|
|
||
| OpenCode Default Model / Small Model | 覆盖 OpenCode 默认使用的模型 ID |
|
||
| OpenCode Provider ID Override | 覆盖默认 provider ID |
|
||
| OpenCode Extra Plugins | 额外注册的 OpenCode 插件(逗号分隔的 npm 包名) |
|
||
| Docker 套接字路径 | 留空等于不挂载 Docker 套接字 |
|
||
|
||
## Introduction
|
||
|
||
A persistent OpenCode workstation packaged as a 1Panel v2 app. Supports serve and ACP modes, oh-my-opencode auto-install, and multi-provider LLM configuration through the deployment form.
|
||
|
||
## Features
|
||
|
||
- Persistent volumes for workspace, config, cache, and runtime data
|
||
- Switchable serve (Web UI) and ACP (agent protocol) modes
|
||
- oh-my-opencode integration with DCP and GPT Unlocked plugins
|
||
- Multi-provider support via form fields (OpenAI, Anthropic, OpenRouter, Gemini)
|
||
- Optional Docker socket mount
|
||
- git author identity configuration
|