PostgreSQL 部署¶
关于¶
办公套件使用 PostgreSQL。postgres + postgres-init 服务创建并初始化数据库,其他服务通过 POSTGRES_* 变量连接它。
1. 部署¶
git clone https://github.com/bindoffice/bind-docker.git
cd bind-docker/office
cp env.example .env
make openssl
make
2. PostgreSQL 变量¶
变量 |
默认值 |
Description |
|---|---|---|
|
|
PostgreSQL 镜像 |
|
|
PostgreSQL 地址,各服务用它连接,同时也作为端口发布地址,见第 3 节 |
|
|
PostgreSQL user, need modify |
|
|
PostgreSQL password, need modify |
|
空 |
首次启动时额外创建的扩展,逗号分隔,例如 |
完整的变量列表见 配置文件示例 页面。
3. PostgreSQL 和 Redis 端口¶
postgres 和 redis 是仅有的两个不使用 host 网络的服务:host 模式下 ports 会被忽略,端口无法暴露给宿主机。这两个服务都把各自的地址变量同时当作发布地址:
变量 |
默认值 |
对局域网开放 |
|---|---|---|
|
|
|
|
|
|
默认 127.0.0.1 只把端口发布到宿主机回环,本地客户端连接已经够用:
psql "postgresql://postgres:<POSTGRES_PASSWORD>@127.0.0.1:5432/<DB_NAME>?sslmode=disable"
redis-cli -h 127.0.0.1 -p 6379
不要把 REDIS_ADDR 设成 0.0.0.0:6379:redis 没有密码,那样会把 session 和缓存数据暴露给网络上的所有人。
其余服务仍使用 host 网络,通过 127.0.0.1 访问这两个端口,因此 BIND_SQLDB、BIND_SESSION_HEDIS_HOST 无需修改。经发布端口进来的连接源地址不是 127.0.0.1,PostgreSQL 会用 POSTGRES_PASSWORD 认证它们,而不再匹配 pg_hba.conf 里本地的 trust 规则。
整套服务运行在 macOS 的 Docker Desktop 上时,只有已发布的端口会转发到 macOS,因此其他服务(web、smtp、imap 等)虽然在 Docker 虚拟机内监听,但从 Mac 上访问不到。OrbStack 与 macOS 共享 host 网络,所以这些服务在 Mac 上都可以访问。
4. 数据¶
数据库和缓存的数据都存放在各自的目录:
目录 |
数据 |
|---|---|
|
PostgreSQL 文件 |
|
redis 文件 |