# editor-api 镜像 —— 零 npm 依赖,所以没有 package.json / 锁文件 / npm ci # # 为什么这么小: # · base 用 alpine # · 代码只用 node 内置模块(node:http / node:fs / node:crypto),不需要 npm install # · git 是必须的:发布 = 在仓库工作区里 add + commit + push # # 仓库本体不进镜像 —— 挂载进去(compose 里 /blog)。这样 git pull 不用重建镜像。 FROM node:22-alpine # git:发布用。ca-certificates:https 远端(CNB)要它(自建 Gitea 辅仓走 http,不需要) # # ★ apk 源默认换成阿里云镜像:国内机器直连 dl-cdn.alpinelinux.org 实测慢到不可用 # (单个包 30~40 秒,12 个包要 7 分钟),换源后几秒装完。 # 境外机器想用官方源就 --build-arg APK_MIRROR= 传空值。 ARG APK_MIRROR=mirrors.aliyun.com RUN if [ -n "$APK_MIRROR" ]; then \ sed -i "s#dl-cdn.alpinelinux.org#$APK_MIRROR#g" /etc/apk/repositories; \ fi \ && apk add --no-cache git ca-certificates WORKDIR /app ENV NODE_ENV=production COPY server.mjs ./ COPY src/ ./src/ # 回收目录(删除的文章挪到这里,在仓库外,不进 git) RUN mkdir -p /app/trash EXPOSE 8017 # 没配 EDITOR_TOKEN 时 server.mjs 会自己 process.exit(1),容器随即退出 —— # 这是刻意的:宁可起不来,也不能以无鉴权状态对公网服务 CMD ["node", "server.mjs"]