Skip to content
本页内容由 AI 辅助生成与翻译,如有不当之处,欢迎协助改进。 在 GitHub 上编辑

配置参考

Fenfa 可通过 config.json 文件、环境变量或管理后台(用于存储和 Apple API 等运行时设置)进行配置。

配置优先级

  1. 环境变量 -- 最高优先级,覆盖一切
  2. config.json 文件 -- 启动时加载
  3. 默认值 -- 未指定时使用

配置文件

在工作目录创建 config.json(或在 Docker 中挂载):

json
{
  "server": {
    "port": "8000",
    "primary_domain": "https://dist.example.com",
    "secondary_domains": [
      "https://cdn1.example.com",
      "https://cdn2.example.com"
    ],
    "organization": "你的公司名称",
    "bundle_id_prefix": "com.yourcompany.fenfa",
    "data_dir": "data",
    "db_path": "data/fenfa.db",
    "dev_proxy_front": "",
    "dev_proxy_admin": ""
  },
  "auth": {
    "upload_tokens": ["your-upload-token"],
    "admin_tokens": ["your-admin-token"]
  }
}

服务器设置

类型默认值说明
server.portstring"8000"HTTP 监听端口
server.primary_domainstring"http://localhost:8000"用于 manifest、回调和下载链接的公开 URL
server.secondary_domainsstring[][]附加域名(CDN、备用访问)
server.organizationstring"Fenfa Distribution"iOS 移动配置描述文件中显示的组织名称
server.bundle_id_prefixstring""生成描述文件的 Bundle ID 前缀
server.data_dirstring"data"SQLite 数据库目录
server.db_pathstring"data/fenfa.db"数据库文件的明确路径
server.dev_proxy_frontstring""公开页面的 Vite 开发服务器 URL(仅开发环境)
server.dev_proxy_adminstring""管理后台的 Vite 开发服务器 URL(仅开发环境)

主域名

primary_domain 设置对 iOS OTA 分发至关重要。它必须是终端用户访问的 HTTPS URL。iOS manifest 文件使用此 URL 生成下载链接,UDID 回调也重定向到此域名。

认证

类型默认值说明
auth.upload_tokensstring[]["dev-upload-token"]上传 API 的 Token
auth.admin_tokensstring[]["dev-admin-token"]管理 API 的 Token(包含上传权限)

更改默认 Token

默认 Token(dev-upload-tokendev-admin-token)仅用于开发环境。部署到生产环境前务必更改。

每个权限范围支持多个 Token,允许为不同的 CI/CD 流水线或团队成员颁发不同的 Token,并可单独撤销。

环境变量

使用环境变量覆盖任何配置值:

变量对应配置说明
FENFA_PORTserver.portHTTP 监听端口
FENFA_DATA_DIRserver.data_dir数据库目录
FENFA_PRIMARY_DOMAINserver.primary_domain公开域名 URL
FENFA_ADMIN_TOKENauth.admin_tokens[0]管理 Token(替换第一个 Token)
FENFA_UPLOAD_TOKENauth.upload_tokens[0]上传 Token(替换第一个 Token)

示例:

bash
FENFA_PORT=9000 \
FENFA_PRIMARY_DOMAIN=https://dist.example.com \
FENFA_ADMIN_TOKEN=secure-random-token \
./fenfa

存储配置

本地存储(默认)

文件存储在工作目录下的 uploads/{product_id}/{variant_id}/{release_id}/filename.ext。无需额外配置。

S3 兼容存储

在管理后台 设置 > 存储 中配置 S3 存储,或通过 API:

bash
curl -X PUT http://localhost:8000/admin/api/settings \
  -H "X-Auth-Token: YOUR_ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "storage_type": "s3",
    "s3_endpoint": "https://account-id.r2.cloudflarestorage.com",
    "s3_bucket": "fenfa-uploads",
    "s3_access_key": "your-access-key",
    "s3_secret_key": "your-secret-key",
    "s3_public_url": "https://cdn.example.com"
  }'

支持的提供商:

  • Cloudflare R2 -- 无出口流量费用,S3 兼容
  • AWS S3 -- 标准 S3
  • MinIO -- 自托管 S3 兼容存储
  • 任何 S3 兼容提供商

上传域名

如果主域名有 CDN 文件大小限制,可配置 upload_domain 作为独立域名,绕过 CDN 限制进行大文件上传。

Apple Developer API

配置 Apple Developer API 凭据以实现自动设备注册。在管理后台 设置 > Apple Developer API 中设置,或通过 API:

字段说明
apple_key_idApp Store Connect 的 API 密钥 ID
apple_issuer_id发行者 ID(UUID 格式)
apple_private_keyPEM 格式的私钥内容
apple_team_idApple Developer Team ID

详见 iOS 分发 了解设置说明。

数据库

Fenfa 通过 GORM 使用 SQLite。数据库文件在配置的 db_path 路径自动创建。迁移在启动时自动执行。

备份

备份 Fenfa 只需复制 SQLite 数据库文件和 uploads/ 目录。使用 S3 存储时,只需本地备份数据库文件。

开发设置

本地开发热重载配置:

json
{
  "server": {
    "dev_proxy_front": "http://localhost:5173",
    "dev_proxy_admin": "http://localhost:5174"
  }
}

设置 dev_proxy_frontdev_proxy_admin 后,Fenfa 将请求代理到 Vite 开发服务器,而不是提供内嵌的前端。这样在开发时可以使用热模块替换。

下一步

Released under the Apache-2.0 License.