cnrock commited on
Commit
a930b3e
·
verified ·
1 Parent(s): fed4685

Create Dockerfile.skill

Browse files
Files changed (1) hide show
  1. Dockerfile.skill +159 -0
Dockerfile.skill ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ # ========== 阶段1:构建环境 ==========
3
+ FROM node:22-bookworm AS builder
4
+
5
+ ENV LANG=zh_CN.UTF-8 \
6
+ LANGUAGE=zh_CN:zh \
7
+ LC_ALL=zh_CN.UTF-8 \
8
+ DEBIAN_FRONTEND=noninteractive
9
+
10
+ # 安装构建依赖(包含编译工具和 Python 完整环境)
11
+ RUN apt-get update && apt-get install -y --no-install-recommends \
12
+ git openssh-client build-essential python3-full python3-pip python3-venv \
13
+ ca-certificates curl unzip \
14
+ libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 \
15
+ libxkbcommon0 libxcomposite1 libxdamage1 libxext6 libxfixes3 libxrandr2 \
16
+ libgbm1 libpango-1.0-0 libcairo2 libasound2 \
17
+ fonts-noto-cjk fonts-noto-color-emoji locales \
18
+ gnupg2 \
19
+ && sed -i 's/^# \(zh_CN.UTF-8\)/\1/' /etc/locale.gen && locale-gen \
20
+ && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C || true \
21
+ && rm -rf /var/lib/apt/lists/*
22
+
23
+ # 创建 Python 虚拟环境并安装所需包
24
+ ENV VIRTUAL_ENV=/opt/venv
25
+ RUN python3 -m venv $VIRTUAL_ENV
26
+ ENV PATH="$VIRTUAL_ENV/bin:$PATH"
27
+ RUN pip install --no-cache-dir --upgrade pip \
28
+ # && pip install --no-cache-dir huggingface_hub jupyterlab \
29
+ && pip cache purge
30
+
31
+ # 安装 Bun
32
+ RUN curl -fsSL https://bun.sh/install | bash
33
+ ENV BUN_INSTALL=/root/.bun
34
+ ENV PATH="${BUN_INSTALL}/bin:${PATH}"
35
+
36
+ # 安装 UV
37
+ RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
38
+ && mv /root/.local/bin/uv /usr/local/bin/uv
39
+
40
+ # 安装 OpenClaw 核心到自定义目录(避免污染系统全局)
41
+ RUN npm install --prefix /opt/openclaw -g openclaw@latest --unsafe-perm && npm cache clean --force
42
+
43
+ # 安装 Playwright(指定版本,下载浏览器)
44
+ ARG PLAYWRIGHT_VERSION=1.50.1
45
+ WORKDIR /app
46
+ RUN corepack enable && corepack prepare pnpm@latest --activate \
47
+ && printf '{"name":"openclaw-app","private":true}' > package.json \
48
+ && pnpm add -D playwright@${PLAYWRIGHT_VERSION} \
49
+ && pnpm exec playwright install chromium \
50
+ && pnpm store prune
51
+
52
+
53
+ # ---------- 写入您的原始启动脚本 start-openclaw ----------
54
+ RUN echo '#!/bin/bash\n\
55
+ set -e\n\
56
+ # 默认环境变量填充\n\
57
+ export OPENAI_API_BASE="${OPENAI_API_BASE:-https://openrouter.ai/api/v1}"\n\
58
+ export OPENAI_API_KEY="${OPENAI_API_KEY:-sk-yourapikey}"\n\
59
+ export MODEL="${MODEL:-openrouter/free}"\n\
60
+ export PORT="${PORT:-18789}"\n\
61
+ \n\
62
+ mkdir -p /root/.openclaw\n\
63
+ \n\
64
+
65
+ \n\
66
+ # 处理 BaseUrl 格式\n\
67
+ CLEAN_BASE=$(echo "$OPENAI_API_BASE" | sed "s|/chat/completions||g" | sed "s|/v1/|/v1|g" | sed "s|/v1$|/v1|g")\n\
68
+ \n\
69
+ # 动态生成 openclaw.json\n\
70
+ cat <<EOF > /root/.openclaw/openclaw.json\n\
71
+ {\n\
72
+ "models": {\n\
73
+ "providers": {\n\
74
+ "nvidia": {\n\
75
+ "baseUrl": "$CLEAN_BASE",\n\
76
+ "apiKey": "$OPENAI_API_KEY",\n\
77
+ "api": "openai-completions",\n\
78
+ "models": [{ "id": "$MODEL", "name": "PrimaryModel", "contextWindow": 128000 }]\n\
79
+ }\n\
80
+ }\n\
81
+ },\n\
82
+ "agents": { "defaults": { "model": { "primary": "$MODEL" } } },\n\
83
+ "gateway": {\n\
84
+ "mode": "local", "bind": "lan", "port": $PORT,\n\
85
+ "trustedProxies": ["0.0.0.0/0", "10.0.0.0/8", "172.16.0.0/12", "10.233.64.0/18", "100.64.0.0/10", "127.0.0.1/8"],\n\
86
+ "auth": { "mode": "token" },\n\
87
+ "controlUi": { "enabled": true, "dangerouslyAllowHostHeaderOriginFallback": true, "allowInsecureAuth": true, "dangerouslyDisableDeviceAuth": true}\n\
88
+ }\n\
89
+ }\n\
90
+ EOF\n\
91
+ \n\
92
+
93
+ # 动态查找 playwright 的 chromium 路径并设置 CHROME_PATH(若未指定或不存在)\n\
94
+ if [ ! -f "$CHROME_PATH" ]; then\n\
95
+ CHROME_PATH=$(find /root/.cache/ms-playwright -name chrome -type f 2>/dev/null | head -1)\n\
96
+ export CHROME_PATH\n\
97
+ fi\n\
98
+ \n\
99
+ openclaw doctor --fix || true\n\
100
+ echo "🚀 Starting OpenClaw on port $PORT..."\n\
101
+ exec openclaw gateway run --port $PORT\n\
102
+ ' > /usr/local/bin/start-openclaw && chmod +x /usr/local/bin/start-openclaw
103
+
104
+ # ========== 阶段2:最终运行镜像 ==========
105
+ FROM node:22-bookworm
106
+
107
+ ENV LANG=zh_CN.UTF-8 \
108
+ LANGUAGE=zh_CN:zh \
109
+ LC_ALL=zh_CN.UTF-8 \
110
+ DEBIAN_FRONTEND=noninteractive
111
+
112
+ # 安装运行时必需的库、locales 并生成中文环境
113
+ RUN apt-get update && apt-get install -y --no-install-recommends \
114
+ ca-certificates curl \
115
+ libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 \
116
+ libxkbcommon0 libxcomposite1 libxdamage1 libxext6 libxfixes3 libxrandr2 \
117
+ libgbm1 libpango-1.0-0 libcairo2 libasound2 \
118
+ fonts-noto-cjk fonts-noto-color-emoji \
119
+ python3-minimal python3-venv \
120
+ locales \
121
+ && sed -i 's/^# \(zh_CN.UTF-8\)/\1/' /etc/locale.gen \
122
+ && locale-gen \
123
+ && rm -rf /var/lib/apt/lists/*
124
+
125
+ # 从构建阶段复制 Python 虚拟环境
126
+ COPY --from=builder /opt/venv /opt/venv
127
+ ENV PATH="/opt/venv/bin:$PATH"
128
+
129
+ # 复制 Bun
130
+ COPY --from=builder /root/.bun /root/.bun
131
+ ENV BUN_INSTALL=/root/.bun
132
+ ENV PATH="${BUN_INSTALL}/bin:${PATH}"
133
+
134
+ # 复制 UV
135
+ COPY --from=builder /usr/local/bin/uv /usr/local/bin/uv
136
+
137
+ # 复制 OpenClaw(自定义安装目录)并添加到 PATH
138
+ COPY --from=builder /opt/openclaw /opt/openclaw
139
+ ENV PATH="/opt/openclaw/bin:${PATH}"
140
+
141
+ # 复制 Playwright 浏览器
142
+ COPY --from=builder /root/.cache/ms-playwright /root/.cache/ms-playwright
143
+ ENV PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright
144
+ # 不在这里设置 CHROME_PATH 静态值,由启动脚本动态查找
145
+
146
+
147
+ COPY --from=builder /usr/local/bin/start-openclaw /usr/local/bin/start-openclaw
148
+
149
+ # 拷贝技能
150
+ COPY openclaw-skills-complete.tar.gz /tmp/
151
+ RUN mkdir /root/.openclaw && tar -xzf /tmp/openclaw-skills-complete.tar.gz -C /root/.openclaw/
152
+
153
+ WORKDIR /app
154
+
155
+ ARG PORT=18789
156
+ ENV PORT=${PORT}
157
+ EXPOSE ${PORT}
158
+
159
+ CMD ["/usr/local/bin/start-openclaw"]