docs / 部署与运维 / operations

运维与安全

v1.2 起基座内置以下运维能力,全部可选:不配置对应变量就自动关闭,不影响现有站点。

定时任务调度

后台「定时任务」里配置的任务按 cron 表达式自动执行,由 POST /api/cron/dispatch 统一调度。

NUXT_CRON_SECRET=<随机长字符串>     # 调度接口的 Bearer 令牌
NUXT_CRON_TZ_OFFSET=480             # 排期时区(分钟),默认北京时间

谁来唤醒调度器:

部署形态方式
Cloudflare Pages部署 deploy/cron-worker(复制 wrangler.toml.example,wrangler secret put CRON_SECRET,wrangler deploy),默认每 5 分钟
Linux / 宝塔crontab 或宝塔「计划任务」:curl -fsS -X POST -H "Authorization: Bearer $NUXT_CRON_SECRET" https://站点/api/cron/dispatch
手动补跑同一命令加 ?all=1,忽略排期把启用的任务全跑一遍

每次调度还会顺带做维护:任务日志只保留最近 500 条,清理过期的限流记录。

内置任务接口

在后台新建任务时,URL 填下面的地址,请求头填 {"Authorization":"Bearer <NUXT_CRON_SECRET>"}:

接口作用需要的设置项
/api/cron/send-contact-emails把新的联系表单发邮件给站长contactNotifyEmail(缺省用 companyEmail),并在「邮件配置」里配好发信
/api/cron/push-search-engines主动推送 URL 给 IndexNow(Bing、Yandex 等)和百度indexNowKey、baiduPushToken,没填的渠道跳过;/{indexNowKey}.txt 自动提供

健康检查

GET /api/health 做一次数据库往返,返回驱动、存储、版本与耗时;数据库不可用时返回 503。适合接入 Uptime Kuma、宝塔监控或 Cloudflare 健康检查。

人机验证(Cloudflare Turnstile)

NUXT_TURNSTILE_SECRET_KEY=...
NUXT_PUBLIC_TURNSTILE_SITE_KEY=...

两个都设置后,联系表单会显示验证组件,服务端校验失败返回 400。站点自定义表单可以使用 useTurnstile() 组合式函数与 assertTurnstile(event, token)。

限流

登录、联系表单、安装、浏览量接口带限流。计数存放在 rate_limits 表里,多个 Worker 实例、多个 Node 进程共享同一份计数;表不存在时退化为单实例内存计数。

浏览量

GET /api/views?kind=post&id=1 读取,POST /api/views 计数一次(每 IP 每分钟最多 60 次)。数据存放在 content_views 表,不改动文章与产品表。页面里用 useViewCounter('post', () => id),基座的资讯和产品详情页已经接入。

访问统计

NUXT_PUBLIC_CF_ANALYTICS_TOKEN=...   # Cloudflare Web Analytics,无 Cookie,不需要同意弹窗

后台页面不统计。

启动环境检查

启动时检查密钥缺失、示例值、成对配置只配了一半(Turnstile、对象存储)等问题,默认只打警告日志;设置 NUXT_STRICT_ENV=1 后生产环境直接启动失败。

数据库迁移

v1.2 新增 0013_rate_limits、0014_content_views 两个 SQLite 迁移(均为 IF NOT EXISTS,可重复执行),PostgreSQL 与 MySQL 有对应迁移。站点部署时使用 pnpm deploy:migrate,或对 D1 直接执行这两个 SQL 文件。