项目

为生产环境配置您的应用程序

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 集成 文档。

在本文档中