阿里云双十一优惠活动,点击链接进行购买: 一年仅需89元即可以购买服务器~。我个人服务器为2核4G配置,也更加推荐购买 2核4G三年799元 配置的服务器。
你可以跟着我的笔记 当我有一台服务器时,我做了什么 来开始维护服务器并搭建应用,将引导你使用 docker 和 k8s 搭建一个自己的服务器开发集群。

# 部署 postgres

postgres 是一个功能强大的开源对象关系型数据库系统,被业界誉为“最先进的开源数据库“。

postgres 不仅功能强大,而且免费开源,你可以在 github 上学习并研究它的源码: postgres/postgres (opens new window)。另外,它在数据类型,内置函数,事务的支持相比 mysql 都要好一些。

但我在个人服务器里选择 postgres 的终极原因是: 我们生产环境中大部分数据库都采用了 postgres

关于 mysqlpostgres 的优劣,可以参考知乎上的一个问题: PostgreSQL 与 MySQL 相比,优势何在? (opens new window)

# 部署

在部署之前,你需要对 docker-compose 以及 traefik 有所了解,可以参考我以前的文章:

这里采用官方镜像 postgres:12-alpine 进行数据库的部署,之所以采用 alpine 作为基础镜像,源于它体积较小。

我们使用 docker-compose 进行数据库的部署, 如果你对它不了解,可以参考我以前写的系列文章 个人服务器运维指南 (opens new window)

对于数据库的存储,我放置于当前目录 ./pg-data 之下,方便迁移。关于 docker-compose.yaml 配置文件如下:

关于我个人服务器下所有服务的配置文件,均维护在我的 github 仓库 shfshanyue/op-note:compose (opens new window)

version: '3'

services:
  db:
    image: postgres:12-alpine
    restart: always
    ports:
      - 5432:5432
    volumes:
      - ./pg-data:/var/lib/postgresql/data
    labels:
      - "traefik.http.routers.db.rule=Host(`db.shanyue.local`)"

# 使用已存在的 traefik 的 network
networks:
  default:
    external:
      name: traefik_default

docker-compose up 启动服务,数据库部署完成

$ docker-compose up -d

# 连接数据库

使用 docker-compose exec 测试是否能够正常连接数据库,通过测试,我们已经正确部署并且连接上了数据库

$ docker-compose exec db psql -U postgres
psql (12.1)
Type "help" for help.

postgres=#

在宿主机中可以通过 docker-composepsql 来连接数据库,那如何在整个局域网集群中连接数据库呢?

# 使用 pgcli 连接数据库

如果把 psql 比作记事本,那么 pgcli 则是带有代码高亮功能的 IDE。在日常开发中,使用 pgcli 足以应付生产环境多个数据库的配置管理。

使用 brew 安装 pgcli:

$ brew install pgcli

使用 pgcli 得以成功连接数据库:

$ pgcli -h db.shanyue.local -U postgres
postgres@db:postgres> \d
+----------+--------+--------+---------+
| Schema   | Name   | Type   | Owner   |
|----------+--------+--------+---------|
+----------+--------+--------+---------+
SELECT 0
Time: 0.030s

Last Updated: 5/9/2020, 3:32:20 PM