【站点部署指南(阿里云函数计算 · ZIP 包)】
本站前端页面与后端 API 部署在同一个函数计算 Web 函数中:Express 提供 /api 接口并托管前端构建产物。日常更新只需重新打包、重新上传,全程无需 Docker。
【一、一键打包(本地)】
在项目根目录用 Git Bash 执行:bash build-deploy.sh
脚本自动完成:后端构建(tsc)→ 前端构建(vite)→ 组装 deploy/ 目录 → 以“目标平台 Linux + Node.js 22”安装生产依赖 → 生成 deploy.zip(约 20MB)。
依赖安装走 npmmirror 镜像,better-sqlite3 会自动下载 Linux 版预编译二进制,因此 Windows 上无需安装 Docker / WSL。
产物 deploy.zip 顶层只有 backend/ 与 frontend/ 两个目录,可直接上传。
【二、上传与函数配置】
1. 代码上传方式选择「通过 ZIP 包上传代码」,上传 deploy.zip。
2. 启动命令(命令模式):node backend/dist/index.js
3. 监听端口:9000(必须与环境变量 PORT 一致)。
4. 执行超时时间:60 秒即可,若有慢接口可适当调大。
5. 更新发布:重新执行 bash build-deploy.sh 后,在「函数 → 代码」再次上传 deploy.zip 并保存。
【三、环境变量(函数配置)】
PORT = 9000:服务监听端口,与「监听端口」保持一致。
NODE_ENV = production:开启生产模式。
DATA_DIR = /mnt/auto:数据目录,必须指向 NAS 挂载目录(见下一节),必填。
JWT_SECRET = <强随机字符串>:登录令牌签名密钥。
ADMIN_PASS = <强密码>:管理员 admin 的初始密码,首次登录后请修改。
ALIPAY_APP_ID / ALIPAY_PRIVATE_KEY / ALIPAY_PUBLIC_KEY / ALIPAY_NOTIFY_URL:支付宝当面付配置,留空则隐藏扫码支付。
修改环境变量后需保存并重新部署函数才会生效。
【四、NAS 挂载与数据库持久化】
SQLite 数据库与上传的安装包都保存在 DATA_DIR 指向的数据目录。函数代码目录 /code 只读,/tmp 会在实例回收后清空,因此正式运行必须挂载 NAS,并把 DATA_DIR 指向 NAS 挂载目录。
挂载入口:函数配置 → 存储配置 → NAS 文件系统。三项分别填:「远端目录」是 NAS 内的子目录(如 /db,必须以 / 开头,不存在会自动创建且权限 777);「函数本地目录」是函数内访问 NAS 的路径(建议 /mnt/auto);「用户/组」留默认即可。
环境变量 DATA_DIR 必须与「函数本地目录」完全一致(如 /mnt/auto),数据库与安装包才会落盘到 NAS;本地开发不配 DATA_DIR,自动使用 backend/data,互不影响。
首次启动自动建库建表,无需手动初始化;运行后数据目录内会有 site.db、site.db-wal、site.db-shm(SQLite WAL 正常文件)与 files/(上传的安装包)。
启动报 EACCES / EROFS:检查 NAS「挂载目录」与 DATA_DIR 是否一致、挂载的用户/组是否有写权限。
数据备份:定期在「文件存储 NAS」控制台导出备份 site.db;注意从 /tmp 切换到 NAS 不会迁移旧数据,切换后相当于重新初始化。
【五、静态资源加速(已内置)】
后端已按资源类型设置缓存策略,并开启 gzip 压缩,可明显降低公网流量与二次访问耗时:
/assets/*:Vite 构建产物文件名带内容哈希,缓存一年(immutable),发版后自动失效。
图片、预览图、帮助文档 JSON 等静态文件:缓存 7 天。
index.html 与前端路由页面:不缓存(no-cache),保证发版后用户立即拿到最新版本。
gzip:JS / CSS / JSON / SVG 等文本响应体积减少 60% 以上,同时降低 FC 公网流量费用。
【六、常见问题】
函数启动即崩溃:优先检查 DATA_DIR 是否已设置且指向已挂载的可写目录,日志见「函数 → 日志」。
访问 502 / 无响应:启动命令路径不对,或「监听端口」与 PORT 不一致。
报 NODE_MODULE_VERSION 或 .node 文件错误:包里混入了 Windows 版 node_modules,请用 build-deploy.sh 重新打包,不要手工替换依赖。
容器镜像路线:项目 s.yaml 已配置 custom-container,也可改用 s deploy 部署(镜像需推送到同地域 ACR)。