Files
inkwatch/deploy/Dockerfile.business
T
PMon Dev f632672a82 feat: PMon V4.0 功能开发收口(1.0.9)—— 主干
把 V4.0 骨架以来的全部功能开发固化为主干基线,内容包括:
  · client/            全量 Android/macOS 客户端(Flutter + Rust 核心)
  · server/            网关、业务服务、仓储层
  · deploy/            compose、Dockerfile、init.sql + migrate.sql(幂等迁移)
  · shared/ tests/     协议、编解码、指标清单与全部测试套件
  · docs/ README       架构方案与运维手册

本轮之前修复的主要缺陷(详见各文件注释与 client/README.md):
  · 首次部署路径(init.sql 的 device_tokens 建表顺序)
  · 每 20 分钟硬切以外的设备身份漂移与**设备归并**(shared/device-identity.js)
  · 配置无版本号、无校验导致的病态残留(host/config_migration.dart)
  · 数据库迁移从不执行(deploy/migrate.sql + compose 的 migrate 服务)

验证:客户端 282/282、全量回归 20 套件 0 失败。

⚠️ 水墨屏专属实现(看板、水墨屏令牌、einkMode、常亮)**不在本分支**,
   由 feature/eink 承载,主干不受其影响。
2026-09-16 01:06:24 +08:00

47 lines
1.8 KiB
Docker
Raw 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.
# ---------- 阶段 1:builder ----------
# 构建上下文为**仓库根**(见 docker-compose.yml 的 build.context: ..)
FROM node:22-alpine AS builder
WORKDIR /app
# 与 gateway 保持一致的目录分工:
# shared/ —— 跨端共享层(protocol/codec)
# server/shared/ —— 仅服务端(repository,依赖 pg)
COPY shared/package*.json ./shared/
COPY server/package*.json ./server/
COPY server/business/package*.json ./server/business/
RUN cd shared && npm ci --no-audit --no-fund
RUN cd server && npm ci --no-audit --no-fund
RUN cd server/business && npm ci --no-audit --no-fund
# ---------- 阶段 2:runtime ----------
FROM node:22-alpine AS runtime
ENV NODE_ENV=production
ENV PORT=4000
# 目录布局与源码严格一致,保证
# require('../shared/repository') 与 require('../../shared/codec') 正确解析。
WORKDIR /app
COPY --from=builder /app/shared/node_modules ./shared/node_modules
COPY shared/package*.json ./shared/
COPY --from=builder /app/server/node_modules ./server/node_modules
COPY server/package*.json ./server/
COPY --from=builder /app/server/business/node_modules ./server/business/node_modules
COPY server/business/package*.json ./server/business/
# 源码 —— 通配拷贝,理由同 Dockerfile.gateway:
# 逐个点名会导致"新增模块忘了加进 COPY",镜像能构建但容器启动即 require 失败。
COPY shared/*.js ./shared/
COPY server/shared/*.js ./server/shared/
COPY server/business/*.js ./server/business/
WORKDIR /app/server/business
USER node
EXPOSE 4000
HEALTHCHECK --interval=20s --timeout=5s --start-period=10s --retries=3 \
CMD node -e "fetch('http://127.0.0.1:'+(process.env.PORT||4000)+'/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
CMD ["node", "index.js"]