diff --git a/Document/05_部署运维.md b/Document/05_部署运维.md index f593ee9..1ff6392 100644 --- a/Document/05_部署运维.md +++ b/Document/05_部署运维.md @@ -508,6 +508,14 @@ crontab -e 0 2 * * * /path/to/backup_db.sh >> /var/log/backup.log 2>&1 ``` +## TODO:基础设施部署脚本 + +- [ ] PostgreSQL 主从:整理主库/从库初始化脚本、basebackup 步骤与故障切换手册。 +- [ ] Redis 哨兵/集群:补充 redis.conf/sentinel.conf 模板以及一主两从搭建命令。 +- [ ] RabbitMQ:编写单节点到镜像队列的安装脚本,记录 VHost、用户、权限、监控等操作。 +- [ ] 腾讯云 COS:整理桶创建、ACL、CDN 绑定与密钥轮换流程,并提供 coscmd/SDK 示例。 +- [ ] Hangfire 存储:确认 PostgreSQL Schema 初始化脚本,补充定期备份、清理、监控的 SOP。 + ## 6. Redis部署 ### 6.1 Redis哨兵模式 diff --git a/Document/12_阿里云网关服务器.md b/Document/12_阿里云网关服务器.md index e9f9c86..8fcea29 100644 --- a/Document/12_阿里云网关服务器.md +++ b/Document/12_阿里云网关服务器.md @@ -3,7 +3,7 @@ ## 基础信息 - IP: 47.94.199.87 - 账户: root -- 密码: C3SyytfBPAU#Ts8a +- 密码: cJ5q2k2iW7XnMA^! - 配置: 2 核 CPU / 2 GB 内存(阿里云) - 地点: 北京 - 用途: 网关 diff --git a/Document/13_腾讯云主PostgreSQL服务器.md b/Document/13_腾讯云主PostgreSQL服务器.md index efa22e3..549647b 100644 --- a/Document/13_腾讯云主PostgreSQL服务器.md +++ b/Document/13_腾讯云主PostgreSQL服务器.md @@ -4,7 +4,7 @@ - IP: 120.53.222.17 - 账户: ubuntu - 密码: P3y$nJt#zaa4%fh5 -- 配置: 2 核 CPU / 4 GB 内存(轻量应用服务器,腾讯云) +- 配置: 2 核 CPU / 4 GB 内存 - 地点: 北京 - 用途: 主 PostgreSQL / 数据库服务器 - 到期时间: 2026-11-26 11:22:01 diff --git a/Document/13_腾讯云主应用服务器.md b/Document/13_腾讯云主应用服务器.md deleted file mode 100644 index e651409..0000000 --- a/Document/13_腾讯云主应用服务器.md +++ /dev/null @@ -1,17 +0,0 @@ -# 腾讯云主应用服务器 - -## 基础信息 -- IP: 43.142.81.224 -- 账户: ubuntu -- 密码: hN~~^2NZ+s_%A%tk -- 配置: 4 核 CPU / 4 GB 内存(轻量应用服务器,腾讯云) -- 地点: 上海 -- 用途: 主应用服务器 -- 到期时间: 2026-11-21 - -## 建议补充 -- 系统版本: 待补充(如 `cat /etc/os-release`) -- 带宽/磁盘: 待补充 -- 安全组/开放端口: 待补充 -- 备份与监控: 待补充 -- 变更记录: 待补充 diff --git a/Document/14_天翼云主PostgreSQL服务器.md b/Document/14_天翼云主PostgreSQL服务器.md deleted file mode 100644 index e02f0ed..0000000 --- a/Document/14_天翼云主PostgreSQL服务器.md +++ /dev/null @@ -1,18 +0,0 @@ -# 天翼云主 PostgreSQL 服务器 - -## 基础信息 -- IP: 49.7.179.246 -- 账户: root -- 密码: 7zE&84XI6~w57W7N -- 配置: 4 核 CPU / 8 GB 内存(天翼云) -- 地点: 北京 -- 用途: 主 PostgreSQL 服务器 -- 到期时间: 2027-10-04 17:17:57 - -## 建议补充 -- 系统版本: 待补充(如 `cat /etc/os-release`) -- 带宽/磁盘: 待补充 -- 数据目录: 待补充(如 `/var/lib/postgresql`) -- 数据备份/监控: 待补充 -- 安全组/开放端口: 待补充 -- 变更记录: 待补充 diff --git a/Document/15_腾讯云RedisRabbitMQ服务器.md b/Document/15_腾讯云RedisRabbitMQ服务器.md index a7a5351..3877313 100644 --- a/Document/15_腾讯云RedisRabbitMQ服务器.md +++ b/Document/15_腾讯云RedisRabbitMQ服务器.md @@ -1,13 +1,13 @@ -# 腾讯云 Redis/RabbitMQ 服务器(待购) +# 腾讯云 Redis/RabbitMQ 服务器 ## 基础信息(待补充) -- IP: 待补充 -- 账户: 待补充 -- 密码: 待补充 -- 配置: 2 核 CPU / 4 GB 内存(腾讯云) -- 地点: 待补充 +- IP: 49.232.6.45 +- 账户: ubuntu +- 密码: Z7NsRjT&XnWg7%7X +- 配置: 2 核 CPU / 4 GB 内存 +- 地点: 北京 - 用途: Redis 与 RabbitMQ -- 到期时间: 待补充 +- 到期时间: 2028-11-26 ## 建议补充 - 系统版本: 待补充(如 `cat /etc/os-release`) diff --git a/Document/15_腾讯云RedisRabbitMQ服务器_BACKUP_878.md b/Document/15_腾讯云RedisRabbitMQ服务器_BACKUP_878.md deleted file mode 100644 index 7db352d..0000000 --- a/Document/15_腾讯云RedisRabbitMQ服务器_BACKUP_878.md +++ /dev/null @@ -1,35 +0,0 @@ -<<<<<<< HEAD -# 腾讯云 Redis/RabbitMQ 服务器(待购) - -## 基础信息(待补充) -- IP: 待补充 -- 账户: 待补充 -- 密码: 待补充 -- 配置: 2 核 CPU / 4 GB 内存(腾讯云) -- 地点: 待补充 -- 用途: Redis 与 RabbitMQ -- 到期时间: 待补充 -======= -# 腾讯云 Redis/RabbitMQ 服务器(待购) - -## 基础信息(待补充) -- IP: 49.232.6.45 -- 账户: ubuntu -- 密码: Z7NsRjT&XnWg7%7X -- 配置: 2 核 CPU / 4 GB 内存(腾讯云) -- 地点: 北京 -- 用途: Redis 与 RabbitMQ -- 到期时间: 2028-11-26 ->>>>>>> dc9b853c5c2f2aa40c102df54f9097c31fddf97b - -## 建议补充 -- 系统版本: 待补充(如 `cat /etc/os-release`) -- 带宽/磁盘: 待补充 -- 安全组/开放端口: 待补充(Redis 6379,RabbitMQ 5672/15672 等) -- 数据持久化与备份: 待补充 -- 监控与告警: 待补充 -- 变更记录: 待补充 -<<<<<<< HEAD -======= - ->>>>>>> dc9b853c5c2f2aa40c102df54f9097c31fddf97b diff --git a/Document/15_腾讯云RedisRabbitMQ服务器_BASE_878.md b/Document/15_腾讯云RedisRabbitMQ服务器_BASE_878.md deleted file mode 100644 index e69de29..0000000 diff --git a/Document/15_腾讯云RedisRabbitMQ服务器_LOCAL_878.md b/Document/15_腾讯云RedisRabbitMQ服务器_LOCAL_878.md deleted file mode 100644 index a7a5351..0000000 --- a/Document/15_腾讯云RedisRabbitMQ服务器_LOCAL_878.md +++ /dev/null @@ -1,18 +0,0 @@ -# 腾讯云 Redis/RabbitMQ 服务器(待购) - -## 基础信息(待补充) -- IP: 待补充 -- 账户: 待补充 -- 密码: 待补充 -- 配置: 2 核 CPU / 4 GB 内存(腾讯云) -- 地点: 待补充 -- 用途: Redis 与 RabbitMQ -- 到期时间: 待补充 - -## 建议补充 -- 系统版本: 待补充(如 `cat /etc/os-release`) -- 带宽/磁盘: 待补充 -- 安全组/开放端口: 待补充(Redis 6379,RabbitMQ 5672/15672 等) -- 数据持久化与备份: 待补充 -- 监控与告警: 待补充 -- 变更记录: 待补充 diff --git a/Document/15_腾讯云RedisRabbitMQ服务器_REMOTE_878.md b/Document/15_腾讯云RedisRabbitMQ服务器_REMOTE_878.md deleted file mode 100644 index 1fe441d..0000000 --- a/Document/15_腾讯云RedisRabbitMQ服务器_REMOTE_878.md +++ /dev/null @@ -1,19 +0,0 @@ -# 腾讯云 Redis/RabbitMQ 服务器(待购) - -## 基础信息(待补充) -- IP: 49.232.6.45 -- 账户: ubuntu -- 密码: Z7NsRjT&XnWg7%7X -- 配置: 2 核 CPU / 4 GB 内存(腾讯云) -- 地点: 北京 -- 用途: Redis 与 RabbitMQ -- 到期时间: 2028-11-26 - -## 建议补充 -- 系统版本: 待补充(如 `cat /etc/os-release`) -- 带宽/磁盘: 待补充 -- 安全组/开放端口: 待补充(Redis 6379,RabbitMQ 5672/15672 等) -- 数据持久化与备份: 待补充 -- 监控与告警: 待补充 -- 变更记录: 待补充 - diff --git a/src/Api/TakeoutSaaS.AdminApi/appsettings.Development.json b/src/Api/TakeoutSaaS.AdminApi/appsettings.Development.json index cbdcf16..f015bba 100644 --- a/src/Api/TakeoutSaaS.AdminApi/appsettings.Development.json +++ b/src/Api/TakeoutSaaS.AdminApi/appsettings.Development.json @@ -2,18 +2,18 @@ "Database": { "DataSources": { "AppDatabase": { - "Write": "Host=localhost;Port=5432;Database=takeout_saas_app;Username=app_user;Password=app_password;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "Write": "Host=120.53.222.17;Port=5432;Database=takeout_saas_app;Username=app_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", "Reads": [ - "Host=localhost;Port=5432;Database=takeout_saas_app;Username=app_user;Password=app_password;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" + "Host=120.53.222.17;Port=5432;Database=takeout_saas_app;Username=app_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" ], "CommandTimeoutSeconds": 30, "MaxRetryCount": 3, "MaxRetryDelaySeconds": 5 }, "IdentityDatabase": { - "Write": "Host=localhost;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=identity_password;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "Write": "Host=120.53.222.17;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", "Reads": [ - "Host=localhost;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=identity_password;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" + "Host=120.53.222.17;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" ], "CommandTimeoutSeconds": 30, "MaxRetryCount": 3, @@ -21,12 +21,12 @@ } } }, - "Redis": "localhost:6379,abortConnect=false", + "Redis": "49.232.6.45:6379,password=MsuMshk112233,abortConnect=false", "Identity": { "Jwt": { "Issuer": "takeout-saas", "Audience": "takeout-saas-clients", - "Secret": "ReplaceWithA32CharLongSecretKey_____", + "Secret": "psZEx_O##]Mq(W.1$?8Aia*LM03sXGGx", "AccessTokenExpirationMinutes": 120, "RefreshTokenExpirationMinutes": 10080 }, @@ -54,14 +54,14 @@ }, "Storage": { "Provider": "TencentCos", - "CdnBaseUrl": "https://cdn.example.com", + "CdnBaseUrl": "https://saas2025-1388556178.cos.ap-beijing.myqcloud.com", "TencentCos": { - "SecretId": "COS_SECRET_ID", - "SecretKey": "COS_SECRET_KEY", - "Region": "ap-guangzhou", - "Bucket": "takeout-bucket-123456", - "Endpoint": "", - "CdnBaseUrl": "https://cdn.example.com", + "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 }, @@ -101,7 +101,7 @@ "SecretKey": "TENCENT_SMS_SECRET_KEY", "SdkAppId": "1400000000", "SignName": "外卖SaaS", - "Region": "ap-guangzhou", + "Region": "ap-beijing", "Endpoint": "https://sms.tencentcloudapi.com" }, "Aliyun": { @@ -124,17 +124,17 @@ } }, "RabbitMQ": { - "Host": "localhost", + "Host": "49.232.6.45", "Port": 5672, - "Username": "admin", - "Password": "password", + "Username": "Admin", + "Password": "MsuMshk112233", "VirtualHost": "/", "Exchange": "takeout.events", "ExchangeType": "topic", "PrefetchCount": 20 }, "Scheduler": { - "ConnectionString": "Host=localhost;Port=5432;Database=takeout_saas_scheduler;Username=app_user;Password=app_password;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "ConnectionString": "Host=120.53.222.17;Port=5432;Database=takeout_saas_scheduler;Username=app_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", "WorkerCount": 5, "DashboardEnabled": false, "DashboardPath": "/hangfire" diff --git a/src/Api/TakeoutSaaS.AdminApi/appsettings.Production.json b/src/Api/TakeoutSaaS.AdminApi/appsettings.Production.json new file mode 100644 index 0000000..f015bba --- /dev/null +++ b/src/Api/TakeoutSaaS.AdminApi/appsettings.Production.json @@ -0,0 +1,142 @@ +{ + "Database": { + "DataSources": { + "AppDatabase": { + "Write": "Host=120.53.222.17;Port=5432;Database=takeout_saas_app;Username=app_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "Reads": [ + "Host=120.53.222.17;Port=5432;Database=takeout_saas_app;Username=app_user;Password=MsuMshk112233;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_saas_identity;Username=identity_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "Reads": [ + "Host=120.53.222.17;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=MsuMshk112233;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:" + }, + "AdminSeed": { + "Users": [] + } + }, + "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 + }, + "Scheduler": { + "ConnectionString": "Host=120.53.222.17;Port=5432;Database=takeout_saas_scheduler;Username=app_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "WorkerCount": 5, + "DashboardEnabled": false, + "DashboardPath": "/hangfire" + } +} diff --git a/src/Api/TakeoutSaaS.MiniApi/appsettings.Development.json b/src/Api/TakeoutSaaS.MiniApi/appsettings.Development.json index 1549e0a..0d6da09 100644 --- a/src/Api/TakeoutSaaS.MiniApi/appsettings.Development.json +++ b/src/Api/TakeoutSaaS.MiniApi/appsettings.Development.json @@ -2,18 +2,18 @@ "Database": { "DataSources": { "AppDatabase": { - "Write": "Host=localhost;Port=5432;Database=takeout_saas_app;Username=app_user;Password=app_password;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "Write": "Host=120.53.222.17;Port=5432;Database=takeout_saas_app;Username=app_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", "Reads": [ - "Host=localhost;Port=5432;Database=takeout_saas_app;Username=app_user;Password=app_password;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" + "Host=120.53.222.17;Port=5432;Database=takeout_saas_app;Username=app_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" ], "CommandTimeoutSeconds": 30, "MaxRetryCount": 3, "MaxRetryDelaySeconds": 5 }, "IdentityDatabase": { - "Write": "Host=localhost;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=identity_password;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "Write": "Host=120.53.222.17;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", "Reads": [ - "Host=localhost;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=identity_password;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" + "Host=120.53.222.17;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" ], "CommandTimeoutSeconds": 30, "MaxRetryCount": 3, @@ -21,12 +21,12 @@ } } }, - "Redis": "localhost:6379,abortConnect=false", + "Redis": "49.232.6.45:6379,password=MsuMshk112233,abortConnect=false", "Identity": { "Jwt": { "Issuer": "takeout-saas", "Audience": "takeout-saas-clients", - "Secret": "ReplaceWithA32CharLongSecretKey_____", + "Secret": "psZEx_O##]Mq(W.1$?8Aia*LM03sXGGx", "AccessTokenExpirationMinutes": 120, "RefreshTokenExpirationMinutes": 10080 }, @@ -51,14 +51,14 @@ }, "Storage": { "Provider": "TencentCos", - "CdnBaseUrl": "https://cdn.example.com", + "CdnBaseUrl": "https://saas2025-1388556178.cos.ap-beijing.myqcloud.com", "TencentCos": { - "SecretId": "COS_SECRET_ID", - "SecretKey": "COS_SECRET_KEY", - "Region": "ap-guangzhou", - "Bucket": "takeout-bucket-123456", - "Endpoint": "", - "CdnBaseUrl": "https://cdn.example.com", + "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 }, @@ -98,7 +98,7 @@ "SecretKey": "TENCENT_SMS_SECRET_KEY", "SdkAppId": "1400000000", "SignName": "外卖SaaS", - "Region": "ap-guangzhou", + "Region": "ap-beijing", "Endpoint": "https://sms.tencentcloudapi.com" }, "Aliyun": { @@ -121,10 +121,10 @@ } }, "RabbitMQ": { - "Host": "localhost", + "Host": "49.232.6.45", "Port": 5672, - "Username": "admin", - "Password": "password", + "Username": "Admin", + "Password": "MsuMshk112233", "VirtualHost": "/", "Exchange": "takeout.events", "ExchangeType": "topic", diff --git a/src/Api/TakeoutSaaS.MiniApi/appsettings.Production.json b/src/Api/TakeoutSaaS.MiniApi/appsettings.Production.json new file mode 100644 index 0000000..0d6da09 --- /dev/null +++ b/src/Api/TakeoutSaaS.MiniApi/appsettings.Production.json @@ -0,0 +1,133 @@ +{ + "Database": { + "DataSources": { + "AppDatabase": { + "Write": "Host=120.53.222.17;Port=5432;Database=takeout_saas_app;Username=app_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "Reads": [ + "Host=120.53.222.17;Port=5432;Database=takeout_saas_app;Username=app_user;Password=MsuMshk112233;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_saas_identity;Username=identity_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "Reads": [ + "Host=120.53.222.17;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=MsuMshk112233;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 + } +} diff --git a/src/Api/TakeoutSaaS.UserApi/appsettings.Development.json b/src/Api/TakeoutSaaS.UserApi/appsettings.Development.json index bf4d9de..1f7ff9f 100644 --- a/src/Api/TakeoutSaaS.UserApi/appsettings.Development.json +++ b/src/Api/TakeoutSaaS.UserApi/appsettings.Development.json @@ -2,18 +2,18 @@ "Database": { "DataSources": { "AppDatabase": { - "Write": "Host=localhost;Port=5432;Database=takeout_saas_app;Username=app_user;Password=app_password;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "Write": "Host=120.53.222.17;Port=5432;Database=takeout_saas_app;Username=app_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", "Reads": [ - "Host=localhost;Port=5432;Database=takeout_saas_app;Username=app_user;Password=app_password;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" + "Host=120.53.222.17;Port=5432;Database=takeout_saas_app;Username=app_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" ], "CommandTimeoutSeconds": 30, "MaxRetryCount": 3, "MaxRetryDelaySeconds": 5 }, "IdentityDatabase": { - "Write": "Host=localhost;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=identity_password;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "Write": "Host=120.53.222.17;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", "Reads": [ - "Host=localhost;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=identity_password;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" + "Host=120.53.222.17;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50" ], "CommandTimeoutSeconds": 30, "MaxRetryCount": 3, @@ -21,12 +21,12 @@ } } }, - "Redis": "localhost:6379,abortConnect=false", + "Redis": "49.232.6.45:6379,password=MsuMshk112233,abortConnect=false", "Identity": { "Jwt": { "Issuer": "takeout-saas", "Audience": "takeout-saas-clients", - "Secret": "ReplaceWithA32CharLongSecretKey_____", + "Secret": "psZEx_O##]Mq(W.1$?8Aia*LM03sXGGx", "AccessTokenExpirationMinutes": 120, "RefreshTokenExpirationMinutes": 10080 }, diff --git a/src/Api/TakeoutSaaS.UserApi/appsettings.Production.json b/src/Api/TakeoutSaaS.UserApi/appsettings.Production.json new file mode 100644 index 0000000..1f7ff9f --- /dev/null +++ b/src/Api/TakeoutSaaS.UserApi/appsettings.Production.json @@ -0,0 +1,52 @@ +{ + "Database": { + "DataSources": { + "AppDatabase": { + "Write": "Host=120.53.222.17;Port=5432;Database=takeout_saas_app;Username=app_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "Reads": [ + "Host=120.53.222.17;Port=5432;Database=takeout_saas_app;Username=app_user;Password=MsuMshk112233;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_saas_identity;Username=identity_user;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50", + "Reads": [ + "Host=120.53.222.17;Port=5432;Database=takeout_saas_identity;Username=identity_user;Password=MsuMshk112233;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": "" + } +} diff --git a/src/Infrastructure/TakeoutSaaS.Infrastructure/Common/Persistence/DatabaseConnectionFactory.cs b/src/Infrastructure/TakeoutSaaS.Infrastructure/Common/Persistence/DatabaseConnectionFactory.cs index 0f47cbf..7852aaa 100644 --- a/src/Infrastructure/TakeoutSaaS.Infrastructure/Common/Persistence/DatabaseConnectionFactory.cs +++ b/src/Infrastructure/TakeoutSaaS.Infrastructure/Common/Persistence/DatabaseConnectionFactory.cs @@ -110,7 +110,7 @@ public sealed class DatabaseConnectionFactory( private DatabaseConnectionDetails BuildFallbackConnection() { - const string fallback = "Host=localhost;Port=5432;Database=postgres;Username=postgres;Password=postgres;Pooling=true;Minimum Pool Size=1;Maximum Pool Size=20"; + const string fallback = "Host=120.53.222.17;Port=5432;Database=postgres;Username=postgres;Password=MsuMshk112233;Pooling=true;Minimum Pool Size=1;Maximum Pool Size=20"; logger.LogWarning("使用默认回退连接串:{Connection}", fallback); return new DatabaseConnectionDetails( fallback,