常见问题

Jant 是开源的吗?

是。完整源码在 GitHub。托管和自托管运行的是同一份代码,没有"托管专属功能"。

自托管和托管怎么选?

你的情况 选这个
想要近乎零成本,能跟着文档配置 15 分钟 Cloudflare 自托管
已经有自己的服务器和 Docker 经验 Docker 自托管
不想处理任何部署细节 Jant 托管

三条路径运行的是同一份代码。先选托管再迁出,或反过来,都通过 导出与导入 完成。

自定义域名怎么配?

  • 托管:Dashboard → 选中站点 → 域名 → 添加,按提示配置 DNS。证书自动签发与续期。
  • Cloudflare 自托管:Workers & Pages → 你的 Worker → Settings → Domains & Routes → Add,详见 部署到 Cloudflare 中的"绑定自定义域名"。
  • Docker 自托管:在反向代理里指过来。

支持评论吗?

不内置,未来可能会加。现在可以通过 代码注入 嵌入 giscus、Disqus 等第三方系统。

能改主题/外观吗?

三层控制:内建颜色主题、内建字型主题、Custom CSS。Custom CSS 直接覆盖 CSS 变量即可,不需要 fork 主题或重启站点。完整变量列表见 主题定制

如何升级到新版本?

  • 托管:自动,无需操作。
  • Cloudflarenpm install @jant/core@latest && npm run deploy,迁移会在部署时自动跑。
  • Dockerdocker compose pull && docker compose up -d,这个命令会先运行数据库迁移,再启动应用。

升级前建议先做一次完整备份,见 备份与恢复

Cloudflare 免费额度真的够吗?

对一个普通个人博客通常够。Workers 免费层每天 100,000 次请求,R2 免费层 10 GB 存储加每月 100 万次 Class A 操作。一个坑:媒体如果不配 R2_PUBLIC_URL,每次图片加载都会走 Worker 中转,免费额度会消耗得更快。配置方式见 部署到 Cloudflare 中的"部署后必做清单"。

可以带着内容离开吗?

可以,两种方式:

  • site export —— 一次性导出为标准 Hugo 站点目录(ZIP 或目录),可直接 hugo serve 预览。
  • GitHub 同步 —— 内容始终以 Markdown 持续同步到你自己的 Git 仓库,仓库本身就是一个完整的 Hugo 站点。

Cloudflare 和 Docker 怎么选?

两边运行的是同一份代码。Cloudflare 适合想要近乎零运维、走免费额度的个人站点;Docker 适合已经有自己服务器和 Docker 经验、或者想要 Postgres / 本地存储的人。两边都新手就选 Cloudflare。详见 部署到 CloudflareDocker 自托管

媒体上传有大小限制吗?

非图片默认 500 MB,可通过 UPLOAD_MAX_FILE_SIZE_MB 调整。详见 配置 § 上传大小限制

删除的帖子能恢复吗?

不能。删除是永久的——帖子行、对应的路径、所属 Collection 关联以及附件 media 都会被一起清理(正文里嵌入的 inline media 不动)。删帖前 UI 会有二次确认。

支持多语言吗?

站点内容本身可以是任何语言。Settings → General → Language 可以设置语言。这个设置驱动两件事:

  • 内容元数据<html lang> 和 RSS feed 的 <language> 字段会原样使用你填的标签——这是给搜索引擎、屏幕阅读器、订阅器看的。
  • Settings 界面语言:目前仅支持 English、简体中文、繁体中文,其他语言会回退到 English。

Public 页面(首页、Featured、Latest 等导航文案)当前固定为英文。

支持多作者吗?

不支持。多作者需要权限、审稿、署名、通知等一整套机制,会让产品方向偏向 CMS。需要这些能力,建议考虑 WordPress 或 Ghost。

为什么默认 /feed 是 Featured 而不是 Latest?

Jant 把"发布到站点"和"广播给订阅者"看成两件事。默认 /feed 指向 Featured,让你可以写细碎记录而不打扰订阅者。要换回传统行为,Settings → General → Feeds → Main RSS feed 切到 Latest。三条 feed(/feed/featured/feed/latest/archive/feed)各管一段,详见 写作与内容组织 § 为什么默认 feed 是 Featured

能挂在子路径下吗(例如 example.com/blog)?

可以。设置 SITE_PATH_PREFIX=/blog。Cloudflare 还需要在 Workers Routes 里把 yourdomain.com/blog* 路由到 Worker。详见 部署 § 部署在子路径下

反馈渠道?

  • GitHub Issues —— bug 和功能请求
  • 邮件 support#jant.me(请把 # 换成 @)—— 托管账户问题

AI agent 能发帖吗?

可以。两种入口,按场景选:

  • HTTP JSON API:默认推荐——POST /api/posts 加 Bearer token,外部脚本、定时任务、第三方集成都用它。
  • MCP 接口/api/mcp):调用方本身就是 MCP client 时。

create-jant 生成的项目自带 AGENTS.md.claude/skills/examples/agent-content-automation/,里面有可以直接复制的 curl 示例。详见 自动化与 API

启用 GitHub 同步 后,AI 也可以直接读写 Git 仓库里的 Markdown——对很多 coding agent 来说比 API 更顺手。

能在托管和自托管之间互相迁移吗?

可以,方向都支持。推荐用 site exportsite import:源站点导出为 ZIP,目标站点用空账号导入。全程走 HTTP API,托管与自托管两端都能用,slug 与 URL 会原样保留。详见 导出与导入

site snapshot 不适用于这一场景。它需要直连数据库与对象存储,托管侧没有这种入口,因此只能用于两端都是自托管、且需要连同内部 ID 与存储 key 一起保留的场景。

SQLite 和 Postgres 怎么选(Docker 部署)?

单机部署可直接用 SQLite,性能足够、备份只需打包一个文件。已有 Postgres 基础设施时可考虑换 Postgres。切换通过 DATABASE_URL 的 scheme 控制(file:postgres:),见 配置 § Node 和 Docker

在 GitHub 上删了文件,为什么 Jant 里没删?

这是有意的。GitHub 上的文件删除会被同步层忽略,避免误操作导致数据丢失。删帖只能在 Jant UI 里完成,删除后下一次同步会自动从仓库移除对应的 bundle。详见 GitHub 同步 § 在 GitHub 上编辑

在 GitHub 上新建一个 .md 文件能创建新帖子吗?

不能。GitHub → Jant 方向只支持更新已有帖子,按 front matter 里的 slug 匹配。新增、删除都通过 Jant UI 进行。

改了 AUTH_SECRET 会怎样?

所有已登录会话立即失效,所有人需要重新登录。生产环境上线后不要轻易更换——除非怀疑泄露。生成方式:openssl rand -base64 32

Pre-1.0,破坏性变更会很多吗?

可能会有,但不到必要不会做。每次破坏性变更都会写在 commit 和 changelog 里。升级前扫一眼变更记录,留一份最近的备份。

能迁回 WordPress / Ghost 吗?

没有现成路径,但 site export 输出的是标准 Markdown + YAML front matter,可以请 AI 写一个一次性转换脚本到 WordPress WXR 或 Ghost JSON。

为什么叫 Jant?

来自 Jantelagen(扬特法则),北欧文化中"别把自己看得太重"的概念。设计动机见 简介

托管为什么定价 $10.46/年?

我一直喜欢 .com 的定价:$10.46 / 年。

这是 Cloudflare 提供的 .com 域名注册和续费的价格。它略高于免费,又足够正式。不会让开始变得摩擦力太大,但也不是完全没有成本,足够让你把它当回事。

接下来