WARNING

本页已随近期变更更新,部分内容尚未经人工复核。如果无法解决问题或需要协助部署,可邮箱联系:kuohu@getastra.cn

TIP

本页配图较少,待维护者补充。如果无法解决问题或需要协助部署,可邮箱联系:kuohu@getastra.cn

部署相关

客户端连不上后端怎么办?

排查步骤:

  1. 确认后端是否运行。在服务器上执行 curl http://localhost:9000/web/menu,应返回 JSON 数据。连接被拒绝的话,重启后端服务。
  2. 确认客户端填写的地址正确:
    • 内网:类似 192.168.1.100:9000
    • 公网:类似 api.your-domain.com
    • 地址不要带协议头(如 https://),也不要以 / 结尾
  3. 检查防火墙:
    • 内网环境:确认服务器防火墙已放行 9000 端口(参考 sudo ufw status)
    • 外网环境:确认 Cloudflare DNS 代理状态为橙色云朵
  4. 测试网络连通性:在客户端电脑执行 ping 服务器IP 或 telnet 服务器IP 9000

管理端打开后显示白屏或一直加载?

排查步骤:

  1. 打开浏览器开发者工具(F12)→ Network 标签页,刷新页面
  2. 查看是否有请求失败(红色),通常是对后端 API 的请求
  3. API 请求失败说明后端未运行或登录页「后端地址」填错
  4. API 请求返回 401 说明认证失败(Token 无效或未登录);返回 403 说明权限不足,或请求被 Cloudflare WAF 拦截(见下文)
  5. 请求状态为 (failed) 或 net::ERR_CONNECTION_REFUSED 的话,检查后端是否启动

外网部署后 API 返回大量 403 错误?

这是 Cloudflare WAF 误拦截。处理方式:

  1. 登录 Cloudflare 控制台 → Security → Events
  2. 查看最近被拦截的请求,确认触发拦截的规则名称
  3. 针对误判规则,创建「跳过」规则:
    • 进入 Security → WAF → Custom rules
    • 创建规则,操作为「跳过」→ 选择被误判的托管规则
    • 将匹配范围限制为你的 API 域名

接口返回的不是 JSON,而是一段 HTML/JS(质询页)?

请求被 ESA/CDN 边缘的 WAF 拦下了——边缘返回 200 + text/html 的 JS 质询页而不是 403,浏览器外的客户端(脚本、curl、后端服务)看不懂质询,表现为「拿到一堆 HTML」或「数据格式错误」。处理方式:

  1. 确认请求是否带第一方标识:桌面客户端应带 User-Agent: AstraSchedule/<版本>,服务间调用带 AstraSchedule/System,浏览器页面靠 Referer(见运维手册 · 第一方流量标识)
  2. 手工验证:curl -A "AstraSchedule/1.6.1" <接口地址>,返回 JSON 说明只是缺标识
  3. 调整 WAF 规则:把对应域名/来源加入豁免,或给对应 UA 开质询白名单

注意区分响应来自边缘还是源站:没有 x-fc-request-id 的响应产生于边缘(详见排障口径)。

函数计算冷启动很慢,影响使用体验?

函数计算在长时间无请求后会回收实例,下一次请求需要冷启动(通常 2-5 秒)。

解决方案:

  1. 配置预留实例(推荐):在函数计算控制台 → 弹性管理 → 配置至少 1 个预留实例。始终有一个实例保持活跃,不会冷启动。预留实例按较低费率计费,通常每月几元钱。
  2. 定时保持活跃:使用云厂商的定时触发器,每 5 分钟访问一次 /web/menu,保持实例不被回收。
  3. 接受冷启动:如果对更新延迟不敏感(客户端并非实时推送场景),可以不处理。

SQLite 和 MySQL 怎么选?

SQLiteMySQL
安装无需安装,零依赖需要安装 MySQL 服务
部署数据库文件随应用存放需要独立数据库服务
备份直接复制 .db 文件使用 mysqldump 或 RDS 自动备份
适合场景单个学校、几个班级多校共用、高并发
迁移导出 JSON → 导入新后端导出 JSON → 导入新后端

建议不确定就选 SQLite,先用起来。以后需要迁移到 MySQL 时,通过管理端导出 JSON → 导入新后端即可。

域名怎么配置?DNS 和 CNAME 有什么区别?

简单理解:

  • DNS 是域名系统,负责把域名翻译成 IP 地址
  • CNAME 是 DNS 记录的一种类型,让一个域名指向另一个域名(而不是直接指向 IP)

AstraSchedule 需要配置的内容:

  1. 在域名注册商处,将域名的 DNS 服务器修改为 Cloudflare 提供的地址
  2. 在 Cloudflare 控制台添加两条 CNAME 记录:
    • api.你的域名.com → 函数计算的 CNAME 地址
    • admin.你的域名.com → Cloudflare Pages 提供的域名地址

配置完成后等待 DNS 生效(通常几分钟到几小时不等)。

部署到 Cloudflare Pages 后,管理端修改后端地址需要重新部署吗?

不需要。管理端后端地址在登录页「后端地址」栏填写,保存在浏览器本地(localStorage),运行时修改即时生效,无需改代码或重新部署。

只有当你希望修改登录页的默认地址时,才需要改 src/global.js 中的默认值并重新构建。