构建与启动
构建
# server feature 必须显式开启
cd path/to/cr4sync
cargo build --release --features server
CLI-only 构建(不含 axum / tower-http / moka 等):
cargo build --release
启动
cr4sync serve # 用 [serve] 段配置
cr4sync serve --address 0.0.0.0 # 临时覆盖监听地址
cr4sync serve --port 8080 # 临时覆盖端口
cr4sync -c /etc/cr4sync.toml serve # 指定配置文件
命令行参数
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
--address <IP> | string | [serve].address 或 127.0.0.1 | 临时覆盖监听地址。必须是合法 IPv4/IPv6。 |
--port <PORT> | u16 | [serve].port 或 5731 | 临时覆盖监听端口。 |
必须配置段 (最小启动server所需要的配置)
[serve]
# address = "127.0.0.1" # 未指定缺省回环地址, 自行按需更改, 比如 0.0.0.0
# port = 5731 # 未指定缺省 5731, 可以自行指定端口
[serve.cr4]
# 必填, 你的 Cloudreve 后端地址, 必须填写域名, 需校验 license
# 同内网可将域名在 /etc/hosts 中添加映射到 cloudreve 机器的内网ip
server_url = "https://cloudreve.example.com"
# server_port = 443
# server_api_path = "/api/v4"
[log]
# server_log_path = "./logs/server.log"
[license]
# 缺省路径, 得到license文件将其重命名为 license.lic 放到二进制同路径的 credential 目录下
# 也可以手动指定路径
# path = "./credential/license.lic"
[serve.cr4].server_url 缺失时启动失败。其他全部可省。
启动副作用
- 打开 / 创建
./credential/server.db(缺省路径)。首次启动自动执行 migrations(建表 + 索引)。 - 构造
AppState:含ServerDb/AuthValidator/JobManager/reqwest::Client。 - 组装 router:
/health白名单 + 其余路径强制鉴权 +/admin/*走require_admin中间件。 - bind + serve:
tokio::net::TcpListener::bind+axum::serve+ 优雅关停(Ctrl-C 触发 broadcast cancel,所有运行中的 job 收到CancellationToken::cancel)。
凭证目录权限
强烈建议:
chmod 0700 ./credential
chmod 0600 ./credential/server.db
server.db 含第三方 refresh_token 用户信息等加密密文, 加密多重防护。管理员无法查看子用户的三方driver敏感信息。日志完全脱敏。
systemd 单元示例
[Unit]
Description=cr4sync HTTP API server
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/opt/cr4sync
ExecStart=/opt/cr4sync/cr4sync -c /opt/cr4sync/cr4sync.toml serve
Restart=on-failure
RestartSec=5
User=cr4sync
Group=cr4sync
UMask=0077
[Install]
WantedBy=multi-user.target
健康检查
curl http://127.0.0.1:5731/api/v4/cr4sync/health
# {"code":0,"msg":"ok","data":{"ok":true,"service":"cr4sync","version":"..."},"request_id":"01J..."}
日志
- 主日志:
[log].log_path(缺省./logs/sync_core.log),所有模块。 - 额外 layer:
[log].server_log_path(缺省./logs/server.log),过滤target=cr4sync::server::*,HTTP 访问 + 鉴权 + 路由 + 审计写入轨迹专属。 - access_log middleware 每个请求会发一条
info级别记录,含method / path / status / user_id / request_id / elapsed_ms。