珞家 — 武汉大学综合校园服务 App。
本仓库为项目主页源码(Astro 构建),托管于 ClosedWHU/Luotopia。 APK 发行版通过 GitHub Releases / Pre-releases 发布,请访问 Releases 页面下载。
Luotopia 是一款面向武汉大学师生的综合校园服务应用,提供课表查询、校园资讯、生活服务等功能。
npm install
npm run dev # 启动开发服务器 localhost:4321
npm run build # 构建到 dist/
npm run preview # 本地预览构建产物解析器热更新脚本位于 public/hot-update/scripts/。应用仅接受已签名的
public/hot-update/manifest.json;即使校验和正确,没有有效 Ed25519 签名的清单也会被拒绝。
首次本地开发时初始化签名密钥:
npm run hot-update:init-key该命令会将私钥写入已被忽略的 .env.hot-update,并仅将公钥安装到相邻的 App 工作区。
请勿提交 .env.hot-update。
生成并校验清单:
npm run hot-update:generate
npm run hot-update:verifynpm run build 会自动生成清单,并在签名密钥不可用时失败。生产环境必须以 secret 的形式提供
HOT_UPDATE_ED25519_PRIVATE_KEY,其值为上述命令生成的 base64 编码 PKCS#8 Ed25519 私钥。
- 在 Cloudflare Dashboard 中创建 Pages 项目,连接本 GitHub 仓库
- 构建配置:
- 框架预设: Astro
- 构建命令:
npm run build - 构建输出目录:
dist
- 可选:添加环境变量
PUBLIC_SITE_URL为你的自定义域名 - 部署后可在 Pages 设置中绑定自定义域名
App 将 https://luotopia.whu.sb/* 注册为 Android App Links(autoVerify)与
iOS Universal Links(applinks),链接与 App 内路由一一对应(GoRouter 按 path
匹配)。已安装且验证通过时由系统直接唤起 App;否则由
functions/_middleware.ts 将该域名上的 HTML 导航重写到 /open 落地页
(保留原始 URL),由页面脚本映射回 luotopia://app/<path> 并提供
「打开 App / 下载」引导。
维护要点:
public/.well-known/assetlinks.json中的sha256_cert_fingerprints必须与 实际分发的签名证书一致(当前包含 release 证书与仓库共享 debug 证书)。 更换签名密钥后需同步更新,否则 Android 侧验证失效。指纹可用apksigner verify --print-certs app.apk查看。public/.well-known/apple-app-site-association对应 Team IDZW372988NV, 经public/_headers以application/json提供;该文件必须无重定向直达。- 需在 Cloudflare Pages 的自定义域名中绑定
luotopia.whu.sb(DNS CNAME 指向 Pages 项目)。域名必须先于 App 发版上线,两端才会在安装时完成验证。
若需 SSR / Workers 部署模式:
npx astro add cloudflare然后在 astro.config.mjs 中配置 output: 'server' 与 adapter: cloudflare() 模块,之后:
npm run build将 dist/ 或 dist/_worker.js 部署到 Cloudflare Workers。
- 在 Vercel 中导入本 GitHub 仓库
- 框架自动检测为 Astro,无需额外配置
- 默认 Framework Preset 选择 Astro
- 部署后可在 Vercel 项目设置中绑定自定义域名
npm run build
# 将 dist/ 目录部署到任意静态托管服务(Nginx, GitHub Pages, Netlify 等)