XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

EARSystem

【ASP】耳间,网页端的情绪智能推荐系统

公开
关注 0 Fork 0 Star 0
UTF-8

配置与部署

配置项

配置 默认 含义
ConnectionStrings:DefaultConnection LocalDB / EARSystem 开发数据库;生产切换 SQL Server Express
Demo:Enabled Development=true,其余=false 是否生成/展示快捷演示账号入口;Production 始终禁止快捷登录与自动生成
Demo:Longitude / Latitude 120.155 / 30.274 新建演示库的杭州 GCJ-02 中心;修改后不会移动已有样本
AMap:WebServiceKey 空 服务器坐标转换、地理编码与周边搜索
AMap:BrowserKey 空 JS API 2.0 Key,公开于需要地图的页面
AMap:JsSecurityCode 空 安全代理补充的服务器密钥
AMap:AllowExternalReferences false 预留配置;本版不启用第三方地点持久化
BootstrapAdmin:Email / Password 空 首次部署创建管理员,之后不会改写已有账号密码
AllowedHosts localhost;127.0.0.1 部署时设置实际站点域名

Development 配置支持 dotnet user-secrets。生产通过受保护的环境变量或部署系统提供配置。环境变量使用双下划线,例如 AMap__WebServiceKey 和 ConnectionStrings__DefaultConnection。不要把真实密钥或数据库密码写进仓库。

时间统一以 UTC 保存,查询与周报使用北京时间。SQL 表中主要时间字段存 UTC ticks,DemoSeededAt 为 UTC datetimeoffset;这些均由 EF 映射,无须应用自行转换。

LocalDB 与迁移

开发连接:

Server=(localdb)\MSSQLLocalDB;Database=EARSystem;Trusted_Connection=True;TrustServerCertificate=True

Development 启动自动迁移;生产不自动迁移。也可显式执行:

dotnet tool restore
dotnet ef database update --project src/EARSystem.Infrastructure --startup-project src/EARSystem.Web

DesignTimeDbContextFactory 读取 ConnectionStrings__DefaultConnection 环境变量,否则使用上述开发连接。部署迁移时务必设置该变量;设计时工厂不读取 Web 的 user-secrets。

包含两份迁移:初始业务/Identity 模型,演示数据完成标记。标记避免重启后重新生成用户已经删除的示例内容。

演示生成器使用固定随机种子构造虚构地点、波动自评、留空日期和体验;所有密码随机生成。需要重新演示一套完整样本时,设置新的开发库名再运行 --seed-demo;该工具不执行删除或重置。

Windows IIS + SQL Server Express

以下为部署流程,当前交付没有向公网发布。生产数据库应与演示库分开。

  1. 安装 IIS 和与 .NET 10 对应的 ASP.NET Core Hosting Bundle;为应用创建独立站点及应用池。Hosting Bundle 为 IIS 提供 ASP.NET Core 模块,发布后的 web.config 负责启动应用。微软 IIS 部署文档
  2. 建立 SQL Server Express 数据库 EARSystemProd,给应用所用数据库身份最小必要的业务读写权限;迁移使用单独具有建表权限的部署身份。启用可信服务器证书。
  3. 在管理员终端设置迁移连接字符串并执行迁移。示意连接为 Server=YOUR-SERVER\SQLEXPRESS;Database=EARSystemProd;Integrated Security=True;Encrypt=True;TrustServerCertificate=False。请替换实际服务器;不要在共享终端回显连接凭据。
  4. 发布应用:
dotnet publish src/EARSystem.Web -c Release -o artifacts/publish
  1. 将发布目录配置为 IIS 站点根目录;配置可信 HTTPS 证书、实际主机名和防火墙规则。本站路由以根目录为基准,第一版不支持部署在虚拟子路径下。
  2. 为站点配置 ASPNETCORE_ENVIRONMENT=Production、AllowedHosts、ConnectionStrings__DefaultConnection、AMap__*。保持 Demo__Enabled=false。
  3. 首次启动前配置 BootstrapAdmin__Email 和一个符合 Identity 要求的强密码(至少 10 位,大小写、数字、符号)。成功建立管理员后,从部署环境移除 BootstrapAdmin__Password。已存在的管理员不会在后续启动被改密。
  4. 给应用池身份发布目录的读取权限和 App_Data/keys 的读写权限;该目录用于持久化 Cookie 的 Data Protection 密钥。服务器静态文件只从 wwwroot 提供,App_Data 不可作为公共目录映射。
  5. 访问 HTTPS 站点,创建普通用户,依次完成日记、在线查询、独立地点收藏、体验和回顾验收。进入管理员后台维护具有独立授权来源的地点目录。

IIS 会转发 HTTPS 协议;本应用在 Production 启用 HSTS、HTTPS 重定向以及 Secure Cookie。如果部署在其他反向代理后,需要先配置可信代理和 ForwardedHeaders,再使用重定向;当前交付以 IIS 部署为准。

SQL Server 的 Integrated Security 需要授予 IIS 应用池身份对应权限;远程数据库可采用专用服务账户或数据库身份。不要沿用 LocalDB 的 TrustServerCertificate=True 作为生产证书策略。

运行与恢复

  • 外部查询 8 秒超时;每个账号的地图相关入口限流 30 次/分钟,超过返回 429。
  • 推荐历史只存目标、模式、算法版本、耗时和独立地点引用;不存查询坐标、距离分项、日记正文或实时供应商响应。
  • SQL 日志不启用敏感数据输出;地图 HttpClient 请求日志关闭,避免记录带 Key 的 URL。
  • 日记和体验用版本号检查并发。遇到 409,界面保留输入,重新加载记录后再提交。
  • 保存体验并同步日记在同一事务内执行。取消同步或删除体验时保留已有日记内容,并解除关联。
  • 有效氛围采用每个用户最新的一份评分统计;数据库另限制同用户同地点同一天一份体验。撤回同意、删除或修改后,下次查询重新聚合。
  • 定期备份数据库和 App_Data/keys;恢复时保留一致的 Data Protection 密钥,否则旧 Cookie 会失效。生产备份与恢复操作由部署者执行。

当前集成边界

提供真实高德接入代码和模拟 HTTP 测试;本次没有真实 Key,因此未完成真实配额、地图瓦片和跨设备 HTTPS 定位验收。现场演示可以全程使用演示模式;正式启用在线模式前按上述步骤进行真实服务验收。

在线地点营业状态当前显示未知,不对复杂营业时间文本作确定判断。未知价格保留,未知评分使用中性值;勾选“仅营业中”时,未知营业状态会被过滤。

演示反馈不计入 Collected 地点的真实氛围。独立样本基线保留来源说明,用户文字感受仅本人可见;匿名贡献只参与六个结构化氛围均值。