在本地准备一个可以使用的 MySQL 数据库,可以使用 Docker Compose 创建一个数据库容器,或者叫数据库服务,在项目下面,新建一个 Compose 文件,名字是 docker-compose.yml。
在这个文件里面,先用 version 设置一下 compose 文件的版本,设置成 3。
然后添加一个 services,它下面可以配置一些需要的服务, 添加一个 mysql 服务,这个服务的名字你可以自己随便定义,下面用 image 设置一个这个容器使用的镜像,用的是 mysql ,后面加上一个环境变量的值,MYSQL_VERSON。
在项目根目录下面,新建一个环境变量文件,名字是 .env,文件里添加一个 MYSQL_VERSON 让它的值等于 5.7。
这样在这个 docker-compose 文件里,这里用的 MYSQL_VERSION 就相当于是 5.7。
继续配置这个服务,添加一个 command,它的值可以配置一下要创建的 mysql 数据库服务,我们需要的是设置一下数据库的 encoding 还有 collation,就是字符的编码还有排序规则。
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
然后把这个 mysql 服务的 restart 设置成 always, 再用 ports 设置一下公开的端口,因为在我们的 Nest 应用里需要连接这个数据库服务,所以这里需要公开 mysql 这个容器里的端口,端口是 3306,对应的容器里的端口也是 3306,这个端口号是 mysql 数据库系统默认用的端口号。
然后是 environment ,设置一下 mysql 这个镜像里的几个环境变量,创建的 mysql 服务会用到这些环境变量的值,MYSQL_ROOT_PASSWORD 是数据库管理系统的 root 用户的密码,这里用一个环境变量来表示,名字是 MYSQL_ROOT_PASSWORD。
MYSQL_DATABASE,要创建的数据库的名字,MYSQL_DATABASE,再添加一个 MYSQL_USER ,值是 MYSQL_USER 环境变量的值,最后再设置与用户的密码,MYSQL_PASSWORD,值是 MYSQL_PASSWORD。
打开 .env 文件,定义需要的几个环境变量,MYSQL_ROOT_PASSWORD ,设置一下 root 用户的密码,然后是 MYSQL_DATABASE,数据库的名字是 nest,下面是 MYSQL_USER,用户名也可以是 nest,MYSQL_PASSWORD ,数据库用户的登录密码,password。
再回到 Compose 文件,下面可以再去定义一个服务,名字叫 myadmin,用的 image 是 phpmyadmin/phpmyadmin,restart 设置成 always。
ports,设置一下公开的端口,本地是 8080,对应容器里的 80 端口,启动服务的时候如果你发现 8080 这个端口被占用了,你可以修改一下这个端口号。
再添加一个 environment,设置一下镜像的环境变量,PMA_HOST 设置一下使用 phpmyadmin 管理的数据库系统的主机名,这里应该设置成 mysql,就是上面定义的这个 mysql 服务的名字。
确定一下 Docker 桌面版已经运行了,然后打开终端,在 docker-compose 文件所在的目录的下面,运行一下 docker-compose up -d。
如果系统上还没有 Compose 文件里需要的镜像,就会先去下载镜像,然后再去创建需要的服务,完成以后,执行 docker-compose ps , 查看一下服务的运行状态。
确定服务都启动正常了,打开浏览器,访问一下 localhost:8080,打开的就是 phpmyadmin 的管理界面,输入 mysql 服务的用户名还有密码,用户名可以是 root ,也可以是 nest ,输入 root,密码也是 root。
这样就会用管理员的身份登录,这里你会发现数据库管理系统里面已经有了一个 nest 数据库,这个数据库就是我们的应用需要用的数据库。
打开这个数据库的 操作,在排序规则这里,你会发现我们设置的排序规则,现在是 utf8mb4_unicode_ci 。
除了可以使用 phpMyAdmin 管理数据库,也可以使用桌面版的软件,比如 MySQL Workbench ,macOS 用户还可以使用 sequel pro。
主机是 127.0.0.1,用户名 root,密码也是 root,端口是我们为 MySQL 这个容器设置的公开的端口,按一下连接,成功以后,再选择要管理的数据库,这里就是 nest 这个数据库。