数据库连接
作为一键应用部署的数据库会作为 Docker 服务运行。同一 CapRover 集群中的应用可以通过 Docker overlay 网络进行通信。当前安装会使用应用名称作为服务主机名。由 1.15 之前版本升级而来的应用可能会保留带有 srv-captain-- 前缀的实际服务名称;CapRover 会保留此前缀的网络别名以兼容这些应用。网络架构如下:
Outside World
+
|
+---------+---+---+-----------------------------+
| | | |
| | NGINX | |
| | | |
| +--+-------+---+ |
| | | |
| | | |
| +---v--+ +-----v+ +-----------+ |
| | App1 | | App2 +------> Database1 | |
| +------+ +------+ +-----------+ |
| |
+-----------------------------------------------+
内部连接
最简单的连接方式是图中从 App2 连接到 Database1。使用应用名称 database1 和其容器端口。此内部连接不需要公开端口映射:
databaseEngine.connect(
{
host: database1,
port: 5000
}
)
外部连接
**重要:**如果外部连接遇到问题,很可能是配置不正确。CapRover 经过充分实战验证,可以确保正常工作。请参阅这里列出的常见错误。
有时你需要从外部连接到数据库。这种情况下有两种选择:
- 端口转发
这是最简单的方案。你只需进入 CapRover 的应用配置页面,将任意主机端口映射到数据库端口。例如,MySql 默认端口是
3306,你可以将主机的12345端口映射到容器的3306端口,然后在本地计算机上执行类似以下的操作:
databaseEngine.connect(
{
host: <ip address of your CapRover server>,
port: 12345
}
)
请确保在防火墙中允许该主机端口,否则将无法连接到数据库。
- SSH 隧道
此方法更为高级。首先,你需要部署一个 SSH 一键应用。可以在 CapRover 实例的官方一键应用列表中选择它。请务必设置一个足够长且安全的密码。配置过程中,系统还会要求你提供用于映射此 SSH 镜像的端口,默认使用
4646端口。请确保防火墙允许该端口通过。部署此镜像后,你就可以在本地计算机上运行以下命令:
ssh -L 8181:mysql:3306 root@<ip of your CapRover Server> -p 4646
这会将本地的 8181 端口映射到 MySQL 容器的 3306 端口。现在,你可以在本地计算机上执行类似以下的操作:
databaseEngine.connect(
{
host: localhost,
port: 8181
}
)
重要:请注意,你无法通过服务器上的普通 SSH 为数据库建立 SSH 隧道。你必须创建一个 SSH 容器。主机上的 SSH 无法与容器通信。
HOST SYSTEM
+-----------------------------------------------------------------+
| +-------------------+ |
| | | |
| | SSHD ON HOST | |
| +-------------------+ |
| |
| |
| DOCKER OVERLAY NETWORK (isolated environment) |
| +-------------------------------------------------------------+ |
| | | |
| | +----------------+ +--------------------+ | |
| | | | | | | |
| | | SSH Container | | Database Container | | |
| | | +-------->+ | | |
| | +-----^----------+ +--------------------+ | |
| | | | |
| +-------------------------------------------------------------+ |
| | |
+-----------------------------------------------------------------+
|
|
|
+-----------+
| YOU |
+-----------+