For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt, and this page is available as Markdown at /faq/deploy.md.
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 服务器IPtelnet 服务器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 域名

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

函数计算在长时间无请求后会回收实例,下一次请求需要冷启动(通常 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 中的默认值并重新构建。