# opencode_web **Repository Path**: wiseai/opencode_web ## Basic Information - **Project Name**: opencode_web - **Description**: 使用docker创建web的opencode - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-11 - **Last Updated**: 2026-09-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenCode AI Docker (v2) 在 Docker 容器中运行 OpenCode AI v2 服务的配置。 ## 版本标签说明 - **`v1`**:对应 OpenCode AI **v1** - **`v2`**:对应 OpenCode AI **v2** ## 功能特性 - 基于 `debian:stable-slim` 基础镜像,内置 Node.js、Go、Git、curl 等开发环境 - 使用阿里云 Debian 镜像源、npmmirror npm 源、goproxy.cn Go 代理加速依赖下载 - 全局安装 `@opencode/cli@latest` - 通过环境变量灵活配置用户、端口、数据目录与 Web 服务认证 - 数据、状态、配置、共享数据目录可持久化挂载 ## 环境变量 | 变量 | 默认值 | 说明 | |------|--------|------| | OC_USER_NAME | code | 用户名 | | OC_UID | 1000 | 用户 ID | | OC_GID | 1000 | 用户组 ID | | OC_PORT | 8080 | 容器暴露端口 | | OC_DATA_DIR | ./data | 数据目录(挂载到容器内 `/home//data`) | | OC_SHARE_DIR | ./config/share | 共享数据目录(挂载到容器内 `~/.local/share/opencode`,存放 SQLite 数据库、日志、快照等) | | OC_STATE_DIR | ./config/state | 状态目录(挂载到容器内 `~/.local/state/opencode`) | | OC_CONFIG_DIR | ./config/opencode | OpenCode 配置目录(挂载到容器内 `~/.config/opencode`) | | NODE_FILE | - | Node.js 安装包文件名(如 `node-v24.21.0-linux-arm64.tar.xz`,由 run.sh 自动查找) | | GO_FILE | - | Go 安装包文件名(如 `go1.27.1.linux-arm64.tar.gz`,由 run.sh 自动查找) | | OC_SERVER_USERNAME | - | Web 服务用户名(可选) | | OC_SERVER_PASSWORD | - | Web 服务密码(可选) | ## 快速开始 ### 方式一:使用 run.sh 脚本(推荐) 脚本会自动查找安装包、读取 `.env` 配置并完成构建与启动: ```bash # 确保目录下有 node-*.tar.xz 和 go*.tar.gz 文件 # 可选:复制 .env.example 为 .env 并配置环境变量 ./run.sh ``` ### 方式二:手动运行 ```bash # 默认构建运行 docker compose up -d # 指定端口 OC_PORT=8080 docker compose up -d # 指定用户 OC_USER_NAME=myuser OC_UID=1001 OC_GID=1001 docker compose up -d # 设置 Web 服务认证 OC_SERVER_USERNAME=user OC_SERVER_PASSWORD=pass docker compose up -d # 重新构建(不使用缓存) docker compose build --no-cache && docker compose up -d ``` ## 常用命令 ```bash # 构建镜像 docker compose build # 启动容器 docker compose up -d # 停止容器 docker compose down # 查看日志 docker compose logs -f # 查看运行中的容器 docker ps # 检查容器详情 docker inspect opencode-ai # 清理未使用的镜像 docker image prune -f ``` ## 调试 ```bash # 进入容器 Shell docker exec -it opencode-ai /bin/bash # 查看容器资源使用 docker stats opencode-ai # 查看容器进程 docker top opencode-ai # 检查容器网络配置 docker inspect opencode-ai --format='{{json .NetworkSettings}}' ``` ## 服务启动机制 容器启动时由 `entrypoint.sh` 完成以下配置后启动服务: 1. 若设置了 `OC_SERVER_PASSWORD`,则调用 `opencode service set password` 设置访问密码 2. 设置监听地址 `opencode service set hostname 0.0.0.0` 3. 设置监听端口 `opencode service set port "${OC_PORT:-8080}"`(默认 8080,随 `.env` 中 `OC_PORT` 动态变化) 4. 启动服务 `opencode service start` 访问地址:`http://localhost:` > 说明:服务监听端口由容器环境变量 `OC_PORT` 动态读取(默认 8080),无需修改 `entrypoint.sh`,只需在 `.env` 中调整 `OC_PORT` 即可。 ## 访问服务 启动并设置 `OC_SERVER_PASSWORD` 后,通过配置的用户名/密码访问 Web 界面: ``` 访问地址:http://localhost:8080 用户名:OC_SERVER_USERNAME 的值 密码:OC_SERVER_PASSWORD 的值 ``` 未设置密码时可直接访问(无认证保护)。 ### .env 配置文件 复制 `.env.example` 为 `.env` 并修改配置: ```bash cp .env.example .env # 编辑 .env 文件 ``` `.env.example` 内容示例: ```bash OC_USER_NAME=code OC_UID=1000 OC_GID=1000 OC_PORT=8080 OC_DATA_DIR=./data OC_SHARE_DIR=./config/share OC_STATE_DIR=./config/state OC_CONFIG_DIR=./config/opencode OC_SERVER_USERNAME= OC_SERVER_PASSWORD= ``` > 注意:目录类路径的最后一个目录后不要加 `/`。 ## 目录挂载说明 | 宿主目录 | 容器内路径 | 用途 | |----------|-----------|------| | OC_DATA_DIR | `/home//data` | 工作数据目录 | | OC_SHARE_DIR | `~/.local/share/opencode` | SQLite 数据库、日志、快照等共享数据 | | OC_STATE_DIR | `~/.local/state/opencode` | 服务状态(如 service.json) | | OC_CONFIG_DIR | `~/.config/opencode` | OpenCode 配置与技能(skills) | ## 故障排除 - **容器启动失败**:使用 `docker compose logs` 查看日志 - **端口被占用**:修改 OC_PORT 环境变量 - **权限问题**:检查 UID/GID 是否与主机用户一致,确保挂载目录可写 - **找不到安装包**:使用 run.sh 时,请确认目录下有 `node-*.tar.xz` 和 `go*.tar.gz` 文件 ## 项目结构 ``` . ├── Dockerfile # 容器定义(多阶段、最小化镜像) ├── docker-compose.yml # 服务编排 ├── entrypoint.sh # 容器入口脚本(服务配置与启动) ├── run.sh # 构建 & 运行辅助脚本 ├── README.md # 本文档 ├── AGENTS.md # Agent 说明 ├── .env.example # 环境变量示例 ├── data/ # 默认数据目录(可选,按 OC_DATA_DIR 配置) └── config/ # 默认配置目录(opencode、share、state) ```