教程:使用数据库

一种非常常见的情况是你的应用可能需要一个数据库来运行。 本教程将演示如何在SECoder平台上启动一个数据库,并在应用中使用它。

概览

Deployer中所言,在SECoder上使用数据库需要注意几点:

  • 容器是易失的,CI流程中的deploy操作会销毁当前运行的应用容器以及其中所有的临时数据。 所以数据库的数据应当放于持久卷中。
  • 容器应当大体与进程相对应,同时由于部署操作是“先启动新容器、后关闭旧容器”的Rolling-Out形式, 两个容器同时打开同一份数据库数据可能会带来未知的问题,因此数据库服务应当置于单独容器中。
  • 数据库和应用可能需要特别的配置,这一点应当通过配置项来完成。
  • 数据库的初始化操作可以手动完成

本教程使用的所有代码都可以在database-example中找到。

创建应用仓库与数据库容器

我们首先创建应用仓库,这里我们选择“启用部署”。

创建应用仓库

然后我们开启一个数据库容器,这里我们用PostgreSQL作为例子,使用postgres镜像作为数据库镜像。

创建数据库容器

Note

假如你需要自己特别配置的数据库镜像,你可以考虑把它上传到SECoder GitLab Registry(拉取镜像需要登录,使用GitLab的用户名密码即可)或者Docker Hub上。

Note

假如你不小心敲错了镜像名或者需要切换镜像,你可能需要执行这样的指令

docker run --rm -e API_SERVER=https://deployer.secoder.net/api/ \ -e DEPLOY_ENV=<environment> \ -e DEPLOY_TOKEN=<token>\ ccr.ccs.tencentyun.com/thusepi/deployer \ deployer config replace <container_name> <new_image> [<username> <password>]

其中<environment>为小组名(例:SECoder-Examples),<container_name>为容器名(例:example-postgres), <token>为部署密钥(可在部署管理页查看),<new_image>为新镜像名, 可选的<username>和<password>为拉取镜像需要的凭据。

开发环境数据库的配置

database-example为一个测试样例,需要Postgres数据库来运行。简单起见,它的功能只有显示当前的访问人数。

首先可以在开发环境上创建数据库,并且用psql导入初始数据库。

创建数据库

创建数据库

创建数据库

代码仓库里可以放置一份样例用的配置文件,同时也作为测试环境的配置文件。

将代码提交至GitLab将进行部署操作。

SECoder上数据库容器的配置

持久卷的配置

通过查阅PostgreSQL镜像的文档得知,postgres镜像把所有数据置于/var/lib/postgresql/data下,故我们创建一个持久卷挂载到该路径下。

创建持久卷

挂载持久卷

数据库配置文件

Info

该步是可选的。

假如数据库需要特殊的配置文件来运行,你可能需要创建一个配置项。 创建配置项的教程参见这里;

Warning

MySQL/MariaDB注意事项:Docker Hub的mysql镜像需要设置至少一个关于密码的环境变量正常运行,而SECoder暂时不支持给容器挂载环境变量。 可以使用gjz010/mariadb:该镜像设置了环境变量MYSQL_RANDOM_ROOT_PASSWORD=yes。 或者可以根据需要定制自己的镜像。

暴露端口

数据库需要将端口暴露出来给其它的服务访问。Postgres需要5432端口。

暴露端口

数据库的访问不限于命名空间内部,即该端口是对整个内网开放的。假如你需要更高的安全性,可以考虑使用stunnel之类对流量进行加密。

数据库初始化

Warning

该步是可选的,且该步描述的方法不一定是最优方法。 例如,你可能想通过在应用内暴露一个Install方法来完成数据库的初始化,或者使用ORM的Migration自动完成。 这里只是给出一种简单的方法。

可以通过使用终端来初始化数据库。首先打开管理界面,打开容器的终端,然后在终端里执行初始化数据库的命令。

初始化数据库

经过以上配置后,你可以在内网中通过<container_name>.<environment>.secoder.local的内部域名来访问到该数据库。

应用的配置

设置配置项以使其连接到数据库

运行在SECoder上的应用实例与测试环境的应用实例的配置文件应当是不同的,SECoder使用配置项来解决这个问题:配置项允许你将配置文件挂载入容器中。 在我们的例子中,我们需要把配置文件挂载到/app/config下。

生产环境配置

上传并挂载配置项。

上传配置

挂载配置

测试

经过以上的配置之后,应用应当已经能够连接数据库。测试

测试成功