数据库连接
通过 一键应用 部署的所有数据库,都会以 Docker 容器的形式运行。每个容器的名称都会带上 srv-captain-- 前缀,以避免与同一台宿主机上其他容器的名称冲突。所有容器都可以通过 Docker overlay network 相互通信。网络结构大致如下:
Outside World
+
|
+---------+---+---+-----------------------------+
| | | |
| | NGINX | |
| | | |
| +--+-------+---+ |
| | | |
| | | |
| +---v--+ +-----v+ +-----------+ |
| | App1 | | App2 +------> Database1 | |
| +------+ +------+ +-----------+ |
| |
+-----------------------------------------------+内部连接
最简单的连接方式,是在上图中让 App2 连接到 Database1。这种情况下,你只需要连接到 srv-captain--database1 并指定端口即可。完全不需要做端口映射或额外配置。你的代码大概会是这样:
databaseEngine.connect(
{
host: srv-captain--database1,
port: 5000
}
)外部连接
重要:如果你在外部连接上遇到问题,很可能是配置不正确。CapRover 已经在大量场景中验证过并保证可用。常见错误见 这里
有时你需要从外部网络连接数据库,这时有两种方案:
- 端口转发(Port Forwarding)
这是最简单的方案。你只需要到 CapRover 的 App Config 页面,把宿主机上的任意端口映射到数据库端口即可。例如 MySql 默认端口是
3306,你可以把宿主机的12345端口映射到容器的3306端口,然后在本地机器上这样连接:
databaseEngine.connect(
{
host: <ip address of your CapRover server>,
port: 12345
}
)请确保防火墙允许该宿主机端口访问,否则你将无法连接到数据库。
- SSH 隧道(SSH Tunneling)
这种方法更高级。要使用它,你首先需要部署一个 SSH 一键应用。你可以在 CapRover 实例的官方一键应用列表中选择它。请务必设置一个足够长且安全的密码。安装过程中,你还需要为该 SSH 镜像设置端口映射,默认使用
4646端口。请确保防火墙允许该端口访问。部署完成后,你就可以在本地机器上运行如下命令:
ssh -L 8181:srv-captain--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 |
+-----------+