欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker PostgreSQL容器化部署方式

 更新時(shí)間:2025年01月04日 09:31:47   作者:輕云UC  
這篇文章主要介紹了如何部署和配置PostgreSQL數(shù)據(jù)庫(kù),包括使用Bitnami的PostgreSQL鏡像、通過(guò)Docker和Docker Compose進(jìn)行部署、配置網(wǎng)絡(luò)和連接、設(shè)置同步復(fù)制、啟用SSL/TLS加密以及使用LDAP認(rèn)證等詳細(xì)步驟

Docker PostgreSQL容器化部署

PostgreSQL標(biāo)準(zhǔn)軟件基于Bitnami PostgreSQL 構(gòu)建。當(dāng)前版本為16.1.0

你可以通過(guò)輕云UC部署工具直接安裝部署,也可以手動(dòng)按如下文檔操作,該項(xiàng)目已經(jīng)全面開(kāi)源,可以從如下環(huán)境獲取

配置文件地址: https://gitee.com/qingplus/qingcloud-platform

連接到其他容器

使用Docker 容器網(wǎng)絡(luò),應(yīng)用程序容器可以輕松訪問(wèn)容器內(nèi)運(yùn)行的 PostgreSQL 服務(wù)器。

連接到同一網(wǎng)絡(luò)的容器可以使用容器名稱作為主機(jī)名來(lái)相互通信。

使用命令行

在此示例中,我們將創(chuàng)建一個(gè) PostgreSQL 客戶端實(shí)例,該實(shí)例將連接到與客戶端在同一 docker 網(wǎng)絡(luò)上運(yùn)行的服務(wù)器實(shí)例。

第 1 步:創(chuàng)建網(wǎng)絡(luò)
docker network create app-tier --driver bridge
步驟 2:?jiǎn)?dòng) PostgreSQL 服務(wù)器實(shí)例

使用命令–network app-tier的參數(shù)docker run將 PostgreSQL 容器連接到網(wǎng)絡(luò)app-tier。

docker run -d --name postgresql-server \
    --network app-tier \
    registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest
第 3 步:?jiǎn)?dòng) PostgreSQL 客戶端實(shí)例

最后,我們創(chuàng)建一個(gè)新的容器實(shí)例來(lái)啟動(dòng) PostgreSQL 客戶端并連接到上一步中創(chuàng)建的服務(wù)器:

docker run -it --rm \
    --network app-tier \
    registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest psql -h postgresql-server -U postgres

使用 Docker Compose 文件

如果未指定,Docker Compose 會(huì)自動(dòng)設(shè)置一個(gè)新網(wǎng)絡(luò)并將所有已部署的服務(wù)附加到該網(wǎng)絡(luò)。但是,我們將顯式定義一個(gè)bridge名為 的新網(wǎng)絡(luò)app-tier。

在此示例中,我們假設(shè)您希望從您自己的自定義應(yīng)用程序映像連接到 PostgreSQL 服務(wù)器,該映像在以下代碼片段中通過(guò)服務(wù)名稱進(jìn)行標(biāo)識(shí)myapp。

version: '2'

networks:
  app-tier:
    driver: bridge

services:
  postgresql:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    networks:
      - app-tier
  myapp:
    image: 'YOUR_APPLICATION_IMAGE'
    networks:
      - app-tier

重要:

替換YOUR_APPLICATION_IMAGE占位符

在您的應(yīng)用程序容器中,使用主機(jī)名postgresql連接到 PostgreSQL 服務(wù)器

啟動(dòng)容器:

docker-compose up -d

配置

容器啟動(dòng)時(shí)

當(dāng)容器執(zhí)行時(shí),初始化或啟動(dòng)postgresql之前,它會(huì)執(zhí)行位于/docker-entrypoint-preinitdb.d的擴(kuò)展名為.sh的文件。

為了將自定義文件放入 docker 映像中,您可以將它們安裝為卷。

將額外的命令行標(biāo)志傳遞給 PostgreSQL

可以通過(guò)以下環(huán)境變量將額外的命令行標(biāo)志傳遞給 postgresql 服務(wù)命令:

  • POSTGRESQL_EXTRA_FLAGS:要附加到postgres啟動(dòng)命令的標(biāo)志。無(wú)默認(rèn)值

初始化一個(gè)新實(shí)例

當(dāng)容器第一次執(zhí)行時(shí),它將執(zhí)行擴(kuò)展名為.sh, .sql.sql.gz的文件,位于/docker-entrypoint-initdb.d目錄下.

為了將自定義文件放入 docker 映像中,您可以將它們安裝為卷。

首次運(yùn)行時(shí)設(shè)置 root 密碼

在上面的命令中您可能已經(jīng)注意到環(huán)境變量的使用POSTGRESQL_PASSWORD。

首次運(yùn)行映像時(shí)傳遞環(huán)境變量POSTGRESQL_PASSWORD會(huì)將postgres用戶的密碼設(shè)置為POSTGRESQL_PASSWORD的值(或POSTGRESQL_PASSWORD_FILE變量中指定的文件的內(nèi)容)。

docker run --name postgresql -e POSTGRESQL_PASSWORD=password123 registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或者通過(guò)修改docker-compose.yml文件:

services:
  postgresql:
  ...
    environment:
      - POSTGRESQL_PASSWORD=password123
  ...

注意! 該postgres用戶是超級(jí)用戶,擁有 PostgreSQL 數(shù)據(jù)庫(kù)的完全管理訪問(wèn)權(quán)限。

首次運(yùn)行時(shí)創(chuàng)建數(shù)據(jù)庫(kù)

POSTGRESQL_DATABASE通過(guò)在第一次運(yùn)行鏡像時(shí)傳遞環(huán)境變量,將創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)。

如果您的應(yīng)用程序要求數(shù)據(jù)庫(kù)已存在,這非常有用,使您不必使用 PostgreSQL 客戶端手動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)。

docker run --name postgresql -e POSTGRESQL_DATABASE=my_database registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或者通過(guò)修改docker-compose.yml文件:

services:
  postgresql:
  ...
    environment:
      - POSTGRESQL_DATABASE=my_database
  ...

首次運(yùn)行時(shí)創(chuàng)建數(shù)據(jù)庫(kù)用戶

您還可以創(chuàng)建一個(gè)受限數(shù)據(jù)庫(kù)用戶,該用戶僅具有使用環(huán)境變量創(chuàng)建的數(shù)據(jù)庫(kù)的權(quán)限POSTGRESQL_DATABASE。為此,請(qǐng)?zhí)峁㏄OSTGRESQL_USERNAME環(huán)境變量。

docker run --name postgresql -e POSTGRESQL_USERNAME=my_user -e POSTGRESQL_PASSWORD=password123 -e POSTGRESQL_DATABASE=my_database registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或者通過(guò)修改docker-compose.yml文件:

services:
  postgresql:
  ...
    environment:
      - POSTGRESQL_USERNAME=my_user
      - POSTGRESQL_PASSWORD=password123
      - POSTGRESQL_DATABASE=my_database
  ...

注意!POSTGRESQL_USERNAME指定后,postgres user不會(huì)分配密碼,因此您無(wú)法以該postgres用戶身份遠(yuǎn)程登錄 PostgreSQL 服務(wù)器。

如果您仍想使用用戶postgres進(jìn)行訪問(wèn),請(qǐng)?jiān)O(shè)置POSTGRESQL_POSTGRES_PASSWORD環(huán)境變量(或POSTGRESQL_POSTGRES_PASSWORD_FILE指定文件中內(nèi)容)。

審計(jì)

PostgreSQL image默認(rèn)啟用 pgAudit 模塊。因此,可以使用以下環(huán)境變量在容器中啟用審核信息:

  • POSTGRESQL_PGAUDIT_LOG:以逗號(hào)分隔的列表,其中包含要審核的不同操作。沒(méi)有默認(rèn)值。
  • POSTGRESQL_PGAUDIT_LOG_CATALOG:在語(yǔ)句中的所有關(guān)系都在 pg_catalog 中的情況下啟用會(huì)話日志記錄。沒(méi)有默認(rèn)值。
  • POSTGRESQL_LOG_CONNECTIONS:添加登錄日志條目。沒(méi)有默認(rèn)值。
  • POSTGRESQL_LOG_DISCONNECTIONS:添加注銷(xiāo)日志條目。沒(méi)有默認(rèn)值。
  • POSTGRESQL_LOG_HOSTNAME:記錄客戶端主機(jī)名。沒(méi)有默認(rèn)值。
  • POSTGRESQL_LOG_LINE_PREFIX:定義日志條目行的格式。在PostgreSQL 官方文檔中查找字符串參數(shù)。沒(méi)有默認(rèn)值。
  • POSTGRESQL_LOG_TIMEZONE:設(shè)置日志條目時(shí)間戳的時(shí)區(qū)。沒(méi)有默認(rèn)值。

會(huì)話設(shè)置

PostgreSQL 映像允許配置多個(gè)連接和會(huì)話管理參數(shù):

  • POSTGRESQL_USERNAME_CONNECTION_LIMIT:如果創(chuàng)建了不同的用戶postgres,請(qǐng)?jiān)O(shè)置連接限制。沒(méi)有默認(rèn)值。
  • POSTGRESQL_POSTGRES_CONNECTION_LIMIT:設(shè)置用戶的連接限制postgres。沒(méi)有默認(rèn)值。
  • POSTGRESQL_STATEMENT_TIMEOUT:設(shè)置語(yǔ)句超時(shí)時(shí)間。沒(méi)有默認(rèn)值。
  • POSTGRESQL_TCP_KEEPALIVES_INTERVAL:TCP ?;铋g隔。沒(méi)有默認(rèn)值。
  • POSTGRESQL_TCP_KEEPALIVES_IDLE:TCP keepalive 空閑時(shí)間。沒(méi)有默認(rèn)值。
  • POSTGRESQL_TCP_KEEPALIVES_COUNT:TCP ?;钣?jì)數(shù)。沒(méi)有默認(rèn)值。

配置時(shí)區(qū)

PostgreSQL 映像允許使用以下環(huán)境變量配置 PostgreSQL 的時(shí)區(qū):

  • POSTGRESQL_TIMEZONE:設(shè)置顯示和解釋時(shí)間戳的時(shí)區(qū)。
  • POSTGRESQL_LOG_TIMEZONE:設(shè)置寫(xiě)入服務(wù)器日志的時(shí)間戳所使用的時(shí)區(qū)。

修改pg_hba.conf

默認(rèn)情況下,PostgreSQL image會(huì)生成local、md5 在pg_hba.conf文件。

為了適應(yīng)任何其他要求或標(biāo)準(zhǔn),可以通過(guò)以下方式更改 pg_hba.conf 文件:

  • 掛載你自己的pg_hba.conf 到文件/bitnami/postgresql/conf
  • POSTGRESQL_PGHBA_REMOVE_FILTERS將與以逗號(hào)分隔的模式列表一起使用。所有與任何模式匹配的行都將被刪除。
  • 例如,如果我們想要?jiǎng)h除所有l(wèi)ocal和md5驗(yàn)證(例如,僅支持hostssl連接),請(qǐng)?jiān)O(shè)置POSTGRESQL_PGHBA_REMOVE_FILTERS=local, md5.

預(yù)加載共享庫(kù)

可以通過(guò)設(shè)置 .postgresql 文件來(lái)修改 PostgreSQL 在啟動(dòng)時(shí)預(yù)加載的庫(kù)列表POSTGRESQL_SHARED_PRELOAD_LIBRARIES。

默認(rèn)值為POSTGRESQL_SHARED_PRELOAD_LIBRARIES=pgaudit。

例如,如果您想將pg_stat_statements庫(kù)添加到預(yù)加載中,請(qǐng)?jiān)O(shè)置POSTGRESQL_SHARED_PRELOAD_LIBRARIES=pgaudit, pg_stat_statements。

設(shè)置流式復(fù)制

可以使用以下環(huán)境變量設(shè)置流復(fù)制集群:

  • POSTGRESQL_REPLICATION_MODE:復(fù)制模式??赡艿闹祄aster/ slave。沒(méi)有默認(rèn)值。
  • POSTGRESQL_REPLICATION_USER:首次運(yùn)行時(shí)在主服務(wù)器上創(chuàng)建的復(fù)制用戶。沒(méi)有默認(rèn)值。
  • POSTGRESQL_REPLICATION_PASSWORD:復(fù)制用戶密碼。沒(méi)有默認(rèn)值。
  • POSTGRESQL_REPLICATION_PASSWORD_FILE:包含復(fù)制用戶密碼的文件的路徑。這將覆蓋 中指定的值POSTGRESQL_REPLICATION_PASSWORD。沒(méi)有默認(rèn)值。
  • POSTGRESQL_MASTER_HOST:復(fù)制主機(jī)的主機(jī)名/IP(從機(jī)參數(shù))。沒(méi)有默認(rèn)值。
  • POSTGRESQL_MASTER_PORT_NUMBER:復(fù)制主機(jī)的服務(wù)器端口(從機(jī)參數(shù))。默認(rèn)為5432.在復(fù)制集群中,您可以擁有一個(gè)主服務(wù)器和零個(gè)或多個(gè)從服務(wù)器。啟用復(fù)制后,主節(jié)點(diǎn)處于讀寫(xiě)模式,而從節(jié)點(diǎn)處于只讀模式。為了獲得最佳性能,建議限制對(duì)從屬設(shè)備的讀取。
第 1 步:創(chuàng)建復(fù)制主服務(wù)器

第一步是啟動(dòng)master。

docker run --name postgresql-master \
  -e POSTGRESQL_REPLICATION_MODE=master \
  -e POSTGRESQL_USERNAME=my_user \
  -e POSTGRESQL_PASSWORD=password123 \
  -e POSTGRESQL_DATABASE=my_database \
  -e POSTGRESQL_REPLICATION_USER=my_repl_user \
  -e POSTGRESQL_REPLICATION_PASSWORD=my_repl_password \
  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

在此命令中,我們使用參數(shù)將容器配置為主容器POSTGRESQL_REPLICATION_MODE=master。

POSTGRESQL_REPLICATION_USER使用和參數(shù)指定復(fù)制用戶POSTGRESQL_REPLICATION_PASSWORD。

第2步:創(chuàng)建復(fù)制從站

接下來(lái)我們啟動(dòng)一個(gè)復(fù)制從屬容器。

docker run --name postgresql-slave \
  --link postgresql-master:master \
  -e POSTGRESQL_REPLICATION_MODE=slave \
  -e POSTGRESQL_MASTER_HOST=master \
  -e POSTGRESQL_MASTER_PORT_NUMBER=5432 \
  -e POSTGRESQL_REPLICATION_USER=my_repl_user \
  -e POSTGRESQL_REPLICATION_PASSWORD=my_repl_password \
  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

在上面的命令中,容器被配置為slave使用POSTGRESQL_REPLICATION_MODE參數(shù)。

在復(fù)制從屬啟動(dòng)之前,從屬容器使用POSTGRESQL_MASTER_HOST和POSTGRESQL_MASTER_PORT_NUMBER參數(shù)連接到主服務(wù)器并從主服務(wù)器復(fù)制初始數(shù)據(jù)庫(kù)。

POSTGRESQL_REPLICATION_PASSWORD和POSTGRESQL_REPLICATION_USER用于向主服務(wù)器進(jìn)行身份驗(yàn)證。為了更改pg_hba.conf默認(rèn)設(shè)置,從站需要知道是否POSTGRESQL_PASSWORD已設(shè)置。

通過(guò)這兩個(gè)命令,您現(xiàn)在已經(jīng)啟動(dòng)并運(yùn)行了一個(gè)兩節(jié)點(diǎn) PostgreSQL 主從流復(fù)制集群。您可以通過(guò)添加/刪除從屬服務(wù)器來(lái)擴(kuò)展集群,而不會(huì)導(dǎo)致任何停機(jī)。

注意:集群會(huì)完整復(fù)制主節(jié)點(diǎn),其中包括所有用戶和數(shù)據(jù)庫(kù)。

如果主服務(wù)器出現(xiàn)故障,您可以重新配置從服務(wù)器以充當(dāng)主服務(wù)器,并通過(guò)創(chuàng)建觸發(fā)器文件開(kāi)始接受寫(xiě)入/tmp/postgresql.trigger.5432。

例如,以下命令重新配置postgresql-slave為充當(dāng)主服務(wù)器:

docker exec postgresql-slave touch /tmp/postgresql.trigger.5432

注意:集群中其他從站的配置需要更新,以便它們知道新的主站。–link postgresql-slave:master這將要求您按照我們的示例重新啟動(dòng)其他從站。

通過(guò) Docker Compose,可以使用以下命令設(shè)置主從復(fù)制:

version: '2'

services:
  postgresql-master:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    ports:
      - '5432'
    volumes:
      - 'postgresql_master_data:/bitnami/postgresql'
    environment:
      - POSTGRESQL_REPLICATION_MODE=master
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
      - POSTGRESQL_USERNAME=my_user
      - POSTGRESQL_PASSWORD=my_password
      - POSTGRESQL_DATABASE=my_database
  postgresql-slave:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    ports:
      - '5432'
    depends_on:
      - postgresql-master
    environment:
      - POSTGRESQL_REPLICATION_MODE=slave
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
      - POSTGRESQL_MASTER_HOST=postgresql-master
      - POSTGRESQL_PASSWORD=my_password
      - POSTGRESQL_MASTER_PORT_NUMBER=5432

volumes:
  postgresql_master_data:

使用以下方法擴(kuò)展從站數(shù)量:

docker-compose up --detach --scale postgresql-master=1 --scale postgresql-slave=3

上面的命令將 Slave 的數(shù)量增加到3。您可以用同樣的方法縮小規(guī)模。

注意:您不應(yīng)增加/減少主節(jié)點(diǎn)的數(shù)量。始終只有一個(gè)主節(jié)點(diǎn)運(yùn)行。

同步提交

默認(rèn)情況下,從屬實(shí)例配置為異步復(fù)制。為了保證更多的數(shù)據(jù)穩(wěn)定性(以一些性能為代價(jià)),可以使用以下環(huán)境設(shè)置同步提交(即事務(wù)提交在被寫(xiě)入一組副本之前不會(huì)向客戶端返回成功)變量。

  • POSTGRESQL_SYNCHRONOUS_COMMIT_MODE:建立同步提交的類型??捎眠x項(xiàng)有:on, remote_apply, remote_write, local and off。默認(rèn)值為on。
  • POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS:建立將啟用同步復(fù)制的副本數(shù)量。該數(shù)量不得超過(guò)您在集群中配置的從站數(shù)量。

使用 Docker Compose,可以按如下方式設(shè)置具有同步提交的主從復(fù)制:

version: '2'

services:
  postgresql-master:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    ports:
      - '5432'
    volumes:
      - 'postgresql_master_data:/bitnami/postgresql'
    environment:
      - POSTGRESQL_REPLICATION_MODE=master
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
      - POSTGRESQL_USERNAME=my_user
      - POSTGRESQL_PASSWORD=my_password
      - POSTGRESQL_DATABASE=my_database
      - POSTGRESQL_SYNCHRONOUS_COMMIT_MODE=on
      - POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1
    volumes:
      - '/path/to/postgresql-persistence:/bitnami/postgresql'
  postgresql-slave:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    ports:
      - '5432'
    depends_on:
      - postgresql-master
    environment:
      - POSTGRESQL_REPLICATION_MODE=slave
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
      - POSTGRESQL_MASTER_HOST=postgresql-master
      - POSTGRESQL_MASTER_PORT_NUMBER=5432
  postgresql-slave2:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    ports:
      - '5432'
    depends_on:
      - postgresql-master
    environment:
      - POSTGRESQL_REPLICATION_MODE=slave
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
      - POSTGRESQL_MASTER_HOST=postgresql-master
      - POSTGRESQL_MASTER_PORT_NUMBER=5432

在上面的示例中,提交需要寫(xiě)入主服務(wù)器和從服務(wù)器之一才能被接受。另一個(gè)從站將繼續(xù)使用異步復(fù)制。

使用以下 SQL 查詢檢查它:

postgres=# select application_name as server, state,
postgres-#       sync_priority as priority, sync_state
postgres-#       from pg_stat_replication;
| server      | state     | priority | sync_state |
|-------------|-----------|----------|------------|
| walreceiver | streaming | 0        | sync       |
| walreceiver | streaming | 0        | async      |

注意:對(duì)于更高級(jí)的設(shè)置,您可以application_name通過(guò)設(shè)置POSTGRESQL_CLUSTER_APP_NAME環(huán)境變量來(lái)使用參數(shù)定義不同的復(fù)制組。

LDAP認(rèn)證

為了使用 LDAP 身份驗(yàn)證,您需要將環(huán)境變量設(shè)置POSTGRESQL_ENABLE_LDAP為yes來(lái)啟用它。

有兩種設(shè)置 LDAP 配置的方法:

  • 通過(guò)配置POSTGRESQL_LDAP_URL,您可以在其中配置URL中的所有關(guān)聯(lián)參數(shù)。
  • 獨(dú)立設(shè)置參數(shù)POSTGRESQL_LDAP_xxxx。

LDAP相關(guān)參數(shù)有:

  • POSTGRESQL_LDAP_SERVER:要連接的 LDAP 服務(wù)器的 IP 地址或名稱。用空格分隔。
  • POSTGRESQL_LDAP_PORT:LDAP 服務(wù)器上要連接的端口號(hào)
  • POSTGRESQL_LDAP_SCHEME:設(shè)置為ldaps使用 LDAPS。默認(rèn)為無(wú)。
  • POSTGRESQL_LDAP_TLS:設(shè)置為1使用 TLS 加密。默認(rèn)為無(wú)。
  • POSTGRESQL_LDAP_PREFIX:形成要綁定的 DN 時(shí)要添加到用戶名前面的字符串。默認(rèn)為無(wú)。
  • POSTGRESQL_LDAP_SUFFIX:形成要綁定的 DN 時(shí)附加到用戶名的字符串。默認(rèn)為無(wú)。
  • POSTGRESQL_LDAP_BASE_DN:開(kāi)始搜索用戶的根 DN。默認(rèn)為無(wú)。
  • POSTGRESQL_LDAP_BIND_DN:要綁定到 LDAP 的用戶的 DN。默認(rèn)為無(wú)。
  • POSTGRESQL_LDAP_BIND_PASSWORD:綁定LDAP的用戶密碼。默認(rèn)為無(wú)。
  • POSTGRESQL_LDAP_SEARCH_ATTR:與搜索中的用戶名匹配的屬性。默認(rèn)為無(wú)。
  • POSTGRESQL_LDAP_SEARCH_FILTER:進(jìn)行搜索+綁定身份驗(yàn)證時(shí)使用的搜索過(guò)濾器。默認(rèn)為無(wú)。
  • POSTGRESQL_LDAP_URL:要連接的 URL,格式為:ldap[s]??/host[:port]/basedn[?[attribute][?[scope][?[filter]]]]。

保護(hù) PostgreSQL 流量

PostgreSQL 支持使用 SSL/TLS 協(xié)議對(duì)連接進(jìn)行加密。如果您希望啟用此可選功能,您可以使用以下環(huán)境變量來(lái)配置應(yīng)用程序:

  • POSTGRESQL_ENABLE_TLS:是否對(duì)流量啟用 TLS。默認(rèn)為no.
  • POSTGRESQL_TLS_CERT_FILE:包含 TLS 流量證書(shū)文件的文件。沒(méi)有默認(rèn)值。
  • POSTGRESQL_TLS_KEY_FILE:包含證書(shū)密鑰的文件。沒(méi)有默認(rèn)值。
  • POSTGRESQL_TLS_CA_FILE:包含證書(shū) CA 的文件。如果提供,PostgreSQL 將通過(guò)請(qǐng)求證書(shū)來(lái)驗(yàn)證 TLS/SSL 客戶端(請(qǐng)參閱ref)。沒(méi)有默認(rèn)值。
  • POSTGRESQL_TLS_CRL_FILE:包含證書(shū)吊銷(xiāo)列表的文件。沒(méi)有默認(rèn)值。
  • POSTGRESQL_TLS_PREFER_SERVER_CIPHERS:是否使用服務(wù)器的 TLS 密碼首選項(xiàng)而不是客戶端的。默認(rèn)為yes.

啟用 TLS 時(shí),PostgreSQL 默認(rèn)情況下將支持標(biāo)準(zhǔn)流量和加密流量,但更喜歡后者。下面是一些有關(guān)如何快速設(shè)置 TLS 流量的示例:

使用docker run

```console
$ docker run \
    -v /path/to/certs:/opt/bitnami/postgresql/certs \
    -e ALLOW_EMPTY_PASSWORD=yes \
    -e POSTGRESQL_ENABLE_TLS=yes \
    -e POSTGRESQL_TLS_CERT_FILE=/opt/bitnami/postgresql/certs/postgres.crt \
    -e POSTGRESQL_TLS_KEY_FILE=/opt/bitnami/postgresql/certs/postgres.key \
    registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest
```

修改docker-compose.yml文件:

```yaml
services:
  postgresql:
  ...
    environment:
      ...
      - POSTGRESQL_ENABLE_TLS=yes
      - POSTGRESQL_TLS_CERT_FILE=/opt/bitnami/postgresql/certs/postgres.crt
      - POSTGRESQL_TLS_KEY_FILE=/opt/bitnami/postgresql/certs/postgres.key
    ...
    volumes:
      ...
      - /path/to/certs:/opt/bitnami/postgresql/certs
  ...
```

或者,您也可以在自定義配置文件中提供此配置。

配置文件

該圖像在 中查找postgresql.conf文件/opt/bitnami/postgresql/conf/。

您可以在以下位置安裝卷/bitnami/postgresql/conf/并復(fù)制/編輯. 如果該目錄為空,則默認(rèn)配置將被填充到該目錄中。

postgresql.conf/path/to/postgresql-persistence/conf/conf/

/path/to/postgresql-persistence/conf/
└── postgresql.conf

0 directories, 1 file

由于 PostgreSQL 映像是非 root 的,因此您需要為主機(jī)中的掛載目錄設(shè)置適當(dāng)?shù)臋?quán)限:

sudo chown 1001:1001 /path/to/postgresql-persistence/conf/
第 1 步:運(yùn)行 PostgreSQL 映像

運(yùn)行 PostgreSQL 映像,從主機(jī)安裝目錄。

docker run --name postgresql \
    -v /path/to/postgresql-persistence/conf/:/bitnami/postgresql/conf/ \
    registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或使用 Docker Compose:

version: '2'

services:
  postgresql:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
    ports:
      - '5432:5432'
    volumes:
      - /path/to/postgresql-persistence/conf/:/bitnami/postgresql/conf/
第 2 步:編輯配置

使用您喜歡的編輯器編輯主機(jī)上的配置。

vi /path/to/postgresql-persistence/conf/postgresql.conf
第三步:重啟PostgreSQL

更改配置后,重新啟動(dòng) PostgreSQL 容器以使更改生效。

docker restart postgresql

或使用 Docker Compose:

docker-compose restart postgresql

有關(guān)配置選項(xiàng)的完整列表,請(qǐng)參閱服務(wù)器配置手冊(cè)。

允許從默認(rèn)文件以外的文件加載設(shè)置postgresql.conf

除了使用自定義之外postgresql.conf,您還可以包含.conf以conf.d目錄結(jié)尾的文件/bitnami/postgresql/conf/。為此,默認(rèn)postgresql.conf包含以下部分:

##------------------------------------------------------------------------------
## CONFIG FILE INCLUDES
##------------------------------------------------------------------------------

## These options allow settings to be loaded from files other than the
## default postgresql.conf.

include_dir = 'conf.d'  # Include files ending in '.conf' from directory 'conf.d'

在您的主機(jī)中,您應(yīng)該在目錄下創(chuàng)建擴(kuò)展配置文件conf.d:

mkdir -p /path/to/postgresql-persistence/conf/conf.d/
vi /path/to/postgresql-persistence/conf/conf.d/extended.conf

如果您使用自定義的postgresql.conf,您應(yīng)該在配置文件中創(chuàng)建(或取消注釋)上述部分,在這種情況下,/path/to/postgresql-persistence/conf/結(jié)構(gòu)應(yīng)該類似于

/path/to/postgresql-persistence/conf/
├── conf.d
│   └── extended.conf
└── postgresql.conf

1 directory, 2 files

指定 initdb 參數(shù)

使用以下環(huán)境變量可以輕松指定額外的 initdb 參數(shù):

  • POSTGRESQL_INITDB_ARGS:指定 initdb 命令的額外參數(shù)。沒(méi)有默認(rèn)值。
  • POSTGRESQL_INITDB_WAL_DIR:定義事務(wù)日志的自定義位置。沒(méi)有默認(rèn)值。
docker run --name postgresql \
  -e POSTGRESQL_INITDB_ARGS="--data-checksums" \
  -e POSTGRESQL_INITDB_WAL_DIR="/bitnami/waldir" \
  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest

或者通過(guò)修改docker-compose.yml文件:

services:
  postgresql:
  ...
    environment:
      - POSTGRESQL_INITDB_ARGS=--data-checksums
      - POSTGRESQL_INITDB_WAL_DIR=/bitnami/waldir
  ...

停止設(shè)置

您可以使用以下命令控制初始化過(guò)程中用于停止 postgresql 的參數(shù):

  • POSTGRESQL_PGCTLTIMEOUT這將設(shè)置命令的超時(shí)pg_ctl。
  • POSTGRESQL_SHUTDOWN_MODE這將指示所使用的關(guān)閉模式。

安裝額外的語(yǔ)言環(huán)境

Dockerfile 提供了兩個(gè)參數(shù)來(lái)在構(gòu)建時(shí)配置額外的區(qū)域設(shè)置:

  • WITH_ALL_LOCALES:?jiǎn)⒂盟兄С值膮^(qū)域設(shè)置。默認(rèn)值:否
  • EXTRA_LOCALES:要啟用的額外區(qū)域設(shè)置的逗號(hào)分隔列表。無(wú)默認(rèn)值

例如,要構(gòu)建支持區(qū)域設(shè)置的映像es_ES.UTF-8 UTF-8,您可以將以下參數(shù)添加到構(gòu)建命令中:

docker build --build-arg EXTRA_LOCALES="es_ES.UTF-8 UTF-8" ...

環(huán)境變量別名

容器允許兩組不同的環(huán)境變量。請(qǐng)參閱下表中的環(huán)境變量別名列表:

環(huán)境變量別名
POSTGRESQL_USERNAMEPOSTGRES_USER
POSTGRESQL_DATABASEPOSTGRES_DB
POSTGRESQL_PASSWORDPOSTGRES_PASSWORD
POSTGRESQL_PASSWORD_FILEPOSTGRES_PASSWORD_FILE
POSTGRESQL_POSTGRES_PASSWORDPOSTGRES_POSTGRES_PASSWORD
POSTGRESQL_POSTGRES_PASSWORD_FILEPOSTGRES_POSTGRES_PASSWORD_FILE
POSTGRESQL_PORT_NUMBERPOSTGRES_PORT_NUMBER
POSTGRESQL_INITDB_ARGSPOSTGRES_INITDB_ARGS
POSTGRESQL_INITDB_WAL_DIRPOSTGRES_INITDB_WAL_DIR
POSTGRESQL_DATA_DIRPGDATA
POSTGRESQL_REPLICATION_USERPOSTGRES_REPLICATION_USER
POSTGRESQL_REPLICATION_MODEPOSTGRES_REPLICATION_MODE
POSTGRESQL_REPLICATION_PASSWORDPOSTGRES_REPLICATION_PASSWORD
POSTGRESQL_REPLICATION_PASSWORD_FILEPOSTGRES_REPLICATION_PASSWORD_FILE
POSTGRESQL_CLUSTER_APP_NAMEPOSTGRES_CLUSTER_APP_NAME
POSTGRESQL_MASTER_HOSTPOSTGRES_MASTER_HOST
POSTGRESQL_MASTER_PORT_NUMBERPOSTGRES_MASTER_PORT_NUMBER
POSTGRESQL_NUM_SYNCHRONOUS_REPLICASPOSTGRES_NUM_SYNCHRONOUS_REPLICAS
POSTGRESQL_SYNCHRONOUS_COMMIT_MODEPOSTGRES_SYNCHRONOUS_COMMIT_MODE
POSTGRESQL_SHUTDOWN_MODEPOSTGRES_SHUTDOWN_MODE

重要信息:

  • 更改POSTGRES_USER不會(huì)更改數(shù)據(jù)庫(kù)的所有者,數(shù)據(jù)庫(kù)的所有者將繼續(xù)作為用戶postgres。
  • 要更改數(shù)據(jù)庫(kù)所有者,請(qǐng)使用postgres用戶 ( $ psql -U postgres …) 訪問(wèn)并執(zhí)行以下命令:
alter database POSTGRES_DATABASE owner to POSTGRES_USER;

可以更改 PostgreSQL 用于執(zhí)行 init 腳本的用戶。

為此,請(qǐng)使用以下環(huán)境變量:

環(huán)境變量描述
POSTGRESQL_INITSCRIPTS_USERNAME將用于執(zhí)行初始化腳本的用戶
POSTGRESQL_INITSCRIPTS_PASSWORDPOSTGRESQL_INITSCRIPT_USERNAME 中指定的用戶的密碼

默認(rèn) toast 壓縮

默認(rèn)的 toast 壓縮是pglz,但您可以通過(guò)將環(huán)境變量設(shè)置POSTGRES_DEFAULT_COMPRESSION為所需的值來(lái)修改它。

例如:POSTGRES_DEFAULT_COMPRESSION=‘lz4’。

日志

docker logs postgresql

或使用 Docker Compose:

docker-compose logs postgresql

你可以通過(guò)輕云UC部署工具直接安裝部署,也可以手動(dòng)按如下文檔操作,該項(xiàng)目已經(jīng)全面開(kāi)源,可以從如下環(huán)境獲取

開(kāi)源地址: https://gitee.com/qingplus/qingcloud-platform

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Docker教程:使用容器(簡(jiǎn)單示例)

    Docker教程:使用容器(簡(jiǎn)單示例)

    今天小編就為大家分享一篇關(guān)于Docker教程:使用容器(簡(jiǎn)單示例),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • 使用Docker?Compose搭建部署ElasticSearch的配置過(guò)程

    使用Docker?Compose搭建部署ElasticSearch的配置過(guò)程

    Elasticsearch使用的是一種名為倒排索引的數(shù)據(jù)結(jié)構(gòu),這一結(jié)構(gòu)的設(shè)計(jì)可以允許十分快速地進(jìn)行全文本搜索,本文重點(diǎn)給大家介紹使用Docker?Compose搭建部署ElasticSearch的配置過(guò)程,感興趣的朋友一起看看吧
    2022-02-02
  • 使用Dockerfile腳本定制鏡像的方法

    使用Dockerfile腳本定制鏡像的方法

    Dockerfile 是?個(gè)?本?件,其內(nèi)包含了?條條的指令(Instruction),每?條指令構(gòu)建?層,因此每?條指令的內(nèi)容,就是描述該層應(yīng)當(dāng)如何構(gòu)建,這篇文章主要介紹了使用Dockerfile腳本定制鏡像,需要的朋友可以參考下
    2022-07-07
  • Docker 自動(dòng)部署tomcat詳解

    Docker 自動(dòng)部署tomcat詳解

    這篇文章主要介紹了Docker 自動(dòng)部署tomcat詳解的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Docker swarm如何通過(guò)docker-compose部署應(yīng)用

    Docker swarm如何通過(guò)docker-compose部署應(yīng)用

    這篇文章主要介紹了Docker swarm如何通過(guò)docker-compose部署應(yīng)用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • docker安裝redmine步驟

    docker安裝redmine步驟

    在本篇文章里小編給大家整理的是關(guān)于docker安裝redmine步驟和相關(guān)代碼,需要的朋友們學(xué)習(xí)下。
    2020-01-01
  • 一文教會(huì)你在Docker容器中實(shí)現(xiàn)Mysql主從復(fù)制

    一文教會(huì)你在Docker容器中實(shí)現(xiàn)Mysql主從復(fù)制

    MySQL的主從復(fù)制之前也沒(méi)做過(guò),剛百度了下發(fā)現(xiàn)并不算難,所以下面這篇文章主要給大家介紹了關(guān)于在Docker容器中實(shí)現(xiàn)Mysql主從復(fù)制的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Docker容器無(wú)法被stop or kill問(wèn)題的解決方法

    Docker容器無(wú)法被stop or kill問(wèn)題的解決方法

    這篇文章主要介紹了Docker容器無(wú)法被stop or kill問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Alpine Docker鏡像字體的問(wèn)題解決操作

    Alpine Docker鏡像字體的問(wèn)題解決操作

    這篇文章主要介紹了Alpine Docker鏡像字體的問(wèn)題解決操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • 詳解Docker Registry之刪除鏡像、垃圾回收

    詳解Docker Registry之刪除鏡像、垃圾回收

    本篇文章主要介紹了詳解Docker Registry之刪除鏡像、垃圾回收,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04

最新評(píng)論