Merge remote-tracking branch 'upstream/main'
# Conflicts: # backend/internal/server/api_contract_test.go # backend/internal/service/setting_service.go # deploy/docker-compose.yml # frontend/src/components/layout/AppSidebar.vue # frontend/src/views/admin/SettingsView.vue
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
# =============================================================================
|
||||
|
||||
ARG NODE_IMAGE=node:24-alpine
|
||||
ARG GOLANG_IMAGE=golang:1.26.1-alpine
|
||||
ARG GOLANG_IMAGE=golang:1.26.2-alpine
|
||||
ARG ALPINE_IMAGE=alpine:3.20
|
||||
ARG GOPROXY=https://goproxy.cn,direct
|
||||
ARG GOSUMDB=sum.golang.google.cn
|
||||
|
||||
5
deploy/codex-instructions.md.tmpl
Normal file
5
deploy/codex-instructions.md.tmpl
Normal file
@@ -0,0 +1,5 @@
|
||||
You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's computer.
|
||||
|
||||
{{ if .ExistingInstructions }}
|
||||
{{ .ExistingInstructions }}
|
||||
{{ end }}
|
||||
@@ -202,6 +202,32 @@ gateway:
|
||||
#
|
||||
# 注意:开启后会影响所有客户端的行为(不仅限于 VS Code / Codex CLI),请谨慎开启。
|
||||
force_codex_cli: false
|
||||
# Optional: template file used to build the final top-level Codex `instructions`.
|
||||
# 可选:用于构建最终 Codex 顶层 `instructions` 的模板文件路径。
|
||||
#
|
||||
# This is applied on the `/v1/messages -> Responses/Codex` conversion path,
|
||||
# after Claude `system` has already been normalized into Codex `instructions`.
|
||||
# 该模板作用于 `/v1/messages -> Responses/Codex` 转换链路,且发生在 Claude `system`
|
||||
# 已经被归一化为 Codex `instructions` 之后。
|
||||
#
|
||||
# The template can reference:
|
||||
# 模板可引用:
|
||||
# - {{ .ExistingInstructions }} : converted client instructions/system
|
||||
# - {{ .OriginalModel }} : original requested model
|
||||
# - {{ .NormalizedModel }} : normalized routing model
|
||||
# - {{ .BillingModel }} : billing model
|
||||
# - {{ .UpstreamModel }} : final upstream model
|
||||
#
|
||||
# If you want to preserve client system prompts, keep {{ .ExistingInstructions }}
|
||||
# somewhere in the template. If omitted, the template output fully replaces it.
|
||||
# 如需保留客户端 system 提示词,请在模板中显式包含 {{ .ExistingInstructions }}。
|
||||
# 若省略,则模板输出会完全覆盖它。
|
||||
#
|
||||
# Docker users can mount a host file to /app/data/codex-instructions.md.tmpl
|
||||
# and point this field there.
|
||||
# Docker 用户可将宿主机文件挂载到 /app/data/codex-instructions.md.tmpl,
|
||||
# 然后把本字段指向该路径。
|
||||
forced_codex_instructions_template_file: ""
|
||||
# OpenAI 透传模式是否放行客户端超时头(如 x-stainless-timeout)
|
||||
# 默认 false:过滤超时头,降低上游提前断流风险。
|
||||
openai_passthrough_allow_timeout_headers: false
|
||||
@@ -815,7 +841,47 @@ linuxdo_connect:
|
||||
frontend_redirect_url: "/auth/linuxdo/callback"
|
||||
token_auth_method: "client_secret_post" # client_secret_post | client_secret_basic | none
|
||||
# 注意:当 token_auth_method=none(public client)时,必须启用 PKCE
|
||||
use_pkce: true
|
||||
userinfo_email_path: ""
|
||||
userinfo_id_path: ""
|
||||
userinfo_username_path: ""
|
||||
|
||||
# =============================================================================
|
||||
# Generic OIDC OAuth Login (SSO)
|
||||
# 通用 OIDC OAuth 登录(用于 Sub2API 用户登录)
|
||||
# =============================================================================
|
||||
oidc_connect:
|
||||
enabled: false
|
||||
provider_name: "OIDC"
|
||||
client_id: ""
|
||||
client_secret: ""
|
||||
# 例如: "https://keycloak.example.com/realms/myrealm"
|
||||
issuer_url: ""
|
||||
# 可选: OIDC Discovery URL。为空时可手动填写 authorize/token/userinfo/jwks
|
||||
discovery_url: ""
|
||||
authorize_url: ""
|
||||
token_url: ""
|
||||
# 可选(仅补充 email/username,不用于 sub 可信绑定)
|
||||
userinfo_url: ""
|
||||
# validate_id_token=true 时必填
|
||||
jwks_url: ""
|
||||
scopes: "openid email profile"
|
||||
# 示例: "https://your-domain.com/api/v1/auth/oauth/oidc/callback"
|
||||
redirect_url: ""
|
||||
# 安全提示:
|
||||
# - 建议使用同源相对路径(以 / 开头),避免把 token 重定向到意外的第三方域名
|
||||
# - 该地址不应包含 #fragment(本实现使用 URL fragment 传递 access_token)
|
||||
frontend_redirect_url: "/auth/oidc/callback"
|
||||
token_auth_method: "client_secret_post" # client_secret_post | client_secret_basic | none
|
||||
# 注意:当 token_auth_method=none(public client)时,必须启用 PKCE
|
||||
use_pkce: false
|
||||
# 开启后强制校验 id_token 的签名和 claims(推荐)
|
||||
validate_id_token: true
|
||||
allowed_signing_algs: "RS256,ES256,PS256"
|
||||
# 允许的时钟偏移(秒)
|
||||
clock_skew_seconds: 120
|
||||
# 若 Provider 返回 email_verified=false,是否拒绝登录
|
||||
require_email_verified: false
|
||||
userinfo_email_path: ""
|
||||
userinfo_id_path: ""
|
||||
userinfo_username_path: ""
|
||||
|
||||
@@ -32,6 +32,10 @@ services:
|
||||
# Optional: Mount custom config.yaml (uncomment and create the file first)
|
||||
# Copy config.example.yaml to config.yaml, modify it, then uncomment:
|
||||
# - ./config.yaml:/app/data/config.yaml
|
||||
# Optional: Mount a custom Codex instructions template file, then point
|
||||
# gateway.forced_codex_instructions_template_file at /app/data/codex-instructions.md.tmpl
|
||||
# in config.yaml.
|
||||
# - ./codex-instructions.md.tmpl:/app/data/codex-instructions.md.tmpl:ro
|
||||
environment:
|
||||
# Auto Setup
|
||||
- AUTO_SETUP=true
|
||||
@@ -130,7 +134,17 @@ services:
|
||||
- sub2api-network
|
||||
- 1panel-network
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "-q", "-T", "5", "-O", "/dev/null", "http://localhost:8080/health"]
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"wget",
|
||||
"-q",
|
||||
"-T",
|
||||
"5",
|
||||
"-O",
|
||||
"/dev/null",
|
||||
"http://localhost:8080/health",
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
@@ -161,7 +175,11 @@ services:
|
||||
networks:
|
||||
- sub2api-network
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-sub2api} -d ${POSTGRES_DB:-sub2api}"]
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
"pg_isready -U ${POSTGRES_USER:-sub2api} -d ${POSTGRES_DB:-sub2api}",
|
||||
]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
Reference in New Issue
Block a user