# 托管附加组件：Postgres 和 Redis

Source: https://support.kapsulehost.com/zh-cn/site-addons

附加组件标签页让您无需为网站搭建或维护服务器,就能为网站附加托管的 PostgreSQL 数据库或托管的 Redis 实例。KapsuleHost 负责配置,为您提供连接字符串,并在您移除时彻底清理干净。

## 附加组件在哪里

打开**网站**,点击相应网站,在网站左侧菜单中打开**应用**分组,选择**附加组件**。该页面标题为**受管附加组件**。

目录中有两个选项:

| 附加组件 | 典型用途 |
|---|---|
| PostgreSQL | 非基于 MySQL 的应用程序的主要数据存储 |
| Redis | 缓存、会话存储和后台任务队列 |

这些与标准虚拟主机网站自带的 MySQL 数据库是分开的。后者位于**数据库**标签页中,不需要任何配置:参见[通过 SSH 隧道连接您的数据库](https://support.kapsulehost.com/zh-cn/database-ssh-tunnel)。

![KPanel 中某网站的受管附加组件页面](https://support.kapsulehost.com/help/screenshots/site-addons.3f3b5ee3.webp)

## 申请附加组件

1. 在**添加托管数据库**部分找到对应的附加组件。
2. 点击**添加到网站**。

请求会立即被记录,附加组件会出现在**您的附加组件**中,带有**待处理**标记和*正在等待配置程序*的提示。页面每十五秒自动刷新一次,因此您可以让它保持打开状态。

后台任务每隔几分钟就会处理一次待处理的请求,为您的网站创建专属数据库和专属用户,并回写一个加密的连接字符串。随后状态会变为**已启用**。

> **Note:** 申请或移除附加组件需要 **sites:write** 权限。只读团队成员可以查看现有附加组件及其状态,但相关按钮会被隐藏。

### 每种类型每个网站限一个

一个网站可以拥有一个 PostgreSQL 附加组件和一个 Redis 附加组件。申请第二个相同类型的附加组件会被拒绝,并提示已配置过该附加组件;一旦某个选项已安装,目录中就会将其隐藏。当两者都已安装时,目录部分会显示**所有可用附加组件均已安装**。

## 查看状态

| 状态 | 含义 |
|---|---|
| 待处理 | 已请求,正在排队等待配置程序处理 |
| 配置中 | 正在创建 |
| 已启用 | 可以使用 |
| 失败 | 配置未能完成;该行会显示原因 |
| 已删除 | 已移除,不再列出 |

**失败**状态的行下方会显示实际的错误文本,而非通用提示信息。如果该原因不是您能够自行处理的,请在支持工单中原文引用它:参见[提交支持工单](https://support.kapsulehost.com/zh-cn/opening-a-support-ticket)。

## 获取连接字符串

一旦某个附加组件变为**已启用**状态,该行会显示一个经过掩码处理的连接字符串,密码部分以点号代替,这样您就能一目了然地确认主机和数据库名称,而不会暴露凭据。

点击**复制连接**即可将完整的连接字符串复制到剪贴板。它会在服务器端针对该次请求解密,绝不会显示在页面上,因此屏幕共享和截图都不会泄露它。每次查看操作都会写入网站的审计日志,并显示在[网站活动日志](https://support.kapsulehost.com/zh-cn/site-activity-log)中。

该字符串采用每种引擎常见的 URL 格式,包含为此网站创建的主机、端口、用户、密码和数据库名称。

## 在应用程序中使用它

将连接字符串粘贴到您的应用程序读取配置的位置。对于 Node.js 网站,合适的存放位置是**生产**环境下[密钥](https://support.kapsulehost.com/zh-cn/site-secrets)标签页中,使用诸如 `DATABASE_URL` 或 `REDIS_URL` 这样的键名。

> **Warning:** 请勿将连接字符串硬编码到您会提交的文件中。它包含一个有效密码。如果它进入了 git 远程仓库,就必须将其视为已泄露,而唯一真正的解决办法是删除该附加组件并重新申请一个新的,因为无法从面板中就地轮换该凭据。

## 移除附加组件

点击该行上的**删除**。KPanel 会要求您确认,并直白地说明后果:这将移除该托管数据库,且数据无法恢复。

该行会立即被标记为已删除,配置程序会在下一次运行时清理底层数据库和用户。现有连接会在此清理过程中被终止。

> **Important:** 托管附加组件在删除时不会进行任何备份,也无法撤销。如果其中有您想保留的内容,请在附加组件仍处于活动状态、连接字符串仍然有效时,先使用 `pg_dump` 或 `redis-cli --rdb` 将其导出。

## 在选项之间进行选择

**使用 PostgreSQL**,当您的应用程序需要关系型数据库,且是针对 Postgres 编写的:强约束、事务、JSON 列,以及原本需要额外搭建的全文搜索功能。

**使用 Redis**,用于可以随时丢弃的内容:缓存片段、速率限制计数器、会话存储和任务队列。将其视为快速且易失的存储,而非系统记录。

**使用内置的 MySQL 数据库**,用于 WordPress 以及任何已经针对 MySQL 编写的程序。为 WordPress 网站添加 Postgres 附加组件没有任何实际用处,因为 WordPress 无法与之通信。

## 故障排查

**附加组件长时间处于待处理状态。** 配置程序按计划运行,而非即时执行。请让页面保持打开状态,因为它会自动刷新,然后稍后查看。如果经过几次运行后仍未变化,请提交支持工单,并附上网站域名和附加组件类型。

**配置失败。** 请查看该行上的错误信息。删除失败的附加组件并重新申请,这样做是安全的:失败的行背后从未存在过实际运行的数据库。

**点击复制连接没有任何反应。** 某些浏览器在标签页未获得焦点时会阻止剪贴板写入操作。请先点击页面,然后再次点击该按钮。

**应用程序无法连接。** 请按顺序检查以下三项:附加组件状态是否为**已启用**、您是否复制了该字符串而非重新输入、以及您的应用程序读取的是否是您实际设置的值,而非之前某次部署遗留的旧值。通常需要重启应用程序才能使新配置生效。

**重新部署后连接被拒绝。** 请确认您配置中的连接字符串仍与此页面上的一致。删除并重新申请附加组件会生成新的用户和新的密码,因此旧的字符串将无法使用。

## 下一步该怎么做

- [为网站存储应用密钥](https://support.kapsulehost.com/zh-cn/site-secrets),这是保存连接字符串的正确位置。
- [通过 SSH 隧道连接您的数据库](https://support.kapsulehost.com/zh-cn/database-ssh-tunnel),适用于内置的 MySQL 数据库。
- [网站设置](https://support.kapsulehost.com/zh-cn/site-settings),了解其余的网站级配置。
