AIbot / Dockerfile
superxu520's picture
Update Dockerfile
e3a47f1 verified
# 使用 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"]