- 集中维护 Dockerfile,使用多阶段构建和 Bun 独立可执行文件 - 提供 MCP 浏览器镜像,保留中文与 Emoji 字体并校验下载完整性 - 配置健康检查、非 root 运行、内部网络和持久化数据卷 - 增加容器端到端验证脚本,覆盖模型调用、浏览器启动及数据恢复 - 重组 README,精简部署、配置和开发说明
47 lines
1.3 KiB
Docker
47 lines
1.3 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
# 构建上下文为项目根目录;依赖版本与 bun.lock 保持一致。
|
|
FROM oven/bun:1.3.14-alpine AS build
|
|
|
|
WORKDIR /build
|
|
|
|
COPY package.json bun.lock ./
|
|
RUN --mount=type=cache,target=/root/.bun/install/cache \
|
|
bun install --frozen-lockfile
|
|
|
|
COPY tsconfig.json vite.config.ts index.html index.ts ./
|
|
COPY src ./src
|
|
|
|
# 前端生成静态资源,后端编译为包含 Bun 运行时的独立程序。
|
|
RUN bun run build \
|
|
&& bun build --compile --minify --outfile /out/upup index.ts
|
|
|
|
# 运行镜像只复制程序和前端资源。
|
|
FROM alpine:3.23 AS runtime
|
|
|
|
RUN apk add --no-cache ca-certificates libgcc libstdc++ \
|
|
&& addgroup -g 10001 upup \
|
|
&& adduser -D -u 10001 -G upup upup \
|
|
&& mkdir -p /app/data /app/images \
|
|
&& chown -R upup:upup /app
|
|
|
|
WORKDIR /app
|
|
|
|
COPY --from=build /out/upup /usr/local/bin/upup
|
|
COPY --from=build /build/dist/client ./dist/client
|
|
|
|
ENV NODE_ENV=production \
|
|
HOST=0.0.0.0 \
|
|
PORT=3000 \
|
|
DATA_DIR=/app/data
|
|
|
|
# 数据卷初始化时沿用目录权限,应用以非 root 用户运行。
|
|
USER upup
|
|
|
|
EXPOSE 3000
|
|
|
|
HEALTHCHECK --interval=15s --timeout=5s --start-period=10s --retries=3 \
|
|
CMD wget -q -O /dev/null "http://127.0.0.1:${PORT}/api/health" || exit 1
|
|
|
|
ENTRYPOINT ["/usr/local/bin/upup"]
|