配置参考
IndexFlow 通过系统环境变量、本地 .env 文件和按站点保存的数据库凭据进行配置。
1. 全局环境变量
全局变量控制网络绑定、数据库连接池、worker 轮询计划和安全密钥。它们在应用启动时读取(src/config/mod.rs)。
| 变量 | 类型 | 默认值 | 描述 |
|---|---|---|---|
SERVER_HOST |
String | 0.0.0.0 |
Axum Web 服务器绑定的网络 IP 地址。 |
SERVER_PORT |
u16 | 8080 |
HTTP Web 控制台、partials 和 REST API 的端口。 |
DATABASE_URL |
String | sqlite:indexflow.db?mode=rwc |
SQLite 数据库文件连接字符串。自动启用 WAL 模式。 |
DB_MAX_CONNECTIONS |
u32 | 5 |
SQLite 连接池允许的最大并发连接数。 |
WORKER_POLL_INTERVAL_SECS |
u64 | 2 |
Sitemap 同步和技术 SEO 审计 worker 的轮询间隔(秒)。 |
SUBMIT_WORKER_INTERVAL_SECS |
u64 | 5 |
Google、Bing 检查和推送 worker 的轮询间隔(秒)。 |
SUBMIT_WORKER_BATCH |
i64 | 10 |
每次提交轮询获取并处理的最大 URL 数。 |
JWT_SECRET |
String | indexflow-secret-key-change-in-production |
用于签署管理员认证 JWT cookie(if_token)的密钥字符串。生产环境必须修改。 |
DRY_RUN |
bool | true |
设为 true 或 1 时,所有发往 Google Indexing 和 Bing IndexNow 的推送调用都会被拦截,并以本地成功日志模拟。生产环境设为 false。 |
RUST_LOG |
String | indexflow_core=info,tower_http=info |
tracing 日志过滤表达式。支持 error、warn、info、debug、trace。 |
2. .env 文件示例
在启动 indexflow-core 的根目录创建 .env 文件:
# Server Network Settings
SERVER_HOST=0.0.0.0
SERVER_PORT=8080
# Storage & Connection Pool
DATABASE_URL=sqlite:/var/lib/indexflow/indexflow.db?mode=rwc
DB_MAX_CONNECTIONS=5
# Worker Schedules
WORKER_POLL_INTERVAL_SECS=2
SUBMIT_WORKER_INTERVAL_SECS=5
SUBMIT_WORKER_BATCH=10
# Security (Generate with: openssl rand -hex 32)
JWT_SECRET=c79f8b4a2e5d9c1b3f7a6e8d2c4b0a1f9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b
# Safety Mode: Set to false to enable live API push
DRY_RUN=false
# Logging Level
RUST_LOG=indexflow_core=info,tower_http=info
3. 站点级凭据与集成
搜索引擎 API 凭据和抓取设置通过 Web 控制台(/settings)或 REST API(POST /api/v1/settings)按站点配置。
1. Cloudflare WAF 绕过 / 自定义 User-Agent(custom_user_agent)
- 用途:防止 Cloudflare Bot Management 或 Web Application Firewall 在 sitemap 抓取或 SEO 门审计期间返回
403 Forbidden。 - 行为:
- 如果输入秘密字符串(例如
MySeoCrawlerSecret),IndexFlow 会构造:Mozilla/5.0 (compatible; IndexFlowBot/1.0; +https://www.indexflowing.com); MySeoCrawlerSecret - 如果输入以
Mozilla/开头的完整 User-Agent,则完全替换默认爬虫 User-Agent。
- 如果输入秘密字符串(例如
- Cloudflare 规则设置:
在域名上创建 WAF Custom Rule:
- 表达式:
(http.user_agent contains "MySeoCrawlerSecret") - 操作:
Bypass / Skip(选择 WAF Managed Rules、Bot Fight Mode 和 Rate Limiting)。
- 表达式:
2. Bing IndexNow 密钥(bing_indexnow_key)
- 格式:32 位十六进制字符串(例如
a1b2c3d4e5f6789012345678abcdef01)。 - 文件验证:必须在以下地址托管包含该密钥的文本文件:
https://example.com/a1b2c3d4e5f6789012345678abcdef01.txt - 测试端点:
POST /api/v1/sites/test-indexnow验证文本文件是否可公开访问。
3. Bing Webmaster Tools API 密钥(bing_webmaster_api_key)
- 获取:在 Bing Webmaster Tools 中进入 Settings -> API Access -> API Key。
- 作用:允许 IndexFlow 调用
GetUserSites解析规范站点 URL,并调用GetUrlInfo检查索引和抓取时间戳。 - 测试端点:
POST /api/v1/sites/test-bing-webmaster验证密钥访问并返回所有已验证域名。
4. Google 服务账号密钥(google_service_account_json)
- 格式:从 Google Cloud Platform IAM 下载的完整 JSON 凭据文件。
- GCP 设置:
- 在 GCP IAM 中创建服务账号。
- 启用 Google Search Console API(
webmasters.readonly)和 Web Search Indexing API(indexing)。 - 为服务账号创建并下载非对称 RSA JSON 密钥。
- 在 Google Search Console 的域名资源中,将服务账号的
client_email(例如[email protected])添加为 Owner 或 Full Permission 用户。
- 测试端点:
POST /api/v1/sites/test-google验证 OAuth2 JWT 签名,连接 GSC 并解析资源身份(例如sc-domain:example.com)。
4. 试运行模式机制
IndexFlow 集成了用于测试和预发布环境的熔断器:
┌───────────────────────┐
│ Submit URL Request │
└───────────┬───────────┘
│
[ Is DRY_RUN == true? ]
/ \
YES / \ NO
▼ ▼
┌────────────────────────┐ ┌────────────────────────┐
│ Mock Success Log (200) │ │ Sign OAuth2 / IndexNow │
│ No external HTTP call │ │ Dispatch to Google/Bing│
└────────────────────────┘ └────────────────────────┘
- 当
DRY_RUN=true:GoogleIndexingClient和BingProvider拦截提交批次。- 模拟成功响应(
DRY_RUN_MOCK: 已演练并记录日志,未向 API 发起网络请求)写入submission_logs。 - 数据库状态更新为
SUBMITTED,无需消耗每日配额即可验证流水线。
- 当
DRY_RUN=false:- 签署完整 JWT assertion,并将真实 API 请求发送至
indexing.googleapis.com和api.indexnow.org。
- 签署完整 JWT assertion,并将真实 API 请求发送至