chore: Storage 初版 — 家庭共享物品管理 (React+TS+Vite+Express+DuckDB)
Build and Deploy / build-image (push) Failing after 2m26s

This commit is contained in:
jif2.zhang
2026-09-26 22:46:15 +08:00
commit 0a6f048c0d
50 changed files with 11073 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
# ===============================================================
# Storage 一体化镜像: 静态前端 (dist/) + Express/DuckDB 服务端 (server/) 同进程
# 构建: docker build -t storage:latest .
# 可选 --build-arg VITE_API_BASE=https://api.example.com 让前端走绝对地址 (默认同源 /api)
# 运行: docker run -d --name storage -p 3003:3003 -v storage-data:/app/data storage:latest
# 端口: 与 Wardrobe(:3002) / iboard(:3001) 同机共存, 按部署环境分配 (见 部署环境.md)
# 数据: DuckDB (data/storage.duckdb) + 图片 (data/uploads) 都在 /app/data 卷, 部署不丢数据
# ===============================================================
FROM node:22-slim AS builder
WORKDIR /app
# 国内构建时可换源
RUN npm config set registry https://registry.npmmirror.com
# 先拷贝 package 文件, 利用 Docker 缓存
COPY package*.json ./
RUN npm install
# 拷贝源码
COPY . .
# 构建前端 (输出到 dist/); 留空 = 同源 /api
ARG VITE_API_BASE=
ENV VITE_API_BASE=$VITE_API_BASE
RUN npm run build
# 运行时阶段 (slim: @duckdb/node-api 用 glibc 预编译, 不能用 alpine musl)
FROM node:22-slim
WORKDIR /app
RUN npm config set registry https://registry.npmmirror.com
# 只装运行时依赖
COPY package*.json ./
RUN npm install --omit=dev
# 业务数据目录: DuckDB + 图片上传, 运行时挂 -v storage-data:/app/data 持久化
RUN mkdir -p /app/data
ENV DB_PATH=/app/data/storage.duckdb
ENV UPLOAD_DIR=/app/data/uploads
# 拷贝构建产物 (server/ 为纯 JS, 直接 node 运行, 无需 strip-types)
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/server ./server
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget -qO- http://127.0.0.1:3003/healthz || exit 1
ENV NODE_ENV=production
ENV PORT=3003
EXPOSE 3003
CMD ["node", "server/index.js"]