# 使用Node.js 20 LTS Alpine版本作为基础镜像[7](@ref)[8](@ref) FROM node:20-alpine # 设置元数据标签[2](@ref)[6](@ref) LABEL maintainer="your-email@example.com" LABEL description="OpenCode AI Web Application" LABEL version="1.0.0" # 设置环境变量[2](@ref)[5](@ref) ENV NODE_ENV=production ENV PORT=7860 ENV PATH="/home/opencode/.local/bin:/usr/local/bin:$PATH" # 创建非root用户以提高安全性[7](@ref)[8](@ref) RUN addgroup -g 1001 -S opencode && \ adduser -S opencode -u 1001 # 安装必要的系统依赖[8](@ref) RUN apk add --no-cache git curl # 设置工作目录[1](@ref)[3](@ref) WORKDIR /app # 以root用户安装全局依赖[1](@ref) USER root RUN npm install -g opencode-ai@latest # 复制应用程序文件并设置权限[1](@ref)[4](@ref) COPY --chown=opencode:opencode package*.json ./ COPY --chown=opencode:opencode . /app # 安装应用程序依赖(如果存在package.json)[4](@ref) RUN if [ -f "package.json" ]; then npm ci --only=production; fi # 设置文件所有权[8](@ref) RUN chown -R opencode:opencode /app && \ chown -R opencode:opencode /home/opencode # 切换到非root用户[8](@ref) USER opencode # 创建用户目录 RUN mkdir -p /home/opencode/.local/bin # 创建启动脚本 - 使用printf避免换行符问题 RUN printf '#!/bin/sh\n\ echo "Starting OpenCode AI Web Server..."\n\ echo "Server will be available at http://0.0.0.0:7860 "\n\ echo "OpenAPI documentation available at http://0.0.0.0:7860/doc "\n\ exec /usr/local/bin/opencode serve --hostname 0.0.0.0 --port 7860\n\ ' > /home/opencode/.local/bin/start.sh && \ chmod +x /home/opencode/.local/bin/start.sh # 暴露应用程序端口[1](@ref)[2](@ref) EXPOSE 7860 # 健康检查[6](@ref) HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost:7860/health || exit 1 # 设置容器启动命令[3](@ref)[5](@ref) CMD ["/home/opencode/.local/bin/start.sh"]