Files
geo/server/configs/config.local.yaml.example
T
root 9d6181260a
Desktop Client Build / Resolve Build Metadata (push) Successful in 43s
Frontend CI / Frontend (push) Successful in 3m49s
Backend CI / Backend (push) Failing after 7m10s
Desktop Client Build / Build Desktop Client (push) Successful in 23m4s
Desktop Client Build / Publish Client Artifacts to NAS (push) Successful in 28s
feat(media-supply): add media resource supply marketplace
Introduce an end-to-end media-supply feature: tenant-side resource sync
service/worker backed by a Meijiequan supplier client, ops-side management
APIs, and admin/ops web views for resources, orders, favorites and
submission. Adds a shared digitocr helper, MediaSupply config blocks for
tenant and ops, shared types, and migrations for supplier media resources,
price overrides, customer visibility and order refunds.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 23:17:01 +08:00

290 lines
7.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Copy this file to config.local.yaml and adjust values for your local environment.
# config.local.yaml is gitignored.
server:
port: 8080
mode: debug
# Production should restrict this to real frontend origins.
# Empty keeps local development CORS permissive.
allowed_origins: []
security_headers:
enabled: true
trusted_proxies:
- 127.0.0.1
- ::1
- 10.42.0.0/16
- 10.43.0.0/16
- 172.16.0.0/12
database:
host: localhost
port: 5432
user: geo
password: geo_dev
dbname: geo
sslmode: disable
max_open_conns: 12
max_idle_conns: 3
monitoring_database:
host: localhost
port: 5433
user: geo
password: geo_dev
dbname: geo_monitoring
sslmode: disable
max_open_conns: 8
max_idle_conns: 2
rabbitmq:
url: amqp://geo:geo_dev@localhost:5672/geo
monitor_result_exchange: monitor.result
monitor_result_routing_key: monitor.result.ingest
monitor_result_queue: monitor.result.ingest
monitor_result_dlx: monitor.result.dlx
monitor_result_dlq: monitor.result.ingest.dlq
monitor_result_dlq_routing_key: monitor.result.ingest.dlq
generation_exchange: generation.task
generation_routing_key: generation.task.run
generation_queue: generation.task.run
generation_dlx: generation.task.dlx
generation_dlq: generation.task.run.dlq
generation_dlq_routing_key: generation.task.run.dlq
generation_event_exchange: generation.event
desktop_account_health_exchange: desktop.account.health
desktop_account_health_routing_key: desktop.account.health.report
desktop_account_health_queue: desktop.account.health.report
desktop_account_health_dlx: desktop.account.health.dlx
desktop_account_health_dlq: desktop.account.health.report.dlq
desktop_account_health_dlq_routing_key: desktop.account.health.report.dlq
template_assist_exchange: template.assist
template_assist_routing_key: template.assist.run
template_assist_queue: template.assist.run
template_assist_dlx: template.assist.dlx
template_assist_dlq: template.assist.run.dlq
template_assist_dlq_routing_key: template.assist.run.dlq
compliance_review_exchange: compliance.review
compliance_review_routing_key: compliance.review.run
compliance_review_queue: compliance.review.run
compliance_review_dlx: compliance.review.dlx
compliance_review_dlq: compliance.review.run.dlq
compliance_review_dlq_routing_key: compliance.review.run.dlq
consumer_prefetch: 10
publish_channel_pool_size: 32
# Prefer environment override when needed:
# export RABBITMQ_URL=amqp://geo:geo_dev@localhost:5672/geo
scheduler:
dispatch_interval: 15s
dispatch_timeout: 30s
dispatch_batch_size: 100
dispatch_concurrency: 4
generation_queue_backpressure_limit: 1000
monitoring_workers:
result_ingest_concurrency: 4
projection_rebuild_concurrency: 2
membership:
default_plan_code: free
plans:
- code: free
name: Free
article_generation: 3
article_quota_cycle: lifetime
ai_points_monthly: 0
ai_point_base_chars: 1000
image_storage_bytes: 10485760
company_limit: 1
subscription_duration: 72h
contact_admin_on_expiry: true
- code: plus
name: Plus
article_generation: 200
article_quota_cycle: monthly
ai_points_monthly: 0
ai_point_base_chars: 1000
image_storage_bytes: 524288000
company_limit: 1
subscription_duration: 720h
- code: pro
name: Pro
article_generation: 400
article_quota_cycle: monthly
ai_points_monthly: 1500
ai_point_base_chars: 1000
image_storage_bytes: 1073741824
company_limit: 2
subscription_duration: 720h
brand_library:
free_brand_limit: 1
paid_brand_limit: 2
question_limits_by_plan:
default: 25
free: 5
plus: 25
pro: 50
max_keywords: 5
max_questions_per_keyword: 5
redis:
addr: localhost:6379
qdrant:
url: localhost:6334
collection: geo_knowledge_chunks
timeout: 15s
object_storage:
provider: minio
endpoint: localhost:9000
bucket: geo-private
use_ssl: false
public_base_url: ""
region: ""
force_path_style: false
# Prefer environment override for secrets:
# export OBJECT_STORAGE_ACCESS_KEY=minioadmin
# export OBJECT_STORAGE_SECRET_KEY=minioadmin
# MinIO example:
# provider: minio
# endpoint: localhost:9000
# bucket: geo-private
# use_ssl: false
# force_path_style: true
#
# Cloudflare R2 / S3-compatible example:
# provider: r2
# endpoint: <account-id>.r2.cloudflarestorage.com
# bucket: your-bucket
# region: auto
# use_ssl: true
# force_path_style: true
#
# Aliyun OSS example:
# provider: aliyun
# endpoint: https://oss-cn-hangzhou.aliyuncs.com
# bucket: your-bucket
# region: cn-hangzhou
# use_ssl: true
# public_base_url: https://your-bucket.oss-cn-hangzhou.aliyuncs.com
# export OBJECT_STORAGE_ACCESS_KEY=your-access-key
# export OBJECT_STORAGE_SECRET_KEY=your-secret-key
jwt:
secret: "your-local-secret"
access_ttl: 15m
refresh_ttl: 720h
auth:
login_guard:
enabled: true
password_cipher:
# Empty private_key_pem generates a per-process key. Production multi-instance deployments
# should inject the same private key through AUTH_PASSWORD_CIPHER_PRIVATE_KEY_PEM.
enabled: true
key_id: login-password-rsa-oaep-v1
private_key_pem: ""
llm:
provider: ark
base_url: https://ark.cn-beijing.volces.com/api/v3
model: doubao-seed-2-0-lite-260215
knowledge_url_model: doubao-seed-2-0-mini-260215
timeout: 2m
max_output_tokens: 4000
temperature: 0.7
reasoning_effort: minimal
web_search_limit: 3
# top_p: 0.95
# Prefer environment override for secrets:
# export LLM_API_KEY=your-api-key
compliance:
enabled: true
llm_judge_enabled: false
snapshot_reload_interval: 30s
publish_gate_timeout: 800ms
review_worker_concurrency: 1
review_worker_timeout: 45s
review_max_attempts: 3
# Emergency deployment kill switch:
# export COMPLIANCE_ENABLED=false
retrieval:
provider: siliconflow
base_url: https://api.siliconflow.cn/v1
embedding_model: BAAI/bge-m3
reranker_model: BAAI/bge-reranker-v2-m3
timeout: 30s
chunk_size: 900
chunk_overlap: 120
embedding_batch_size: 16
recall_limit: 12
rerank_top_n: 6
max_chunks_per_doc: 6
overlap_tokens: 60
# Prefer environment override for retrieval api key:
# export SILICONFLOW_API_KEY=your-siliconflow-api-key
# or export RETRIEVAL_API_KEY=your-retrieval-api-key
generation:
queue_size: 128
worker_concurrency: 8
stream_enabled: false
article_timeout: 8m
browser_fetch:
enabled: false
provider: lightpanda
service_url: http://localhost:8082
token: dev-browser-fetch-token
queue_size: 64
worker_concurrency: 2
request_timeout: 45s
cache_ttl: 6h
allowed_domains:
- zhuanlan.zhihu.com
- zhihu.com
- baidu.com
trigger_status:
- 403
- 429
- 500
- 502
- 503
- 504
media_supply:
enabled: true
default_markup_percent: 50
minimum_markup_cents: 0
worker:
enabled: true
poll_interval: 5s
batch_size: 1
order_max_attempts: 3
sync_max_attempts: 2
backlink_sync_interval: 10m
backlink_batch_size: 20
meijiequan:
base_url: http://www.meijiequan.com
# 建议用环境变量注入,或放到未入库的 configs/config.local.yaml
# export MEIJIEQUAN_USER_ID=962
# export MEIJIEQUAN_USERNAME=your-phone
# export MEIJIEQUAN_PASSWORD=your-password
user_id: ""
username: ""
password: ""
session_ttl: 4h
request_timeout: 30s
sync_page_delay: 800ms
sync_page_size: 100
max_sync_pages: 200
published_page_size: 20
published_max_pages: 3
search_options_ttl: 12h
upstream_lock_ttl: 2m
upstream_min_interval: 800ms