{ "Database": { "DataSources": { "AppDatabase": { "Write": "Host=120.53.222.17;Port=5432;Database=takeout_app_db;Username=app_user;Password=AppUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", "Reads": [ "Host=120.53.222.17;Port=5432;Database=takeout_app_db;Username=app_user;Password=AppUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" ], "CommandTimeoutSeconds": 30, "MaxRetryCount": 3, "MaxRetryDelaySeconds": 5 }, "IdentityDatabase": { "Write": "Host=120.53.222.17;Port=5432;Database=takeout_identity_db;Username=identity_user;Password=IdentityUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", "Reads": [ "Host=120.53.222.17;Port=5432;Database=takeout_identity_db;Username=identity_user;Password=IdentityUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" ], "CommandTimeoutSeconds": 30, "MaxRetryCount": 3, "MaxRetryDelaySeconds": 5 }, "DictionaryDatabase": { "Write": "Host=120.53.222.17;Port=5432;Database=takeout_dictionary_db;Username=dictionary_user;Password=DictionaryUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", "Reads": [ "Host=120.53.222.17;Port=5432;Database=takeout_dictionary_db;Username=dictionary_user;Password=DictionaryUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" ], "CommandTimeoutSeconds": 30, "MaxRetryCount": 3, "MaxRetryDelaySeconds": 5 }, "LogsDatabase": { "Write": "Host=120.53.222.17;Port=5432;Database=takeout_logs_db;Username=logs_user;Password=Logs112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", "Reads": [ "Host=120.53.222.17;Port=5432;Database=takeout_logs_db;Username=logs_user;Password=Logs112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" ], "CommandTimeoutSeconds": 30, "MaxRetryCount": 3, "MaxRetryDelaySeconds": 5 } } }, "Redis": "49.232.6.45:6379,password=MsuMshk112233,abortConnect=false", "Identity": { "Jwt": { "Issuer": "takeout-saas", "Audience": "takeout-saas-clients", "Secret": "psZEx_O##]Mq(W.1$?8Aia*LM03sXGGx", "AccessTokenExpirationMinutes": 120, "RefreshTokenExpirationMinutes": 10080 }, "LoginRateLimit": { "WindowSeconds": 60, "MaxAttempts": 5 }, "RefreshTokenStore": { "Prefix": "identity:refresh:" } }, "Dictionary": { "Cache": { "SlidingExpiration": "00:30:00" } }, "Tenancy": { "TenantIdHeaderName": "X-Tenant-Id", "TenantCodeHeaderName": "X-Tenant-Code", "IgnoredPaths": [ "/health" ], "RootDomain": "" }, "Storage": { "Provider": "TencentCos", "CdnBaseUrl": "https://saas2025-1388556178.cos.ap-beijing.myqcloud.com", "TencentCos": { "SecretId": "AKID52mHageV8ZnnY5NRL3Xq270fAcw2vb5R", "SecretKey": "B8sPitsiEXcS4ScaMvGMErFOL3ZqsgFa", "Region": "ap-beijing", "Bucket": "saas2025-1388556178", "Endpoint": "https://saas2025-1388556178.cos.ap-beijing.myqcloud.com", "CdnBaseUrl": "https://saas2025-1388556178.cos.ap-beijing.myqcloud.com", "UseHttps": true, "ForcePathStyle": false }, "QiniuKodo": { "AccessKey": "QINIU_ACCESS_KEY", "SecretKey": "QINIU_SECRET_KEY", "Bucket": "takeout-files", "DownloadDomain": "", "Endpoint": "", "UseHttps": true, "SignedUrlExpirationMinutes": 30 }, "AliyunOss": { "AccessKeyId": "OSS_ACCESS_KEY_ID", "AccessKeySecret": "OSS_ACCESS_KEY_SECRET", "Endpoint": "https://oss-cn-hangzhou.aliyuncs.com", "Bucket": "takeout-files", "CdnBaseUrl": "", "UseHttps": true }, "Security": { "MaxFileSizeBytes": 10485760, "AllowedImageExtensions": [ ".jpg", ".jpeg", ".png", ".webp", ".gif" ], "AllowedFileExtensions": [ ".jpg", ".jpeg", ".png", ".webp", ".gif", ".pdf" ], "DefaultUrlExpirationMinutes": 30, "EnableRefererValidation": true, "AllowedReferers": [ "https://admin.example.com", "https://miniapp.example.com" ], "AntiLeechTokenSecret": "ReplaceWithARandomToken" } }, "Sms": { "Provider": "Tencent", "DefaultSignName": "外卖SaaS", "UseMock": true, "Tencent": { "SecretId": "TENCENT_SMS_SECRET_ID", "SecretKey": "TENCENT_SMS_SECRET_KEY", "SdkAppId": "1400000000", "SignName": "外卖SaaS", "Region": "ap-beijing", "Endpoint": "https://sms.tencentcloudapi.com" }, "Aliyun": { "AccessKeyId": "ALIYUN_SMS_AK", "AccessKeySecret": "ALIYUN_SMS_SK", "Endpoint": "dysmsapi.aliyuncs.com", "SignName": "外卖SaaS", "Region": "cn-hangzhou" }, "SceneTemplates": { "login": "LOGIN_TEMPLATE_ID", "register": "REGISTER_TEMPLATE_ID", "reset": "RESET_TEMPLATE_ID" }, "VerificationCode": { "CodeLength": 6, "ExpireMinutes": 5, "CooldownSeconds": 60, "CachePrefix": "sms:code" } }, "RabbitMQ": { "Host": "49.232.6.45", "Port": 5672, "Username": "Admin", "Password": "MsuMshk112233", "VirtualHost": "/", "Exchange": "takeout.events", "ExchangeType": "topic", "PrefetchCount": 20 }, "Otel": { "Endpoint": "", "Sampling": "ParentBasedAlwaysOn", "UseConsoleExporter": true } }