Files
makelore/.opencode/skills/deploy-publish-check/references/project-zip-package-requirements.md
2026-07-29 17:22:35 +08:00

2.6 KiB
Raw Permalink Blame History

Works Square 项目 ZIP 打包契约

创建、检查或修复 Works Square 项目 ZIP 时使用本契约。服务端只接受可由 Docker Compose 构建和运行的安全 ZIP 包。

根目录和必需内容

ZIP 根目录直接包含 niancode.ymldocker-compose.yml、Compose build context 使用的源码、引用的 Dockerfile*、构建使用的 lock 文件,以及运行所需静态资源和配置。不能出现 project/niancode.yml 这种额外目录套壳。

大小、计数和路径安全

  • ZIP 文件大小不得超过 50 MB
  • 解压后总大小不得超过 200 MB
  • 文件数不得超过 2000
  • 禁止绝对路径、盘符路径、.. 路径穿越、空路径片段、重复规范化路径和符号链接。
  • 每个条目必须能被普通 ZIP 解压器读取。

默认排除 node_modules/.git/build/dist/.next/.nuxt/.vite/.dart_tool/.pub-cache/android/.gradle/ios/Pods/.venv/venv/__pycache__/*.pyc.pytest_cache/.DS_Store、真实 .env、证书、私钥和本地密钥。优先使用白名单,只加入实际构建和运行需要的文件。

niancode.yml

根目录 UTF-8 YAML 必须声明 runtime: composecompose.file: docker-compose.yml、存在于 Compose 的 compose.public_service,以及 compose.public_port: 8080

Docker Compose

公开服务的容器内应用监听 0.0.0.0:8080,端口只写为 127.0.0.1::8080。禁止固定宿主机端口、非 loopback 绑定和仅写 "8080"

拒绝 privileged: truenetwork_mode: hostpid: hostipc: host/var/run/docker.sock 挂载、绝对宿主机路径挂载,以及绝对或包含 .. 的 build context / Dockerfile 路径。多服务项目只让公开服务发布端口;浏览器所需 /api/... 由公开服务反向代理到 Compose 内部后端。

Dockerfile

构建必须无交互,不依赖宿主机预装 Node、Python 或 Flutter不引用本地绝对路径。基础镜像必须可获取依赖安装尽量使用 lock 文件;语言版本约束必须与基础镜像提供的运行时一致。

本地验证链

依次记录 docker compose configbuild --pull=falseup -ddocker port、HTTP 冒烟、down -v,以及重新打开 ZIP 后的结构、安全、大小和计数检查。Docker 不可用时,把未执行项标记为“未验证”或“失败/阻塞”。

页面交接

项目根目录 works-publish.json 供“部署与上传”页面读取,不是服务端 ZIP 校验必填项,也不能替代 ZIP 根目录的 Compose 文件。只有实际提交后才能记录提交成功。