CapRover

数据库连接


通过 一键应用 部署的所有数据库,都会以 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 已经在大量场景中验证过并保证可用。常见错误见 这里

有时你需要从外部网络连接数据库,这时有两种方案:

  1. 端口转发(Port Forwarding) 这是最简单的方案。你只需要到 CapRover 的 App Config 页面,把宿主机上的任意端口映射到数据库端口即可。例如 MySql 默认端口是 3306,你可以把宿主机的 12345 端口映射到容器的 3306 端口,然后在本地机器上这样连接:
databaseEngine.connect(
    {
        host: <ip address of your CapRover server>,
        port: 12345
    }
)

请确保防火墙允许该宿主机端口访问,否则你将无法连接到数据库。

  1. 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    |
       +-----------+