生产环境部署
本指南介绍如何在生产 VPS 上部署 IndexFlow Documentation(docs.indexflowing.com)、IndexFlow Cloud Web Service(www.indexflowing.com)和 IndexFlow Core Engine(IndexFlow-core)。
架构概览
文档使用 mdBook 构建并作为静态网站提供服务。IndexFlow-core 和商业 Web 服务分别运行在 Axum 端口 8080 和 8000,通过 Cloudflare / Nginx 对外提供访问。
1. 部署文档网站(docs.indexflowing.com)
步骤 1:在构建服务器安装 mdBook
cargo install mdbook
步骤 2:编译文档
从 IndexFlow-cloud/docs 目录执行:
cd IndexFlow-cloud/docs
mdbook build
这会在 IndexFlow-cloud/docs/book/ 生成编译后的 HTML 资源。
步骤 3:Nginx 虚拟主机配置
创建 /etc/nginx/sites-available/docs.indexflowing.com,配置 HTTPS、静态根目录 /var/www/indexflow-docs/book 和 try_files $uri $uri/ =404。
2. 在 VPS 部署 IndexFlow-core
步骤 1:构建发布二进制文件
cd IndexFlow-core
cargo build --release
sudo cp target/release/indexflow-core /usr/local/bin/indexflow-core
步骤 2:配置系统用户与存储
sudo useradd -r -s /bin/false -d /var/lib/indexflow indexflow
sudo mkdir -p /var/lib/indexflow
sudo mkdir -p /etc/indexflow
sudo chown -R indexflow:indexflow /var/lib/indexflow
步骤 3:生产环境文件
创建 /etc/indexflow/indexflow.env,设置 SERVER_HOST、SERVER_PORT、DATABASE_URL、worker 间隔、JWT_SECRET、DRY_RUN=false 和 RUST_LOG。
步骤 4:Systemd 服务单元
创建 /etc/systemd/system/indexflow.service,以 indexflow 用户运行 /usr/local/bin/indexflow-core,并设置 ProtectSystem=strict、ProtectHome=true 和 ReadWritePaths=/var/lib/indexflow。
启用并启动:
sudo systemctl daemon-reload
sudo systemctl enable --now indexflow
3. 部署 IndexFlow-cloud 商业 Web 服务器(www.indexflowing.com)
步骤 1:构建二进制文件
cd IndexFlow-cloud
cargo build --release
sudo cp target/release/indexflowing-web /usr/local/bin/indexflowing-web
步骤 2:Systemd 单元配置
创建 /etc/systemd/system/indexflowing-web.service,以 www-data 用户运行 Web 服务,设置端口 8000。
启用并启动:
sudo systemctl daemon-reload
sudo systemctl enable --now indexflowing-web
4. Web 应用的 Nginx 反向代理
创建 /etc/nginx/sites-available/indexflowing.com,将 www.indexflowing.com 的请求代理到 http://127.0.0.1:8000,并保留 Upgrade、Host 和转发相关请求头。
5. SQLite 备份与维护
IndexFlow 以 WAL 模式运行 SQLite。无需停止服务即可创建在线备份:
# Atomic online backup using sqlite3 CLI
sqlite3 /var/lib/indexflow/indexflow.db ".backup '/backup/indexflow-$(date +%Y%m%d%H%M).db'"
添加到 cron 以执行每日自动备份:
0 2 * * * sqlite3 /var/lib/indexflow/indexflow.db ".backup '/backup/indexflow-$(date +\%Y\%m\%d).db'"