IF
IndexFlowing
/ Docs
🌐 English Docs GitHub ↗

配置参考

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 设置:
    1. 在 GCP IAM 中创建服务账号。
    2. 启用 Google Search Console API(webmasters.readonly)和 Web Search Indexing API(indexing)。
    3. 为服务账号创建并下载非对称 RSA JSON 密钥。
    4. 在 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。