Smail/docs/插件构建与配置.md
smail 5aee534751
Some checks are pending
Security Checks / security (push) Waiting to run
统一各平台发布包目录结构并补齐配置迁移工具
2026-09-18 15:55:34 +08:00

3.8 KiB
Raw Blame History

插件构建与配置

配置入口

在“设置 → 配置管理 → 插件配置”中选择三级菜单:

  • 垃圾邮件拦截
  • Telegram 推送
  • 微信推送

每次只显示所选插件的字段。切换页面前会提示未保存的编辑内容;三个插件仍共用后端插件配置分区,保存时保留其余插件、内部字段和权限。服务器存在候选配置时,页面会提示候选涉及哪些插件,应用时整个候选一起生效。

Windows 开发构建

先安装 frontend 和 plugins/pmail_telegram_push 的前端依赖,然后在项目根目录运行:

powershell -NoProfile -ExecutionPolicy Bypass -File deploy/build.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File deploy/start-dev.ps1 -Service backend

修改后端或重新编译正在运行的插件前,先停止对应开发服务。-SkipFrontend 只跳过主前端,三个插件始终随开发构建编译,Telegram 的嵌入页面也会重新生成。

  • 主前端:out/frontend
  • 后端及管理工具:out/backend
  • 三个插件:out/plugins/spam_block.exe、out/plugins/pmail_telegram_push.exe、out/plugins/wechat_push.exe
  • 开发服务工作目录:out,保证相对路径 plugins 指向实际插件产物
  • SMAIL_ROOT 仍固定到项目根目录,现有账号、邮件数据库和运行配置保持在根目录 config,不能复制一份到 out/config

跨平台构建与发布

make build

构建依赖顺序为:主前端 → 后端、三个插件 → 发布目录。使用并行构建时也不会在产物尚未生成前打包。

插件统一构建入口:

node deploy/build-plugins.mjs --target=linux_amd64
node deploy/build-plugins.mjs --target=windows_amd64
node deploy/build-plugins.mjs --all

支持 Linux、Windows、macOS 的 amd64 和 arm64。插件编译中间产物位于 out/plugins/<平台>_<架构>,发布目录位于 out/package/Smail_<系统>_<架构>/smail/。系统名使用 linux、windows、darwin。压缩包输出到 out/release/,例如 Smail_linux_amd64.tar.gz、Smail_windows_amd64.zip。Windows 使用 ZIP,其余平台使用 TAR.GZ。

每个压缩包解压后直接得到以下结构,Windows 的三个程序带 .exe 后缀:

smail/
├── smail
├── smail-admin
├── smail-config
├── config/
├── data/
├── ssl/
└── log/

网页和三个插件的可执行文件内嵌于主程序。插件运行时仍是独立进程,原有启停配置和进程隔离检查不变。包内四个目录为空,不携带本机配置、数据库、密钥、证书、部署或续期脚本;首次运行通过项目初始化流程生成配置。管理员恢复工具和配置迁移工具均为编译后的程序。

Makefile 和 GitHub 发布工作流统一调用 node deploy/package.mjs。已有编译产物时可附加平台参数单独打包,例如 node deploy/package.mjs linux_amd64。Windows 主机生成 Linux/macOS 压缩包时自动使用 Git for Windows 附带的 GNU tar,以写入 Unix 可执行权限,也可通过环境变量 SMAIL_TAR 指定其他 GNU tar 路径;Windows ZIP 使用系统 tar,Linux/macOS 主机分别使用 tar 和 zip。上述工具仅在构建机器使用,部署服务器不需要构建或部署脚本。

打包先检查三个程序,再从全新目录生成发布包。相同名字的旧目录、压缩包和回执移入 out/build-history/release-*/ 保留,旧版平铺产物不参与打包。校验回执在 out/release-receipts/Smail_<系统>_<架构>.json,包含程序和压缩包的 SHA-256,不进入发布包。

编译成功不代表第三方服务已配置、推送已送达或生产平台隔离验收完成。Windows 生产模式现有的插件隔离限制仍然保留,不会因打包而绕过。