mirror of
https://github.com/iflytek/skillhub.git
synced 2026-09-07 08:26:00 +00:00
* feat(observability): establish request correlation boundary Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> * feat(observability): add selectable tracing modes Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> * feat(observability): propagate async trace context Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> * docs(observability): document tracing deployment modes Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> * fix(observability): tighten tracing integration boundaries Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> * fix(observability): harden operational log privacy Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> * feat(observability): propagate message trace context Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> * fix(observability): document message propagation semantics Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> * test(auth): isolate security context between tests Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> * fix(observability): skip otlp exporter without endpoint Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com> --------- Signed-off-by: XiaoSeS <87064762+XiaoSeS@users.noreply.github.com>
244 lines
8.9 KiB
YAML
244 lines
8.9 KiB
YAML
server:
|
|
port: 8080
|
|
shutdown: graceful
|
|
forward-headers-strategy: framework
|
|
servlet:
|
|
session:
|
|
timeout: ${SERVER_SERVLET_SESSION_TIMEOUT:8h}
|
|
cookie:
|
|
http-only: true
|
|
secure: ${SESSION_COOKIE_SECURE:false}
|
|
same-site: lax
|
|
|
|
spring:
|
|
messages:
|
|
basename: messages
|
|
application:
|
|
name: skillhub
|
|
lifecycle:
|
|
timeout-per-shutdown-phase: 30s
|
|
jpa:
|
|
hibernate:
|
|
ddl-auto: validate
|
|
open-in-view: false
|
|
properties:
|
|
hibernate:
|
|
dialect: org.hibernate.dialect.PostgreSQLDialect
|
|
jdbc:
|
|
time_zone: UTC
|
|
jackson:
|
|
time-zone: UTC
|
|
flyway:
|
|
enabled: true
|
|
locations: classpath:db/migration
|
|
datasource:
|
|
url: ${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/skillhub}
|
|
username: ${SPRING_DATASOURCE_USERNAME:skillhub}
|
|
password: ${SPRING_DATASOURCE_PASSWORD:skillhub_dev}
|
|
hikari:
|
|
maximum-pool-size: ${DB_POOL_MAX_SIZE:10}
|
|
data:
|
|
redis:
|
|
host: ${SPRING_DATA_REDIS_HOST:${REDIS_HOST:localhost}}
|
|
port: ${SPRING_DATA_REDIS_PORT:${REDIS_PORT:6379}}
|
|
password: ${SPRING_DATA_REDIS_PASSWORD:${REDIS_PASSWORD:}}
|
|
database: ${SPRING_DATA_REDIS_DATABASE:0}
|
|
session:
|
|
store-type: redis
|
|
redis:
|
|
namespace: ${SESSION_REDIS_NAMESPACE:skillhub:session}
|
|
security:
|
|
oauth2:
|
|
client:
|
|
registration:
|
|
github:
|
|
client-id: ${OAUTH2_GITHUB_CLIENT_ID:placeholder}
|
|
client-secret: ${OAUTH2_GITHUB_CLIENT_SECRET:placeholder}
|
|
scope:
|
|
- read:user
|
|
- user:email
|
|
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
|
|
client-name: GitHub
|
|
authorization-grant-type: authorization_code
|
|
gitlab:
|
|
client-id: ${OAUTH2_GITLAB_CLIENT_ID:placeholder}
|
|
client-secret: ${OAUTH2_GITLAB_CLIENT_SECRET:placeholder}
|
|
scope:
|
|
- read_user
|
|
- email
|
|
authorization-grant-type: authorization_code
|
|
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
|
|
client-name: ${OAUTH2_GITLAB_DISPLAY_NAME:GitLab}
|
|
provider:
|
|
github:
|
|
user-info-uri: https://api.github.com/user
|
|
gitlab:
|
|
authorization-uri: ${OAUTH2_GITLAB_BASE_URI:https://gitlab.com}/oauth/authorize
|
|
token-uri: ${OAUTH2_GITLAB_BASE_URI:https://gitlab.com}/oauth/token
|
|
user-info-uri: ${OAUTH2_GITLAB_BASE_URI:https://gitlab.com}/api/v4/user
|
|
user-name-attribute: username
|
|
servlet:
|
|
multipart:
|
|
max-file-size: 100MB
|
|
max-request-size: 100MB
|
|
mail:
|
|
host: ${SPRING_MAIL_HOST:localhost}
|
|
port: ${SPRING_MAIL_PORT:25}
|
|
username: ${SPRING_MAIL_USERNAME:}
|
|
password: ${SPRING_MAIL_PASSWORD:}
|
|
properties:
|
|
mail:
|
|
smtp:
|
|
auth: ${SPRING_MAIL_SMTP_AUTH:false}
|
|
starttls:
|
|
enable: ${SPRING_MAIL_SMTP_STARTTLS_ENABLE:false}
|
|
|
|
skillhub:
|
|
observability:
|
|
tracing-mode: ${SKILLHUB_TRACING_MODE:none}
|
|
log-format: ${SKILLHUB_LOG_FORMAT:text}
|
|
log-async-queue-size: ${SKILLHUB_LOG_ASYNC_QUEUE_SIZE:1024}
|
|
service-version: ${SKILLHUB_SERVICE_VERSION:unknown}
|
|
service-environment: ${SKILLHUB_SERVICE_ENVIRONMENT:local}
|
|
builtin-skills:
|
|
enabled: ${SKILLHUB_BUILTIN_SKILLS_ENABLED:true}
|
|
redis:
|
|
sentinel:
|
|
check-sentinels-list: ${SKILLHUB_REDIS_SENTINEL_CHECK_SENTINELS_LIST:true}
|
|
auth:
|
|
mock:
|
|
enabled: ${SKILLHUB_AUTH_MOCK_ENABLED:false}
|
|
direct:
|
|
enabled: ${SKILLHUB_AUTH_DIRECT_ENABLED:false}
|
|
session-bootstrap:
|
|
enabled: ${SKILLHUB_AUTH_SESSION_BOOTSTRAP_ENABLED:false}
|
|
password-reset:
|
|
code-expiry: ${SKILLHUB_AUTH_PASSWORD_RESET_CODE_EXPIRY:PT10M}
|
|
email-from-address: ${SKILLHUB_AUTH_PASSWORD_RESET_FROM_ADDRESS:noreply@skillhub.local}
|
|
email-from-name: ${SKILLHUB_AUTH_PASSWORD_RESET_FROM_NAME:SkillHub}
|
|
public:
|
|
base-url: ${SKILLHUB_PUBLIC_BASE_URL:}
|
|
access-policy:
|
|
mode: OPEN
|
|
storage:
|
|
provider: ${SKILLHUB_STORAGE_PROVIDER:local}
|
|
local:
|
|
base-path: ${STORAGE_BASE_PATH:/tmp/skillhub-storage}
|
|
s3:
|
|
endpoint: ${SKILLHUB_STORAGE_S3_ENDPOINT:}
|
|
public-endpoint: ${SKILLHUB_STORAGE_S3_PUBLIC_ENDPOINT:}
|
|
bucket: ${SKILLHUB_STORAGE_S3_BUCKET:skillhub}
|
|
access-key: ${SKILLHUB_STORAGE_S3_ACCESS_KEY:}
|
|
secret-key: ${SKILLHUB_STORAGE_S3_SECRET_KEY:}
|
|
region: ${SKILLHUB_STORAGE_S3_REGION:us-east-1}
|
|
force-path-style: ${SKILLHUB_STORAGE_S3_FORCE_PATH_STYLE:true}
|
|
disable-chunked-encoding: ${SKILLHUB_STORAGE_S3_DISABLE_CHUNKED_ENCODING:false}
|
|
auto-create-bucket: ${SKILLHUB_STORAGE_S3_AUTO_CREATE_BUCKET:false}
|
|
presign-expiry: ${SKILLHUB_STORAGE_S3_PRESIGN_EXPIRY:PT10M}
|
|
max-connections: ${SKILLHUB_STORAGE_S3_MAX_CONNECTIONS:100}
|
|
connection-acquisition-timeout: ${SKILLHUB_STORAGE_S3_CONNECTION_ACQUISITION_TIMEOUT:PT2S}
|
|
api-call-attempt-timeout: ${SKILLHUB_STORAGE_S3_API_CALL_ATTEMPT_TIMEOUT:PT10S}
|
|
api-call-timeout: ${SKILLHUB_STORAGE_S3_API_CALL_TIMEOUT:PT30S}
|
|
label:
|
|
max-definitions: ${SKILLHUB_LABEL_MAX_DEFINITIONS:100}
|
|
max-per-skill: ${SKILLHUB_LABEL_MAX_PER_SKILL:10}
|
|
search:
|
|
engine: postgres
|
|
rebuild-on-startup: false
|
|
semantic:
|
|
enabled: true
|
|
weight: 0.35
|
|
candidate-multiplier: 8
|
|
max-candidates: 120
|
|
ratelimit:
|
|
download:
|
|
anonymous-cookie-name: ${SKILLHUB_DOWNLOAD_ANON_COOKIE_NAME:skillhub_anon_dl}
|
|
anonymous-cookie-max-age: ${SKILLHUB_DOWNLOAD_ANON_COOKIE_MAX_AGE:P30D}
|
|
anonymous-cookie-secret: ${SKILLHUB_DOWNLOAD_ANON_COOKIE_SECRET:}
|
|
publish:
|
|
max-file-count: 100
|
|
max-single-file-size: 10485760 # 10MB
|
|
max-package-size: 104857600 # 100MB
|
|
# allowed-file-extensions: uses SkillPackagePolicy.ALLOWED_EXTENSIONS by default
|
|
# Override via SKILLHUB_PUBLISH_ALLOWED_FILE_EXTENSIONS env var if needed
|
|
profile:
|
|
moderation:
|
|
machine-review: ${SKILLHUB_PROFILE_MACHINE_REVIEW_ENABLED:true} # Enable machine review (e.g. sensitive word detection)
|
|
human-review: ${SKILLHUB_PROFILE_HUMAN_REVIEW_ENABLED:true} # Enable human review queue
|
|
fields:
|
|
displayName:
|
|
editable: true
|
|
requires-review: ${SKILLHUB_PROFILE_HUMAN_REVIEW_ENABLED:true}
|
|
email:
|
|
editable: false
|
|
requires-review: false
|
|
device-auth:
|
|
verification-uri: ${DEVICE_AUTH_VERIFICATION_URI:${skillhub.public.base-url:}/cli/auth}
|
|
security:
|
|
scanner:
|
|
enabled: ${SKILLHUB_SECURITY_SCANNER_ENABLED:true}
|
|
base-url: ${SKILLHUB_SECURITY_SCANNER_URL:http://localhost:8000}
|
|
health-path: /health
|
|
scan-path: /scan-upload
|
|
mode: ${SKILLHUB_SECURITY_SCANNER_MODE:local}
|
|
connect-timeout-ms: ${SKILLHUB_SECURITY_SCANNER_CONNECT_TIMEOUT:5000}
|
|
read-timeout-ms: ${SKILLHUB_SECURITY_SCANNER_READ_TIMEOUT:300000}
|
|
retry-max-attempts: ${SKILLHUB_SECURITY_SCANNER_RETRY_MAX:3}
|
|
analyzers:
|
|
behavioral: ${SKILLHUB_SCANNER_USE_BEHAVIORAL:true}
|
|
llm: ${SKILLHUB_SCANNER_USE_LLM:false}
|
|
llm-provider: ${SKILLHUB_SCANNER_LLM_PROVIDER:anthropic}
|
|
llm-consensus-runs: ${SKILLHUB_SCANNER_LLM_CONSENSUS_RUNS:1}
|
|
meta: ${SKILLHUB_SCANNER_USE_META:false}
|
|
ai-defense: ${SKILLHUB_SCANNER_USE_AI_DEFENSE:false}
|
|
ai-defense-api-key: ${SKILLHUB_SCANNER_AI_DEFENSE_API_KEY:}
|
|
virus-total: ${SKILLHUB_SCANNER_USE_VIRUSTOTAL:false}
|
|
trigger: ${SKILLHUB_SCANNER_USE_TRIGGER:false}
|
|
policy:
|
|
preset: ${SKILLHUB_SCANNER_POLICY_PRESET:balanced}
|
|
custom-policy-path: ${SKILLHUB_SCANNER_CUSTOM_POLICY_PATH:}
|
|
fail-on-severity: ${SKILLHUB_SCANNER_FAIL_ON_SEVERITY:high}
|
|
stream:
|
|
key: ${SKILLHUB_SCAN_STREAM_KEY:skillhub:scan:requests}
|
|
group: ${SKILLHUB_SCAN_STREAM_GROUP:skillhub-scanners}
|
|
reclaim-enabled: ${SKILLHUB_SCAN_STREAM_RECLAIM_ENABLED:true}
|
|
reclaim-min-idle: ${SKILLHUB_SCAN_STREAM_RECLAIM_MIN_IDLE:PT2M}
|
|
reclaim-batch-size: ${SKILLHUB_SCAN_STREAM_RECLAIM_BATCH_SIZE:20}
|
|
reclaim-interval: ${SKILLHUB_SCAN_STREAM_RECLAIM_INTERVAL:PT30S}
|
|
bootstrap:
|
|
admin:
|
|
enabled: ${BOOTSTRAP_ADMIN_ENABLED:false}
|
|
user-id: ${BOOTSTRAP_ADMIN_USER_ID:docker-admin}
|
|
username: ${BOOTSTRAP_ADMIN_USERNAME:admin}
|
|
password: ${BOOTSTRAP_ADMIN_PASSWORD:ChangeMe!2026}
|
|
display-name: ${BOOTSTRAP_ADMIN_DISPLAY_NAME:Admin}
|
|
email: ${BOOTSTRAP_ADMIN_EMAIL:admin@skillhub.local}
|
|
|
|
management:
|
|
tracing:
|
|
sampling:
|
|
probability: ${SKILLHUB_TRACING_SAMPLING_PROBABILITY:0.1}
|
|
baggage:
|
|
enabled: false
|
|
propagation:
|
|
type: W3C
|
|
otlp:
|
|
tracing:
|
|
timeout: ${SKILLHUB_OTLP_TIMEOUT:5s}
|
|
compression: ${SKILLHUB_OTLP_COMPRESSION:gzip}
|
|
health:
|
|
mail:
|
|
enabled: ${MANAGEMENT_HEALTH_MAIL_ENABLED:false}
|
|
endpoints:
|
|
web:
|
|
exposure:
|
|
include: health,info
|
|
endpoint:
|
|
health:
|
|
show-details: when-authorized
|
|
metrics:
|
|
tags:
|
|
application: skillhub
|
|
export:
|
|
prometheus:
|
|
enabled: false
|