[s3] bucket = "" region = "us-east-1" endpoint = "" public_endpoint = "" access_key_id = "" secret_access_key = "" path_style = false request_timeout_secs = 30 [redis] url = "redis://localhost:6379" mode = "standalone" database = 0 pool_size = 8 connection_timeout_secs = 2 username = "" password = "" [database] url = "postgres://postgres:postgres@localhost:5432/gitdata" host = "" port = 5432 username = "postgres" password = "" database = "gitdata" schema_search_path = "public" application_name = "gitdata" ssl_mode = "prefer" max_connections = 16 min_connections = 2 connect_timeout_secs = 10 idle_timeout_secs = 600 acquire_timeout_secs = 10 max_lifetime_secs = 1800 sqlx_logging = false replicas = [] [pow] difficulty = 16 max_difficulty = 24 expires_secs = 60 mac_key = "" [auth.password_policy] min_length = 8 require_upper = true require_lower = true require_digit = true require_symbol = false [auth] verify_code_ttl_secs = 600 verify_code_len = 6 reset_token_ttl_secs = 1800 reset_token_bytes = 32 email_code_rate_limit_secs = 60 max_verify_attempts = 5 min_age = 13 totp_encryption_key = "" [[auth.agreements]] key = "terms" version = "0.1.0" title = "Terms of Service" content_md = "Placeholder terms of service." [[auth.agreements]] key = "privacy" version = "0.1.0" title = "Privacy Policy" content_md = "Placeholder privacy policy." [web] web_base_url = "http://localhost:7051" cors_allow_origins = [] cors_allow_credentials = false [user] deletion_grace_days = 14 email_code_rate_limit_secs = 60 email_verify_code_ttl_secs = 900 email_verify_max_attempts = 5 email_verify_code_len = 6 [quota] space_create_per_day = 10 room_create_per_day = 50 issue_create_per_day = 300 pull_create_per_day = 200 comment_create_per_day = 1000 dm_open_per_day = 100 webhook_create_per_day = 20 space_join_request_per_day = 20 [space] max_pagination = 100 default_pagination = 20 max_space_name_len = 64 max_space_desc_len = 512 max_group_name_len = 64 max_alias_name_len = 64 max_invite_email_len = 254 allow_self_join_groups = false join_request_cooldown_hours = 24 max_dir_nodes = 5000 [chat] max_pagination = 200 default_pagination = 50 max_message_len = 4000 max_topic_len = 1024 max_thread_name_len = 255 max_reaction_emoji_len = 64 max_emoji_name_len = 64 max_bookmark_title_len = 255 max_webhook_name_len = 100 max_mentions_per_message = 20 typing_ttl_secs = 5 presence_ttl_secs = 300 [chat.ws] heartbeat_secs = 30 [chat.upload] max_size = 104857600 presign_ttl_secs = 3600 [issues] max_pagination = 100 default_pagination = 20 max_board_name_len = 100 max_board_prefix_len = 10 max_title_len = 255 max_body_len = 65535 max_comment_len = 65535 [issues.attachment] max_size = 26214400 presign_ttl_secs = 3600 max_pending_per_user = 50 max_label_name_len = 50 max_label_color_len = 7 max_milestone_title_len = 100 max_milestone_description_len = 1024 max_reaction_emoji_len = 32 max_mentions_per_message = 20 [git] repo_root = "/opt/gitdata/repos" objects_root = "/opt/gitdata/objects" max_blob_size = 104857600 git_command_timeout_secs = 300 git_rpc_timeout_secs = 3600 base_url = "http://localhost:7051" http_clone_base_url = "" ssh_clone_host = "" ssh_clone_port = 0 ssh_clone_user = "git" graphql_complexity_limit = 1000 graphql_introspection = true kenshell_endpoint = "http://127.0.0.1:7013" kenshell_rpc_key = "" kenshell_timeout_secs = 3600 [git.ssh] bind_addr = "0.0.0.0" port = 7053 host_key_path = "/opt/gitdata/ssh_host_ed25519" banner = "" max_sessions = 64 auth_rejection_time = 2 inactivity_timeout = 300 keepalive_interval = 30 keepalive_max = 3 [email] default_locale = "en" [email.rpc] endpoint = "" rpc_key = "" timeout_ms = 2000 [apihost] enabled = true bind_addr = "0.0.0.0" port = 7051 [internal] # /api/v1/internal/* 的服务密钥,至少 32 字符;留空则拒绝所有 internal 请求。 service_key = "" [oauth] enabled = false issuer = "http://127.0.0.1:7021" client_id = "gitdata-web" client_secret = "" redirect_uri = "http://localhost:5173/api/v1/auth/callback" # 本机同时跑两套前端:vite dev(5173) 和网关托管的构建产物(7041)。 # 请求 Host 命中这里时,回调地址按该主机改写,两套都能各自登录。 redirect_uri_hosts = ["127.0.0.1:5173", "localhost:5173", "127.0.0.1:7041", "localhost:7041"] token_endpoint = "" jwks_url = "" audience = "gitdata.ai" grpc_endpoint = "http://127.0.0.1:7022" rpc_key = "" session_cookie = "gitdata_session" refresh_cookie = "gitdata_refresh" cookie_domain = "" cookie_path = "/" cookie_secure = false cookie_same_site = "lax" access_ttl_secs = 600 refresh_cookie_max_age_secs = 2592000 recheck_secs = 60 leeway_secs = 30 jwks_cache_secs = 3600 jwks_min_refresh_secs = 30 http_timeout_ms = 2000 chat_audience = "chat.gitdata.ai" [githost] enabled = true http_bind_addr = "0.0.0.0" http_port = 7052 [rocketmq] enabled = false name_server = "127.0.0.1:9876" producer_group = "gitdata" topic_prefix = "gitdata" send_timeout_ms = 5000 max_message_bytes = 4194304 [push] enabled = false vapid_public_key = "" vapid_private_key = "" vapid_subject = "mailto:ops@example.com" workers = 2 max_attempts = 3 retry_backoff_base_secs = 30 request_timeout_secs = 10 ttl_secs = 86400 [livekit] enabled = false url = "ws://127.0.0.1:7880" api_url = "http://127.0.0.1:7880" api_key = "" api_secret = "" token_ttl_secs = 7200 empty_timeout_secs = 300 departure_timeout_secs = 20 default_max_participants = 50 presence_ttl_secs = 43200 hand_ttl_secs = 3600 recording_enabled = false