# openJiuwen market_place (example) # # ============================================================================= # MARKET_PLACE SERVICE # ============================================================================= # ----------------------------------------------------------------------------- # [服务基础配置] # 必填 # ----------------------------------------------------------------------------- # 默认仅监听本机回环;如需局域网内其他机器访问,改为 0.0.0.0 STORE_HOST=127.0.0.1 STORE_PORT=8100 # 可选:对应 plugins_market.core.config.Settings.debug(env 名 MARKET_ + debug)。未设置时默认为 true。 # true 时 marketplace/main.py 会开启 uvicorn reload(开发热重载);生产建议显式设为 false,关闭 reload。 MARKET_DEBUG=false # 可选:接口日志开关,默认 true(开启)。设为 false 则不记录 interface.log # INTERFACE_LOG_ENABLED=true # 可选:隐私声明 Markdown 路径(UTF-8)。未设置时默认读取 marketplace/privacy-statement.md。 # GET /api/v1/site/privacy-statement 直接返回 Markdown 正文(非 JSON),供浏览器新标签查看。 # 支持:MARKET_PRIVACY_STATEMENT_FILE 或 PRIVACY_STATEMENT_FILE # 可选:上传指南 Markdown 路径(UTF-8)。未设置时默认读取 marketplace/publish-guide.md。 # GET /api/v1/site/publish-guide 直接返回 Markdown 正文;页面路径 /publish-guide。 # 英文为同目录 publish-guide.en.md,请求加 ?lang=en。文件缺失时返回 404。 # 支持:MARKET_PUBLISH_GUIDE_FILE 或 PUBLISH_GUIDE_FILE # ----------------------------------------------------------------------------- # [数据库配置] # 必填(DB_TYPE 当前仅支持 mysql) # ----------------------------------------------------------------------------- DB_TYPE=mysql DB_HOST=localhost DB_PORT=3306 # Docker 一键部署时:DB_USER 不能为 root,compose 会按 DB_USER/DB_PASSWORD 自动创建专用账号 DB_USER= DB_PASSWORD= STORE_DB_NAME=openjiuwen_market # 可选:整串覆盖(与 DB_TYPE 拼装二选一), # STORE_DB_URL=mysql+pymysql://user:password@localhost:3306/openjiuwen_market?charset=utf8mb4 # # 可选:SQLAlchemy 连接池。未设时按 STORE_WORKERS(默认 1)推导:单 worker 为 50+50。 # 多 worker 时每进程均分约 200 连接预算。K8s 多副本为「副本数 × (pool_size+max_overflow)」, # 须小于 MySQL max_connections(现网 RDS 常见 4000,4 副本约 400 仍宽裕)。 # STORE_WORKERS=1 # STORE_DB_POOL_SIZE=50 # STORE_DB_MAX_OVERFLOW=50 # STORE_DB_POOL_TIMEOUT=10 # 可选:Redis(多实例部署必须配置,单实例可留空) REDIS_HOST= REDIS_PORT=6379 REDIS_DB=0 # Redis 6 ACL:禁止 default 用户时填写。留空则不传 username。 # REDIS_USERNAME= # Redis 密码统一读取 MARKET_REDIS_PASSWORD(通过 SecurityUtils 解密/透传): # - 未配置 SERVER_AES_MASTER_KEY:此处可填明文密码 # - 已配置 SERVER_AES_MASTER_KEY:此处应填密文(由安全模块解密后使用) MARKET_REDIS_PASSWORD= # ----------------------------------------------------------------------------- # [鉴权配置] # 必填:Bearer 校验依赖该接口(默认 GitCode) # ----------------------------------------------------------------------------- AUTH_USER_API_URL=https://gitcode.com/api/v5/user # 可选:与请求头 X-System-Token 比对(二选一鉴权时使用) SYSTEM_ADMIN_TOKEN= # 可选:管理员请求时作为 user_id/publisher_id 使用 SYSTEM_ADMIN_USER=system_admin # 可选:Skill 上架审核管理员 GitCode 用户名。逗号分隔,或 JSON 数组,例如:alice,bob 或 ["alice","bob"]。非空时优先生效 # MARKET_REVIEW_ADMIN_USERNAMES=alice,bob # ----------------------------------------------------------------------------- # [GitCode OAuth — 插件市场前端浏览器登录] # 需在 GitCode 开放平台注册应用;回调 URL 须与 MARKET_GITCODE_OAUTH_REDIRECT_URI 完全一致 # 例:http://localhost:8100/api/v1/auth/oauth/gitcode/callback # ----------------------------------------------------------------------------- MARKET_GITCODE_OAUTH_ENABLED=false MARKET_GITCODE_OAUTH_CLIENT_ID= MARKET_GITCODE_OAUTH_CLIENT_SECRET= MARKET_GITCODE_OAUTH_REDIRECT_URI=http://127.0.0.1:8100/api/v1/auth/oauth/gitcode/callback # ----------------------------------------------------------------------------- # [GitHub OAuth — 插件市场前端浏览器登录] # 需在 GitHub OAuth Apps 注册应用;回调 URL 须与 MARKET_GITHUB_OAUTH_REDIRECT_URI 完全一致 # 例:http://localhost:8100/api/v1/auth/oauth/github/callback # ----------------------------------------------------------------------------- MARKET_GITHUB_OAUTH_ENABLED=false MARKET_GITHUB_OAUTH_CLIENT_ID= MARKET_GITHUB_OAUTH_CLIENT_SECRET= MARKET_GITHUB_OAUTH_REDIRECT_URI=http://127.0.0.1:8100/api/v1/auth/oauth/github/callback MARKET_GITHUB_OAUTH_SCOPE=read:user user:email public_repo # 一键标星功能开关(true=开,false=关);默认关闭,开启时前端显示按钮、后端接受标星请求 MARKET_GITHUB_STAR_ENABLED=false # 一键标星目标 GitHub 组织;空则回退 openJiuwen-ai MARKET_GITHUB_STAR_ORG=openJiuwen-ai # 一键标星仓库名(逗号分隔,不含 owner)。空则回退默认 10 个核心仓库(见 github_watch.DEFAULT_STAR_REPO_NAMES) # 示例:MARKET_GITHUB_STAR_REPOS=jiuwenswarm,agent-studio,agent-core MARKET_GITHUB_STAR_REPOS= # 授权成功后浏览器重定向到此前缀下的 /login?oauth_session=...(须与前端访问前缀一致;有 /hub 则写 .../hub,根路径部署则不要 /hub) MARKET_OAUTH_FRONTEND_ORIGIN=http://127.0.0.1:9002 # ----------------------------------------------------------------------------- # [AgentOS OAuth — 插件市场前端浏览器登录] # 在AGENTOS中填写的回调 URL 须与 MARKET_AGENTOS_OAUTH_REDIRECT_URI 完全一致 # 例:http://localhost:8100/api/v1/auth/oauth/agentos/callback # ----------------------------------------------------------------------------- MARKET_AGENTOS_OAUTH_ENABLED=false MARKET_AGENTOS_OAUTH_CLIENT_ID= MARKET_AGENTOS_OAUTH_CLIENT_SECRET= MARKET_AGENTOS_OAUTH_REDIRECT_URI=http://127.0.0.1:8100/api/v1/auth/oauth/agentos/callback MARKET_AGENTOS_OAUTH_AUTHORIZE_URL=http://127.0.0.1:80/api/v1/oauth2/authorize MARKET_AGENTOS_OAUTH_TOKEN_URL=http://127.0.0.1:80/api/v1/oauth2/token MARKET_AGENTOS_AUTH_USER_API_URL=http://127.0.0.1:80/api/v1/oauth2/userinfo # ----------------------------------------------------------------------------- # [对象存储配置] # 仅支持 MinIO | OBS(本地默认 MinIO,云端常用 OBS) # ----------------------------------------------------------------------------- # 必填:对象存储基础项 STORAGE_TYPE=MinIO MARKET_BUCKET_NAME=openjiuwen-market-test MARKET_S3_ENDPOINT=http://localhost:9000 # Docker 一键部署时改为 http://skillhub.local:9000(compose 已为 backend 注入 skillhub.local 解析) # static(MinIO 默认 / OBS 可显式):永久 AK/SK MARKET_S3_ACCESS_KEY= MARKET_S3_SECRET_KEY= # 凭证模式:未设置时 MinIO 默认 static,OBS 默认 dynamic # MARKET_CREDENTIALS_MODE= # OBS static:仅用上方 MARKET_S3_* 永久密钥 # OBS dynamic:用下方 HUAWEICLOUD_* 调 IAM 接口获取临时 AK/SK(无需填 MARKET_S3_*) # 可选:IAM 临时凭证会话时长(秒),默认 3600。OBS dynamic 时建议 ≥ MARKET_S3_PRESIGNED_EXPIRES(默认 1800,且不超过云上限) # MARKET_S3_STS_DURATION_SECONDS=3600 # 必填(OBS)/可选(MinIO):S3 区域 MARKET_S3_REGION= # 可选:显式覆盖 SSL # - MinIO 默认推断为 false # - OBS 默认推断为 true(如需可手动填 true/false) MARKET_S3_USE_SSL= # 可选:是否校验对象存储 HTTPS 证书。默认 true(不设即校验)。 # 自建 OBS 必须用 https、但证书不可信时设为 false,boto3 客户端 verify=False。 # 公有云 OBS 保持默认,不要关闭校验。 # MARKET_S3_SSL_VERIFY=true # 可选:GET 预签名有效期(秒),默认 1800(30 分钟);范围见 s3_storage_client # MARKET_S3_PRESIGNED_EXPIRES=1800 # 发布页「下载模板」:私有桶内 zip 对象 Key(须已上传);留空则 GET /api/v1/plugins/publish-template 返回 503 # MARKET_PLUGIN_TEMPLATE_OBJECT_KEY=static/plugin-templates/demo-tools.zip # Skill 模板(前端 /profile/publish?kind=skill「下载模板」);留空则 kind=skill 时同上接口返回 503 # MARKET_SKILL_TEMPLATE_OBJECT_KEY=static/plugin-templates/demo-skill.zip # Git 源创建/同步(POST /plugins/git-sources、POST .../sync)按用户滑动窗口限流(每分钟),0 关闭;多 worker 各进程独立计数 # 服务端需已安装 git 且在 PATH 中(用于 git fetch) # MARKET_GIT_SOURCE_SYNC_RATE_LIMIT_PER_MINUTE=30 # ----------------------------------------------------------------------------- # [通用 Marketplace API 统一限流] # ----------------------------------------------------------------------------- # 总开关(默认 false)。置 true 时限流中间件才生效;存量部署升级默认不改变行为。 # MARKET_RATE_LIMITING_ENABLED=false # 各档位每分钟限额(0 = 关闭该档位);滑动窗口基于进程内存,多副本各自独立计数。 # - 公开查询(搜索/详情/下载/群组发现等 GET,按 IP)默认 300 # MARKET_RATE_LIMIT_PUBLIC_READ_PER_MINUTE=300 # - 发布(POST /api/v1/plugins 含新版本,按凭证用户)默认 10 # MARKET_RATE_LIMIT_PUBLISH_PER_MINUTE=10 # - 批量/重型查询(interactions/batch、recommend*,按凭证用户)默认 5 # MARKET_RATE_LIMIT_BATCH_PER_MINUTE=5 # - 登录/OAuth(/api/v1/auth/*,按 IP)默认 20 # MARKET_RATE_LIMIT_AUTH_PER_MINUTE=20 # - 其余变更类端点兜底(交互/群组管理/通知/标星/审核,按凭证用户)默认 30 # MARKET_RATE_LIMIT_DEFAULT_WRITE_PER_MINUTE=30 # 是否信任 X-Forwarded-For / X-Real-IP 作为客户端 IP(IP 维度限流)。 # true(默认):适合 nginx 等受信反代前置、由代理覆写转发头的部署; # false:后端直连暴露时使用 peer,避免客户端伪造转发头绕过/投毒限流。 # MARKET_RATE_LIMIT_TRUST_FORWARDED=true # 超限返回 429,响应头含 X-RateLimit-Limit/Remaining/Reset 与 Retry-After。 # 已有限流端点豁免:ClawHub 兼容层、skill-import、git-source sync、Playground。 # ----------------------------------------------------------------------------- # [敏感信息加解密配置(AES + HuaweiCloud KMS)] # ----------------------------------------------------------------------------- # - SERVER_AES_MASTER_KEY: Base64 编码的 32 字节 AES 根密钥 SERVER_AES_MASTER_KEY= # --- KMS Config for Secret Protection # 是否启用 KMS 模式(True/False) HUAWEICLOUD_KMS_ENABLED=False # 华为云IAM配置 HUAWEICLOUD_USERNAME=your_username HUAWEICLOUD_DOMAIN_NAME=your_domain HUAWEICLOUD_IAM_ENDPOINT= # 华为云项目配置 HUAWEICLOUD_PROJECT_NAME=your_project_name HUAWEICLOUD_PROJECT_ID=your_project_id HUAWEICLOUD_REGION=your_region # 华为云KMS配置 HUAWEICLOUD_KMS_KEY_ID=your_kms_key_id HUAWEICLOUD_KMS_ENDPOINT= HUAWEICLOUD_KMS_ENCRYPTION_ALGORITHM=RSAES_OAEP_SHA_256 SECURITY_APPLICATION_SECRET_CACHE_ENABLED=true SECURITY_APPLICATION_SECRET_CACHE_TTL_SECONDS=60 # ----------------------------------------------------------------------------- # [检索模块:向量检索 / LLM 配置] # 启用 embedding / hybrid 检索时必填;仅用 BM25 检索时可留空 # ----------------------------------------------------------------------------- # Embedding 模型 MARKET_RETRIEVAL_EMBEDDING_API_BASE_URL= MARKET_RETRIEVAL_EMBEDDING_API_KEY= MARKET_RETRIEVAL_EMBEDDING_MODEL= MARKET_RETRIEVAL_EMBEDDING_BATCH_SIZE=16 # LLM(progressive / hybrid 检索时使用,纯 BM25 / embedding 可不填) MARKET_RETRIEVAL_MODEL_API_BASE_URL= MARKET_RETRIEVAL_MODEL_API_KEY= MARKET_RETRIEVAL_DEFAULT_LLM_MODEL= MARKET_RETRIEVAL_FINDER_LLM_BASE_URL= MARKET_RETRIEVAL_FINDER_LLM_MODEL= # 技能标签分类 LLM 配置(用于 build_skill_tags) # 必须配置:标签分类直接驱动首页类别展示,不配置则无法使用分类功能。 # 以下三项需全部填写(模型、API 端点、API 密钥),且必须是真实有效、可正常调用的配置; # 填占位符 / 无效值 / 连不通的端点会导致分类任务报错或产出空结果,等同于功能不可用。 # 标签分类用的 LLM 模型 MARKET_RETRIEVAL_SKILL_TAG_LLM_MODEL= # 标签分类用的 API 端点 MARKET_RETRIEVAL_SKILL_TAG_LLM_API_BASE_URL= # 标签分类用的 API 密钥 MARKET_RETRIEVAL_SKILL_TAG_LLM_API_KEY= # 离线索引构建策略(默认 embedding_bm25) # bm25 仅构建 BM25 关键词索引,不需要 embedding / LLM # embedding 仅构建向量索引,需配 EMBEDDING_API_KEY # embedding_bm25 构建向量 + BM25 索引(推荐默认),需配 EMBEDDING_API_KEY # all 在 embedding_bm25 基础上额外构建 tree 索引,需同时配 LLM 和 EMBEDDING_API_KEY # MARKET_RETRIEVAL_BUILD_METHOD=embedding_bm25 # 在线检索策略(默认 embedding) # bm25 纯关键词检索,最快,无需 embedding / LLM # embedding 向量检索 + BM25 兜底,需构建时包含 embedding 索引(推荐默认) # auto 自动降级:有 LLM → progressive+embedding+bm25;无 LLM → embedding+bm25;无 embedding → bm25 # progressive LLM 树状检索,精度最高但延迟高,需构建时包含 tree 索引(即 BUILD_METHOD=all) # MARKET_RETRIEVAL_SEARCH_METHOD=embedding # 召回过滤阈值 # 向量绝对分阈值(-1~1,余弦相似度):仅保留 score >= 阈值 的候选 # 默认未设置,关闭绝对阈值过滤;下方仅为配置示例 # MARKET_RETRIEVAL_EMBEDDING_MIN_SCORE=0.6 # 向量相对分阈值(0~1,默认 0.9):仅保留 score >= best_score * 阈值 的候选 # 同时设置绝对和相对阈值时,候选需同时满足两个条件 # MARKET_RETRIEVAL_EMBEDDING_RELATIVE_MIN_SCORE=0.75 # BM25 绝对分阈值(非负,无固定上限):仅保留 score >= 阈值 的候选 # 默认未设置;BM25 分数受语料和查询影响,下方仅为配置示例 # MARKET_RETRIEVAL_BM25_MIN_SCORE=1.0 # BM25 最少命中 query 词数量:0 表示不过滤,推荐从 1 起调 # MARKET_RETRIEVAL_BM25_MIN_QUERY_TERM_MATCHES=1 # 两路分别过滤后再融合;阈值调整需重启服务,无需重建索引 # RRF 融合时 BM25 的权重占比(0~1,默认 0.5);向量权重自动取 1 - 此值 # 例如 0.7 表示 BM25:向量 = 7:3,控制两路对融合得分的贡献 # 0 表示融合时仅保留向量候选,1 表示融合时仅保留 BM25 候选 # 单路检索与索引不可用时的自动降级逻辑保持不变;调整后需重启服务,无需重建索引 # MARKET_RETRIEVAL_RRF_BM25_WEIGHT=0.5 # 检索索引定时重建(cron 默认每小时整点) # MARKET_RETRIEVAL_REBUILD_CRON=0 * * * * # MARKET_RETRIEVAL_REBUILD_ON_STARTUP=false # 技能标签分类定时任务(默认每分钟) # MARKET_RETRIEVAL_SKILL_TAG_CRON=* * * * * # MARKET_RETRIEVAL_SKILL_TAG_ON_STARTUP=false # OBS 上保留的索引版本数(默认 168 = 每小时构建一次保留最近一周,用于回滚) # MARKET_RETRIEVAL_INDEX_MAX_VERSIONS=168 # ============================================================================= # SKILL REVIEW # ============================================================================= # Skill 发布后审查总开关。默认关闭;需要审查时显式改为 true。 MARKET_SKILL_REVIEW_ENABLED=false # 允许审核员审核自己发布的 Skill。默认关闭(安全优先);仅放行 self_moderation_forbidden 校验, # 不会绕过 is_market_moderation_admin 权限校验。自审场景(如内部测试/单人维护仓库)可置 true。 MARKET_ALLOW_SELF_MODERATION=false # Skill 静态审查语义模型配置(OpenAI-compatible Chat Completions)。 # 仅在 MARKET_SKILL_REVIEW_ENABLED=true 时需要;开启审查后必须配置完整,否则 Skill 发布会被前置拒绝。 MARKET_SKILL_REVIEW_MODEL_BASE_URL= MARKET_SKILL_REVIEW_MODEL_API_KEY= MARKET_SKILL_REVIEW_MODEL_NAME= MARKET_SKILL_REVIEW_MODEL_TIMEOUT_SECONDS=300 # 每用户最多发布的 Skill 类资产数(Skill / SwarmSkill;默认 200) # 仅对「新建资产」生效,已有资产发布新版本不计数、不拦截;0 = 不限制;系统管理员(SYSTEM_ADMIN_USER)始终不受限 MARKET_MAX_SKILLS_PER_USER=200 # ============================================================================= # FRONTEND (plugin market, Vite) # ============================================================================= # 前端端口 FRONTEND_PORT=9002 # 站点 URL 路径前缀(不要首尾斜杠)。留空 = 根路径(与 Docker 不传 build-arg 默认一致);需要 /hub 时设为 hub # FRONTEND_BASE_PATH=hub # 前端开发(Vite)与前端 Docker 镜像(Nginx)共用:API 上游主机与端口(不要写 http://) # - 本地 npm run dev:/api 会代理到 http://BACKEND_URL:BACKEND_PORT # - 前端容器:Nginx 将 /api/ 反代到 BACKEND_URL:BACKEND_PORT(见 docker/Dockerfile.skillhub-frontend) # ============================================================================= BACKEND_URL=127.0.0.1 BACKEND_PORT=8100 # docker-compose 前端容器 nginx 容器内部 upstream 端口(frontend → backend,不对外发布) FRONTEND_UPSTREAM_BACKEND_PORT=8100 # ============================================================================= # ============================================================================= # SKILL PLAYGROUND(在线试用功能) # ============================================================================= # 在线体验仅支持 K8s 部署。Windows 本地安装和 Docker 等非 K8s 基础部署请保持关闭;K8s 配置以 docker/k8s/marketplace-config.yaml 为准。 # 关闭时 /api/v1/playground/* 路由不注册、前端"试用"按钮不显示,不影响其他功能。 PLAYGROUND_ENABLED=false # skill-runner 的 K8s 集群内 Service 地址(仅 PLAYGROUND_ENABLED=true 时生效) SKILL_RUNNER_URL=http://skill-runner.skillhub-system.svc.cluster.local:8900 # 每日配额:每用户每自然日最多创建的 session 数(0 = 不限制;管理员始终不受限) PLAYGROUND_DAILY_LIMIT=20 # 多实例开关:false(默认)= 单副本,会话跟踪状态存进程内存; # true = 状态外置 Redis(必须配置上方 REDIS_HOST,否则启动报错),marketplace 可多副本, # 并支持 skill-runner 多实例的会话粘性路由(配合 SKILL_RUNNER_MULTI_INSTANCE)。 PLAYGROUND_MULTI_INSTANCE=false # ============================================================================= # [Recommender — 个性化推荐(可选)] # 默认关闭。开启后:首页「推荐精选」走 Redis 历史 → Milvus → MMR → 下载量兜底; # 「全部」/ 分类页仍按 MySQL install_count。并暴露 POST /api/v1/recommend(可选 category_id)。 # 需可用的 Redis + Milvus;离线任务由 marketplace APScheduler 调度。 # 首次启用或升级 schema(新增 category_id 字段)后请跑一次 milvus full recreate #(MARKET_REC_REBUILD_ON_STARTUP=true 或手动 --mode full)并 redis_sync。 # 本地 Docker Milvus:见仓库 tools/milvus/ # - 本地容器化部署.md(Windows+WSL) # - 云上测试环境-单机Docker部署.md # - 云上测试环境-K8s部署.md # ============================================================================= MARKET_RECOMMENDER_ENABLED=false # 首页「推荐精选」一次召回上限(再按 page 切片);前端角标读 GET /site/config 的 rec_list_top_k # 全部/分类页不走推荐 MARKET_REC_LIST_TOP_K=50 # POST /recommend 匿名/系统令牌冷启动的进程内公开页缓存条数(默认 30)。 # Swarm 首页 top_k 小于该值时切前缀;大于该值(如专页 500)不走这份缓存。改后需重启 marketplace。 MARKET_REC_PLAZA_CACHE_TOP_K=30 # 火爆值(hot_score)定时重算 cron(标准 5 字段,默认每 2 小时整点)。近期下载用 7 天滚动窗口,评分滞后,2 小时内排名几乎无变化;频繁重算只增 DB 负载。核心市场功能,不受 recommender_enabled 控制 MARKET_HOT_SCORE_RECOMPUTE_CRON=0 */2 * * * # 启动时立即重算一次 hot_score(默认 true,确保首次加载即有火爆值) MARKET_HOT_SCORE_RECOMPUTE_ON_STARTUP=true # 「热门」页签只展示最火爆的前 N 个(total 同步封顶,不暴露全量);前端读 GET /site/config 的 hot_list_top_k MARKET_HOT_LIST_TOP_K=100 # 启动时立即跑 redis_sync + milvus_full(默认 true;设 false 则只等 cron) MARKET_REC_REBUILD_ON_STARTUP=false # MMR 多样性权重 λ ∈ [0, 1](改后需重启 marketplace) # λ 越大越偏相关性(更像纯向量召回排序);λ 越小越偏打散(同类/近邻更不易扎堆) # 0.5 = 相关与多样性各半;1.0 ≈ 关闭多样性;0.0 = 尽量选彼此不相似的结果 MARKET_REC_MMR_LAMBDA=0.5 # Embedding(OpenAI-compatible /embeddings,格式同检索侧;独立配置,不共用检索变量) # 换模型维度后需 milvus full recreate MARKET_REC_EMBEDDING_API_BASE_URL= MARKET_REC_EMBEDDING_API_KEY= MARKET_REC_EMBEDDING_MODEL= MARKET_REC_EMBEDDING_BATCH_SIZE=16 MILVUS_HOST=127.0.0.1 MILVUS_PORT=19530 MILVUS_COLLECTION=skill_index # Milvus 鉴权(服务端 common.security.authorizationEnabled=true 时必填) # 默认内置账号多为 root / Milvus,生产务必改密;密码可走 SERVER_AES_MASTER_KEY 密文 # MILVUS_USER=root # MILVUS_PASSWORD= # Redis 推荐快照 key(可与 marketplace REDIS_HOST 共用) REDIS_TOPK_INSTALL_KEY=skill_rec:topk:install # 0=快照写入全量 install 排序;在线兜底仍按本次 top_k 截断(列表路径用 MARKET_REC_LIST_TOP_K) REDIS_TOPK_K=0 REDIS_USER_SEQ_KEY_PREFIX=skill_rec:user # 离线 cron(标准 5 段) # MARKET_REC_PACKAGE_SYNC_CRON=30 * * * * # MARKET_REC_MILVUS_INCREMENTAL_CRON=45 * * * * # MARKET_REC_MILVUS_FULL_CRON=15 3 * * * # MARKET_REC_REDIS_SYNC_CRON=15 * * * * # 离线拉包目录(相对 marketplace/ 或绝对路径) # MARKET_REC_DOWNLOAD_DIR= # ============================================================================= # 构建加速(可选) # ============================================================================= # 构建 Docker 镜像时 PyPI 下载慢或超时,取消以下两行注释后重新构建。 # 仅在 docker compose 构建 backend 镜像时生效,不影响运行时行为。 # PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple # PIP_TRUSTED_HOST=mirrors.aliyun.com # apt 源(deb.debian.org)不可达时,再取消这行;值为镜像主机名,不含协议和路径。 # APT_MIRROR=mirrors.aliyun.com