File size: 4,734 Bytes
38be7e9
c02aa56
38be7e9
 
cb95286
e1094c6
2e2538e
 
f9e0e2e
 
 
 
 
38be7e9
e1094c6
 
f9e0e2e
 
27f1af2
e1094c6
 
38be7e9
27f1af2
 
 
 
 
 
 
 
 
 
 
 
 
 
c02aa56
f9e0e2e
27f1af2
c02aa56
fa39e20
 
27f1af2
 
 
 
 
c98a8f2
d3fdbea
c02aa56
fa39e20
2e2538e
 
 
 
 
 
 
 
 
 
 
 
 
 
27f1af2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2e2538e
 
 
 
 
27f1af2
 
 
2e2538e
 
27f1af2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2e2538e
 
 
 
 
27f1af2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2e2538e
27f1af2
2e2538e
 
 
 
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
FROM node:22-bookworm-slim

ENV PIP_BREAK_SYSTEM_PACKAGES=1

# 1. 安装基础依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    python3 \
    python3-pip \
    git \
    curl \
    ca-certificates \
    ripgrep \
    procps \
    tree \
    jq \
    unzip \
    && rm -rf /var/lib/apt/lists/*

# 2. 安装核心 CLI 工具并清理 npm 缓存
RUN npm install -g @anthropic-ai/claude-code @cloudcli-ai/cloudcli task-master-ai pnpm \
    && npm cache clean --force

# 3. 创建 codex wrapper(readme 实测方案第 3 条):
#    真实二进制为 task-master-ai 内置依赖;当未显式提供 OPENAI_API_KEY 时
#    自动从 /data/.codex/gw_token 加载网关凭证注入环境,集成端无环境变量也能正常鉴权
RUN cat << 'EOF' > /usr/local/bin/codex
#!/bin/bash
if [ -z "$OPENAI_API_KEY" ] && [ -r /data/.codex/gw_token ]; then
    export OPENAI_API_KEY="$(cat /data/.codex/gw_token)"
fi
exec /usr/local/lib/node_modules/task-master-ai/node_modules/.bin/codex "$@"
EOF
RUN chmod +x /usr/local/bin/codex

# 4. 创建挂载点与配置目录
RUN mkdir -p /data /home/node/app /home/node/.claude /home/node/.codex /home/node/.cloudcli /home/node/.taskmaster && \
    chown -R 1000:1000 /data /home/node

# 5. 复制入口脚本并设置权限
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

ENV HOME=/home/node
ENV HOST=0.0.0.0
ENV PORT=7860
ENV SERVER_PORT=7860

WORKDIR /home/node/app
EXPOSE 7860

ENTRYPOINT ["/entrypoint.sh"]
CMD ["cloudcli"]



























# claudecode、cursor可用版本
# FROM node:22-bookworm-slim

# ENV PIP_BREAK_SYSTEM_PACKAGES=1

# # 1. 安装基础依赖
# RUN apt-get update && apt-get install -y --no-install-recommends \
#     python3 \
#     python3-pip \
#     git \
#     curl \
#     ca-certificates \
#     ripgrep \
#     procps \
#     tree \
#     jq \
#     unzip \
#     && rm -rf /var/lib/apt/lists/*

# # 2. 安装核心 CLI 工具
# RUN npm install -g @anthropic-ai/claude-code @cloudcli-ai/cloudcli task-master-ai pnpm \
#     && npm cache clean --force

# # 2. 包装 claude 可执行文件,启动时无条件注入沙箱变量
# RUN CLAUDE_BIN=$(which claude) && \
#     mv "$CLAUDE_BIN" "${CLAUDE_BIN}.real" && \
#     printf '#!/bin/sh\nexport IS_SANDBOX=1\nexport CLAUDE_CODE_BUBBLEWRAP=1\nexec "%s.real" "$@"\n' "$CLAUDE_BIN" > "$CLAUDE_BIN" && \
#     chmod +x "$CLAUDE_BIN"

# # 确保给 node 用户写入正确的 bypass 权限
# RUN mkdir -p /home/node/.claude && \
#     echo '{"permissions":{"defaultMode":"bypassPermissions"},"skipDangerousModePermissionPrompt":true}' > /home/node/.claude/settings.json && \
#     echo '{"hasCompletedOnboarding":true,"skipDangerousModePermissionPrompt":true}' > /home/node/.claude.json && \
#     chown -R node:node /home/node/.claude /home/node/.claude.json

# # 同时确保全局变量
# ENV IS_SANDBOX=1
# ENV CLAUDE_CODE_BUBBLEWRAP=1
# ENV CLAUDE_CODE_DISABLE_TELEMETRY=1
# ENV DO_NOT_TRACK=1
    
# # 3. 安装官方 Cursor CLI,并使用【软链接】暴露到全局 PATH(保持 index.js 相对路径不破坏)
# RUN curl -fsSL https://cursor.com/install | bash && \
#     chmod -R 755 /root/.local && \
#     if [ -f /root/.local/bin/agent ]; then \
#         ln -sf /root/.local/bin/agent /usr/local/bin/agent && \
#         ln -sf /root/.local/bin/agent /usr/local/bin/cursor-agent && \
#         ln -sf /root/.local/bin/agent /usr/local/bin/cursor; \
#     fi

# # 4. 设置环境变量
# ENV PATH="/root/.local/bin:/home/node/.local/bin:${PATH}"
# ENV HOME=/home/node
# ENV HOST=0.0.0.0
# ENV PORT=7860
# ENV SERVER_PORT=7860

# # ==================== 【新增:Claude Code 超时放宽】 ====================
# # API 请求总超时(设为 20 分钟 = 1200000ms)
# ENV API_TIMEOUT_MS=1200000
# # 禁用/放宽 5分钟(300s) 首字与空闲看门狗(这是导致 5 分钟自动重试的核心原因)
# ENV CLAUDE_STREAM_IDLE_TIMEOUT_MS=1200000
# ENV CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS=1200000
# ENV CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS=1200000
# # Bash 命令执行默认超时(避免执行长任务被 2 分钟打断)
# ENV BASH_DEFAULT_TIMEOUT_MS=1800000
# ENV BASH_MAX_TIMEOUT_MS=7200000
# # =====================================================================

# # 5. 创建挂载点与配置目录,并将所有权赋予 UID 1000 (node 用户)
# RUN mkdir -p /data /home/node/app /home/node/.claude /home/node/.codex /home/node/.cloudcli /home/node/.taskmaster /home/node/.cursor && \
#     chown -R 1000:1000 /data /home/node

# # 6. 复制入口脚本并设置权限
# COPY entrypoint.sh /entrypoint.sh
# RUN chmod +x /entrypoint.sh

# WORKDIR /data/app
# EXPOSE 7860

# ENTRYPOINT ["/entrypoint.sh"]
# CMD ["cloudcli"]