为生产环境配置您的应用程序
ABP 为常见的部署场景预定义了最佳性能配置。 但是,根据您部署环境的结构方式,您可能需要考虑一些额外的选项。本文档重点介绍了这些选项。 强烈建议您阅读本文档,以防止在生产环境中出现意外行为。
分布式缓存前缀
ABP 的 分布式缓存基础设施 提供了一个选项,用于为保存到分布式缓存提供程序的所有数据设置键前缀。
此选项的默认值未设置(即 null)。如果您使用的分布式缓存服务器由不同应用程序共享,则可以设置一个前缀值,以将一个应用程序的缓存数据与其他应用程序隔离。
Configure<AbpDistributedCacheOptions>(options =>
{
options.KeyPrefix = "MyCrmApp";
});
就是这样!只要您使用 ABP 的 IDistributedCache<TCacheItem> 或 IDistributedCache<TCacheItem,TKey> 服务,此前缀就会被添加到您应用程序中的所有缓存键。
如果您是分布式缓存的新手,请查阅 缓存文档 。
警告:如果您使用 ASP.NET Core 标准的
IDistributedCache服务,则由您负责添加键前缀(您可以通过注入IOptions<AbpDistributedCacheOptions>来获取该值)。ABP 无法再自动添加。
警告:即使您从未在自己的代码库中使用过分布式缓存,ABP 仍会将其用于某些功能。因此,如果您的缓存服务器在多个系统之间共享,则应始终配置此前缀。
警告:如果您正在构建微服务架构,那么您将拥有多个共享同一分布式缓存服务器的应用程序。这些系统中的所有应用程序(子服务)都应使用相同的缓存前缀和缓存值,以实现整个应用程序范围的一致性。
警告:一些 ABP 的启动模板已预配置为分布式缓存设置前缀值。如果您的应用程序代码已经配置了,请检查一下。
分布式锁前缀
ABP 的 分布式锁基础设施 提供了一个选项,用于为您在分布式锁服务器中使用的所有键设置一个前缀。此选项的默认值未设置(即 null)。如果您使用由不同应用程序共享的分布式锁服务器,可以设置一个前缀值来隔离一个应用程序的锁与其他应用程序的锁。
Configure<AbpDistributedLockOptions>(options =>
{
options.KeyPrefix = "MyCrmApp";
});
就是这样!ABP 会将此前缀添加到您应用程序中的所有键。如果您是分布式锁的新手,请参阅 分布式锁定文档 。
警告:即使您从未在自己的代码库中使用过分布式锁,ABP 仍会将其用于某些功能。因此,如果您的分布式锁服务器在多个系统之间共享,则应始终配置此前缀。
警告:如果您正在构建微服务系统,那么您将拥有多个共享同一分布式锁定服务器的应用程序。在此类系统中,所有应用程序(或服务)通常应使用相同的锁前缀,因为您希望对系统中的资源进行全局锁定。
警告:一些 ABP 的启动模板已预配置为分布式锁定设置前缀值。请检查您的应用程序代码,看看是否已经配置。
邮件发送器
ABP 的 邮件发送 系统从您的应用程序和模块代码中抽象出发送邮件的功能,并允许您在一个地方配置邮件提供程序和设置。
对于开发环境,ABP 不会发送真实邮件。邮件服务被配置为将邮件内容写入开发环境的标准 应用程序日志 。默认情况下,它会写入主机项目 Logs 文件夹中的 Logs.txt 文件。您应该配置邮件设置,以便能够在生产环境中向用户发送邮件。
请参阅 发送邮件 文档,了解如何配置设置以发送实际邮件而不写入日志。
警告:如果您不配置邮件设置,尝试发送邮件时将会出现错误。例如,账户模块 的密码重置功能会在用户忘记密码时向他们发送邮件以重置密码。
短信发送器
ABP 的 短信发送抽象 为向用户发送短信提供了一个统一的接口。 然而,其实现由您自己完成。通常,使用付费的短信服务来发送短信,而 ABP 不依赖于特定的短信提供商。
PRO 用户可以使用 Twilio SMS 模块 来发送短信。
在下面的代码块中,您可以看到在哪里实现 ISmsSender 服务:
public class MySmsSender : ISmsSender, ITransientDependency
{
public async Task SendAsync(SmsMessage smsMessage)
{
// TODO: 使用您的提供商发送...
}
}
ABP 提供了一个 Twilio SMS 模块,作为与流行的 Twilio 平台的预构建集成。
BLOB 提供程序
如果您使用 ABP 的 BLOB 存储 基础设施,您应该关心生产环境中的 BLOB 提供程序。例如,如果您使用 文件系统 提供程序,并且您的应用程序运行在 Docker 容器中,您应该为 BLOB 存储路径配置卷映射。否则,当容器重启时,您的数据将会丢失。此外,如果您有 集群部署 或微服务系统,文件系统也不是一个适合生产的良好提供程序。
查看 BLOB 存储 文档以了解所有可用的 BLOB 存储提供程序。
警告:即使您不直接使用 BLOB 存储系统,您所依赖的模块也可能使用它。例如,ABP 的 文件管理 模块存储文件内容,而 账户 模块在 BLOB 存储系统中存储用户个人资料图片。因此,在生产环境中要小心 BLOB 存储配置。请注意,ABP 使用 数据库提供程序 作为预配置的 BLOB 存储提供程序,它在生产环境中可以正常工作,但您可能仍想使用其他提供程序。
字符串加密
ABP 的 IStringEncryptionService 服务 基于一个密码短语简单地加密和解密给定的字符串。您应该为生产环境配置 AbpStringEncryptionOptions 选项,使用一个强密码并保密。您也可以配置这些选项类的其他属性。请参见以下示例:
Configure<AbpStringEncryptionOptions>(options =>
{
options.DefaultPassPhrase = "gs5nTT042HAL4it1";
});
请注意,ABP CLI 在创建新项目时会自动将密码设置为一个随机值。但是,它存储在 appsettings.json 文件中,并且通常添加到您的源代码管理中。建议使用 用户密码 或 环境变量 来设置该值。
日志记录
ABP 使用 .NET 标准的 日志记录服务 。因此,它与任何适用于 .NET 的日志记录提供程序兼容。ABP 的启动解决方案模板预安装了 Serilog 并为您进行了配置。初始配置会将日志写入文件系统和控制台。文件系统对于开发环境很有用,但建议您为生产环境使用不同的提供程序,例如 Elasticsearch、数据库或任何其他可以正常工作的提供程序。
Swagger UI
ABP 的启动解决方案模板预安装了 Swagger UI。Swagger 是一个非常标准和有用的工具,用于在嵌入到您的应用程序或服务中的内置 UI 上发现和测试您的 HTTP API。它通常在开发环境中使用,但您可能也希望在暂存或生产环境中启用它。
虽然您将始终使用其他技术(例如 授权 系统)来保护您的 HTTP API,但对于某些系统来说,允许恶意软件和人轻易地发现您的 HTTP API 端点详细信息可能被视为一个安全问题。因此,在生产环境中决定启用或禁用 Swagger 时要小心。
您可能还想查看 ABP Swagger 集成 文档。
抠丁客


