Files
2026-10-16 09:03:23 -07:00

53 lines
2.1 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
FROM node:22-alpine AS builder
WORKDIR /app
RUN npm install -g pnpm@10
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
RUN pnpm install --frozen-lockfile
# NEXT_PUBLIC_* 会在构建时内联进浏览器代码;默认同源 /api,不能留空(空串不会触发代码里的默认值)
ARG NEXT_PUBLIC_API_BASE_URL=/api
ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL \
NEXT_TELEMETRY_DISABLED=1
COPY . .
RUN pnpm build
FROM node:22-alpine
ENV NODE_ENV=production \
NEXT_TELEMETRY_DISABLED=1 \
HOSTNAME=127.0.0.1 \
PORT=22787 \
TZ=Asia/Shanghai
WORKDIR /app
COPY --from=builder --chown=node:node /app/.next/standalone ./
COPY --from=builder --chown=node:node /app/.next/static ./.next/static
COPY --from=builder --chown=node:node /app/public ./public
# 数据库迁移文件:启动时自动应用(src/server/db/migrate.ts)
COPY --from=builder --chown=node:node /app/drizzle ./drizzle
# WebDAV 独立进程复用同一容器内的 Next API
COPY --from=builder --chown=node:node /app/src/server/webdav ./src/server/webdav
COPY --from=builder --chown=node:node /app/scripts ./scripts
# Next 不追踪独立脚本的依赖;仅复制 XML 解析器的自包含 CJS 构建与入口描述
COPY --from=builder --chown=node:node /app/node_modules/fast-xml-parser/lib ./node_modules/fast-xml-parser/lib
COPY --from=builder --chown=node:node /app/node_modules/fast-xml-parser/package.json ./node_modules/fast-xml-parser/package.json
# SQLite 数据库目录:生产环境通过 DB_FILE_NAME 指向挂载卷;预先创建并授权,未挂载时也能启动
RUN mkdir -p /app/data && chown node:node /app/data
USER node
EXPOSE 22787 3201
# 端口可由 -e PORT 覆盖,检查必须跟随实际端口(host 网络下写死会探测到别的服务)
HEALTHCHECK --interval=10s --timeout=5s --start-period=10s --retries=3 \
CMD wget -q --spider http://127.0.0.1:${PORT}/login || exit 1
# 配置由部署时挂载的 /app/.env 提供(不存在则忽略);已通过 -e 传入的变量优先,不会被覆盖
CMD ["node", "--env-file-if-exists=/app/.env", "scripts/start.mjs"]