使用Docker从源码编译安装OpenClaw并配置Github Skill

First Post:

Last Update:

Word Count:
1.7k

Read Time:
8 min

看了一圈 Docker 安装 OpenClaw 的文章好像都是默认设置
正好搞了连接 Github 账号就记录一下

主机信息

  • 系统: Debian GNU/Linux 13 (trixie)
  • OpenClaw 代码目录: /data/openclaw/src
  • OpenClaw 数据目录: /data/openclaw/data
  • 模型提供商: Deepseek

目标

  • Docker 安装 OpenClaw
  • 更改数据保存位置
  • 通过 PAT 连接 Github 账号

安装 OpenClaw

下载 OpenClaw 代码库

1
git clone https://github.com/openclaw/openclaw.git src

切换到最新发行版

此处查看最新发行版

1
git checkout v2026.2.26

创建 .env 环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
# 自定义数据目录,按照实际情况修改
OPENCLAW_CONFIG_DIR=/data/openclaw/data
# 自定义工作空间,按照实际情况修改
OPENCLAW_WORKSPACE_DIR=/data/openclaw/data/workspace
OPENCLAW_GATEWAY_PORT=18789
OPENCLAW_BRIDGE_PORT=18790
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_GATEWAY_TOKEN=<随机生成的64位hex>
OPENCLAW_IMAGE=openclaw:local
# 持久化 gh 配置文件
OPENCLAW_EXTRA_MOUNTS=/data/openclaw/data/.config/gh:/home/node/.config/gh
OPENCLAW_HOME_VOLUME=
OPENCLAW_DOCKER_APT_PACKAGES=

Hex 随机生成

1
openssl rand -hex 32
1
head -c 32 /dev/urandom | xxd -p
1
od -An -N32 -tx1 /dev/urandom | tr -d ' \n'
环境变量说明
变量名 说明 默认值 需要修改
OPENCLAW_CONFIG_DIR 数据目录 /home/<你的用户名>/.openclaw
OPENCLAW_WORKSPACE_DIR 工作空间 /home/<你的用户名>/.openclaw/workspace
OPENCLAW_GATEWAY_PORT WebUI 端口 18789
OPENCLAW_BRIDGE_PORT 18790
OPENCLAW_GATEWAY_BIND lan
OPENCLAW_GATEWAY_TOKEN <随机生成的64位hex>
OPENCLAW_IMAGE Docker 镜像名称 openclaw:local
OPENCLAW_EXTRA_MOUNTS Docker 额外挂载的目录
OPENCLAW_HOME_VOLUME
OPENCLAW_DOCKER_APT_PACKAGES 镜像构建时额外安装的apt包

构建 OpenClaw 镜像

1
docker build -t openclaw:local -f Dockerfile .

启动 OpenClaw 并进入设置向导

1
docker compose run --rm openclaw-cli onboard
设置向导
  • I understand this is personal-by-default and shared/multi-user use requires lock-down. Continue? (我理解这是默认个人使用,共享/多用户使用需要锁定设置。是否继续?)

    • Yes
  • Onboarding mode (引导模式)

    • Quick Start
  • Model/auth provider (模型提供商) - 对于 Deepseek, 使用 Custom Provider

    • Custom Provider
  • API Base URL

    • https://api.deepseek.com
  • How do you want to provide this API key? (何时填写 API Key)

    • Paste API key now
  • API Key (leave blank if not required)

    • <填写 API Key>
  • Endpoint compatibility (API 端点兼容性) - 对于 Deepseek, 使用 OpenAI 兼容 API

    • OpenAI-compatible
  • Model ID (模型 ID)

    • deepseek-chat
  • Verification successful. (显示即为验证成功)

  • Endpoint ID (命名 API 端点)

    • <自行命名>
  • Model alias (optional) (模型别名)

    • <非必填项>
  • Select channel (QuickStart) (设置与模型的对话通道) - 此处使用 Telegram Bot

    • Telegram (Bot API)
  • Enter Telegram bot token (输入机器人 Token)

    • <自行填写>
  • Telegram allowFrom (numeric sender id; @username resolves to id) (设置收信白名单)

    • <自行填写>
  • Configure skills now? (recommended) (现在配置 OpenClaw 功能)

    • Yes
  • Install missing skill dependencies (安装缺失的技能依赖项) - 点击空格进行选择/取消选择,回车确认

    • github
  • Show Homebrew install command? (显示 Homebrew 安装命令) - 在 Debian 中使用 apt 而不是 brew 安装

    • No
  • Install failed: github — brew not installed — Homebrew is not installed. (忽略,不需要安装 brew)

  • Set GOOGLE_PLACES_API_KEY for goplaces? (设置 Google Places API Key) - 此处不需要该功能

    • No
  • 跳过几个 API Key 配置

  • Enable hooks? (启用 Hook, 即 Telegram 的 / 命令)

    • <自行选择>

设置向导完成后,在 Control UIDashboard ready 部分会显示网页控制台的 URL 与 Token

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
◇  Dashboard ready ────────────────────────────────────────────────────────────────╮
│ │
│ Dashboard link (with token): │
│ http://127.0.0.1:18789/#token=c01dbeef0000000000000000000000000000000000000000 │
│ Copy/paste this URL in a browser on this machine to control OpenClaw. │
│ No GUI detected. Open from your computer: │
│ ssh -N -L 18789:127.0.0.1:18789 user@<host> │
│ Then open: │
│ http://localhost:18789/ │
│ http://localhost:18789/#token=c01dbeef0000000000000000000000000000000000000000 │
│ Docs: │
│ https://docs.openclaw.ai/gateway/remote │
│ https://docs.openclaw.ai/web/control-ui │
│ │
├──────────────────────────────────────────────────────────────────────────────────╯

修改 openclaw.json

编辑 $OPENCLAW_CONFIG_DIR/openclaw.json, 在先前的设定中为 /data/openclaw/data/openclaw.json

gateway 中添加以下内容

1
2
3
4
5
"controlUi": {
"allowedOrigins": [
"http://127.0.0.1:18789"
]
},

启动 OpenClaw Gateway

1
docker compose up -d openclaw-gateway

建立 SSH 端口映射隧道

官方文档

根据 OpenClaw 的默认安全设置,Control UI 只能从本地 127.0.0.1 访问

1
ssh -N -L 18789:127.0.0.1:18789 <用户名>@<主机 IP 地址>

访问 Control UI

访问先前获取的带 token 参数的 URL http://127.0.0.1:18789/#token=<Token>

如果一切正常,网页会显示 pairing required

安装 clawdock-helpers

clawdock-helpers 是一个用于快速管理 Docker 容器中 OpenClaw 实例的工具

安装 clawdock-helpers

1
2
3
4
5
6
# 下载 clawdock-helpers
mkdir -p ~/.clawdock && curl -sL https://raw.githubusercontent.com/openclaw/openclaw/main/scripts/shell-helpers/clawdock-helpers.sh -o ~/.clawdock/clawdock-helpers.sh
# 添加至环境变量
echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.bashrc && source ~/.bashrc
# 显示 clawdock 帮助
clawdock-help

设置 clawdock-helpers 环境变量

~/.bashrc 添加指向 OpenClaw 源代码目录的环境变量 CLAWDOCK_DIR

1
export CLAWDOCK_DIR=/data/openclaw/src

设备认证

安装 clawdock-helpers 后即可使用该工具进行设备认证

1
2
# 列出所有设备
clawdock-devices

处理 Token 错误

如果出现如下错误:

1
2
3
🔍 Checking device pairings...
gateway connect failed: Error: unauthorized: gateway token mismatch (set gateway.remote.token to match gateway.auth.token)
[openclaw] CLI failed: Error: gateway closed (1008): unauthorized: gateway token mismatch (set gateway.remote.token to match gateway.auth.token)

运行以下命令修复 Token

1
clawdock-fix-token

批准配对请求

如果一切正常,则会输出类似内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
🔍 Checking device pairings...
Pending (1)
┌──────────────────────────────────────┬────────────────────────────────────┬──────────┬────────────┬────────┬────────┐
│ Request │ Device │ Role │ IP │ Age │ Flags │
├──────────────────────────────────────┼────────────────────────────────────┼──────────┼────────────┼────────┼────────┤
│ 71949123-52ef-417a-806f-a5c62501d321 │ 21f82c8f9434af86fa525cc9fe7c955541 │ operator │ 172.21.0.1 │ 1m ago │ │
│ │ 72e0d06235f042992f0cffebfb7c3d │ │ │ │ │
└──────────────────────────────────────┴────────────────────────────────────┴──────────┴────────────┴────────┴────────┘
Paired (1)
┌─────────────────────────────┬────────────┬────────────────────────────────────────────────┬────────────┬────────────┐
│ Device │ Roles │ Scopes │ Tokens │ IP │
├─────────────────────────────┼────────────┼────────────────────────────────────────────────┼────────────┼────────────┤
│ f2f1d2d9b6155bf93693f19a631 │ operator │ operator.admin, operator.read, operator. │ operator │ │
│ d5a211adf982a640a360f3b534d │ │ write, operator.approvals, operator.pairing │ │ │
│ bdb3764a39 │ │ │ │ │
└─────────────────────────────┴────────────┴────────────────────────────────────────────────┴────────────┴────────────┘

💡 To approve a pairing request:
clawdock-approve <request-id>

使用 clawdock-approve 命令批准设备配对请求

1
clawdock-approve <Pending 表格显示的 request-id>

由于刷新了 Token,需要使用 clawdock-token 命令查看新的 Token

再次访问 http://127.0.0.1:18789/#token=<Token> 应用新 Token

配置 gh

在镜像中安装 gh

编辑 DockerFile,添加以下内容:

1
2
3
4
5
6
7
8
RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \
| gpg --dearmor -o /usr/share/keyrings/githubcli-archive-keyring.gpg && \
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" \
> /etc/apt/sources.list.d/github-cli.list && \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends gh && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*

添加后的文件应该类似

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
...
RUN if [ -n "$OPENCLAW_DOCKER_APT_PACKAGES" ]; then \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends $OPENCLAW_DOCKER_APT_PACKAGES && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*; \
fi

# Install gh
RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \
| gpg --dearmor -o /usr/share/keyrings/githubcli-archive-keyring.gpg && \
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" \
> /etc/apt/sources.list.d/github-cli.list && \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends gh && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*

COPY --chown=node:node package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
COPY --chown=node:node ui/package.json ./ui/package.json
...

配置 GH_TOKEN

修改 docker-compose.yml,在 service.openclaw-gateway.environment 中添加一条 GH_TOKEN

修改后的 docker-compose.yml 大致如下

1
2
3
4
5
6
7
8
9
10
11
services:
openclaw-gateway:
image: ${OPENCLAW_IMAGE:-openclaw:local}
environment:
HOME: /home/node
TERM: xterm-256color
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
CLAUDE_AI_SESSION_KEY: ${CLAUDE_AI_SESSION_KEY}
CLAUDE_WEB_SESSION_KEY: ${CLAUDE_WEB_SESSION_KEY}
CLAUDE_WEB_COOKIE: ${CLAUDE_WEB_COOKIE}
GH_TOKEN: ${SKILL_GH_TOKEN}

.env 中添加 Github Personal Access Token