File size: 1,420 Bytes
6c7338b
f0e18a2
c79782b
f0e18a2
fff456b
0f2d026
a4c1999
 
c79782b
6c7338b
 
 
 
 
 
 
c79782b
6c7338b
c79782b
a4c1999
 
6c7338b
55285aa
6c7338b
a4c1999
55285aa
edb0bce
f7728bf
96f3567
a4c1999
edb0bce
 
a4c1999
496b622
6c7338b
0f2d026
55285aa
 
 
a4c1999
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
# ----------  1. 基础镜像 ----------
FROM node:20

# ----------  2. 系统级依赖 ----------
RUN apt-get update && apt-get install -y git curl cron && rm -rf /var/lib/apt/lists/*

# ----------  3. 跳过用户创建,使用 root 用户 ----------
# 直接使用 root 用户运行所有服务

# ----------  5. 全局安装 opencode-ai ----------
#    安装完先验证二进制是否存在,若不存在就手动解压
RUN npm install -g opencode-ai@latest && \
    if [ ! -f /usr/local/lib/node_modules/opencode-ai/node_modules/opencode-linux-x64/bin/opencode ]; then \
        cd /usr/local/lib/node_modules/opencode-ai && \
        npm run postinstall; \
    fi

# ---------- 6. 工作目录 ----------
WORKDIR /app
COPY package*.json ./
COPY . /app
RUN if [ -f package.json ]; then npm ci --only=production; fi

# ---------- 8. 启动脚本 ----------
RUN mkdir -p /usr/local/bin
RUN printf '#!/bin/sh\n\
echo "Starting OpenCode AI Web Server ..."\n\
# 启动 cron 服务\n\
cron && \
echo "Cron started successfully"\n\
# 启动 opencode 服务\n\
exec /usr/local/bin/opencode serve --hostname 0.0.0.0 --port 7860\n' > /usr/local/bin/start.sh && \
    chmod +x /usr/local/bin/start.sh

# ---------- 9. 端口与健康检查 ----------
EXPOSE 7860
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
    CMD curl -f http://localhost:7860/health || exit 1

CMD ["/usr/local/bin/start.sh"]