File size: 2,666 Bytes
c7216e1
62a2ca4
 
c7216e1
 
3791641
c7216e1
5b1f9e0
 
 
c7216e1
 
 
d4f5694
5b1f9e0
 
c7216e1
3791641
c7216e1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ea105c1
5b1f9e0
1b324dc
c7216e1
 
029b98d
c7216e1
ea105c1
e3a47f1
c7216e1
ea105c1
e3a47f1
c7216e1
 
 
 
 
5b1f9e0
c7216e1
97cc2b9
c7216e1
97cc2b9
e079c7f
c7216e1
2590560
c7216e1
97cc2b9
 
c7216e1
e079c7f
c7216e1
 
e079c7f
c7216e1
 
e079c7f
3791641
97cc2b9
 
 
 
e079c7f
 
3a37f03
 
029b98d
86f0a0a
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# 使用 Node.js 22 (Debian Bullseye)
FROM node:22-bullseye

# 1. 补全浏览器、SSH、时区及 Python 编译工具
# - DEBIAN_FRONTEND=noninteractive: 防止 tzdata 等安装时由于交互式提示挂起
# - chromium: 系统级内核,其路径 /usr/bin/chromium 可被 OpenClaw 自动识别
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    git \
    cmake \
    python3 \
    python3-pip \
    python3-setuptools \
    python3-wheel \
    lsof \
    build-essential \
    openssh-client \
    tzdata \
    chromium \
    libnss3 \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libcups2 \
    libdrm2 \
    libxkbcommon0 \
    libxcomposite1 \
    libxdamage1 \
    libxext6 \
    libxfixes3 \
    libxrandr2 \
    libgbm1 \
    libasound2 \
    libpango-1.0-0 \
    libpangocairo-1.0-0 \
    libx11-xcb1 \
    libxcb1 \
    libglib2.0-0 \
    libgtk-3-0 \
    fonts-liberation \
    fonts-noto-color-emoji \
    libxss1 \
    xvfb \
    && rm -rf /var/lib/apt/lists/*

# 2. 锁定 pnpm 版本确保构建一致性
RUN corepack enable && corepack prepare pnpm@9.0.0 --activate

# 3. 环境变量 (自适应 Python 路径,去除硬编码版本号)
# - DISPLAY=:99 配合 xvfb 使用,为浏览器提供虚拟屏幕,解决 X11 Missing 问题
# - XDG_RUNTIME_DIR 消除 Chrome 启动时的目录缺失警告
ENV TZ=Asia/Shanghai \
    DISPLAY=:99 \
    XDG_RUNTIME_DIR=/tmp/runtime-openclaw \
    SKIP_DOWNLOAD_LLAMA_CPP_BINARIES=1 \
    NODE_LLAMA_CPP_SKIP_DOWNLOAD=1 \
    PYTHONUSERBASE=/app/.local \
    OPENCLAW_STATE_DIR=/app/.openclaw \
    PATH="/app/.local/bin:${PATH}"

# 4. 目录预设与权限 (使用 node 用户对齐标准 Shell 环境)
RUN mkdir -p /home/node/.ssh && \
    chmod 700 /home/node/.ssh && \
    chown -R node:node /home/node

WORKDIR /app

# 5. 代码拉取及权限同步
RUN git clone https://github.com/superxuu/HF_clawbot.git . && \
    mkdir -p /app/.openclaw && \
    chown -R node:node /app

# 切换到非 root 用户 (node)
USER node

# 6. 使用 --user 安装以确保 AI 运行时路径兼容
RUN pip3 install --no-cache-dir --user paramiko fabric

# 7. 构建流程 (驱动重定向与环境适配已并入代码,此处仅负责编译)
RUN pnpm install --no-frozen-lockfile
RUN pnpm store prune
RUN pnpm build
RUN pnpm ui:build

EXPOSE 7860
# 关键环境变量:设置生产环境与端口
ENV NODE_ENV=production PORT=7860

# 8. 启动 (使用 xvfb-run 包装启动,为浏览器提供活动的虚拟 X Server 环境)
CMD ["sh", "-c", "export OPENCLAW_GATEWAY_PORT=${PORT:-7860}; xvfb-run -a node scripts/run-node.mjs gateway --port ${PORT:-7860} --force --allow-unconfigured"]