ansible-role-postgresql核心变量详解:PostgreSQL部署配置终极参考清单

【免费下载链接】ansible-role-postgresql Ansible Role - PostgreSQL 【免费下载链接】ansible-role-postgresql 项目地址: https://gitcode.com/gh_mirrors/an/ansible-role-postgresql

ansible-role-postgresql 是一个开箱即用的 Ansible Role,可在 RHEL/CentOS、Debian/Ubuntu 等主流 Linux 系统上自动化安装并配置 PostgreSQL 数据库服务器,无需额外依赖,一个 become: yes 即可完成部署。本文带你逐一拆解它的全部核心变量,给你一份可直接套用的 PostgreSQL 部署配置参考清单 📋

一、它是什么?为什么值得用

这个 Role 的设计思路非常清晰:默认值齐全 + OS 自适应。执行时它会自动识别目标系统(如 Ubuntu 22.04、Rocky 9),加载对应的系统变量文件(如 vars/Ubuntu-22.yml、vars/RedHat-9.yml),再按顺序完成安装、初始化、配置、建库建用户,任务编排入口见 tasks/main.yml。

支持的发行版与版本范围可在 meta/main.yml 中查看,覆盖 Ubuntu 16.04~26、Debian 9~13、Fedora 34~43、RHEL 7~10 及 Arch Linux。

二、核心变量速览表

所有默认值定义在 defaults/main.yml 中,建议对照此表按需覆盖:

变量默认值作用
postgresql_service_statestarted服务运行状态
postgresql_service_enabledtrue是否开机自启
postgresql_auth_method自动选择密码认证方式(md5 / scram-sha-256)
postgresql_hba_entries4 条基础规则pg_hba.conf 认证规则
postgresql_databases[]要创建的数据库列表
postgresql_users[]要创建的用户列表
postgresql_privs[]权限(GRANT)配置列表
postgresql_global_config_options2 项写入 postgresql.conf 的选项
postgresql_localesen_US.UTF-8Debian 系语言环境
postgresql_enablerepo""RHEL/CentOS 专用安装源
postgresql_python_librarypython-psycopg2Ansible 连接 PG 所需的 Python 库
postgres_users_no_logtrue日志中隐藏敏感用户信息

三、服务与安装配置:最常用的一组变量

一键控制服务启停与开机自启

postgresql_service_state: started   # 服务状态
postgresql_service_enabled: true  # 开机自启

配置发生变更(如修改全局配置或认证规则)时,Role 会触发 restart postgresql 处理器,行为由 postgresql_restarted_state 控制,推荐 restarted 或 reloaded。

快速指定安装源与 Python 库

  • RHEL/CentOS 用户:通过 postgresql_enablerepo 指定 PostgreSQL 官方仓库,即可安装比系统仓库更新的大版本。
  • Python 3 环境:将 postgresql_python_library 改为 python3-psycopg2,否则用户和数据库管理任务会因缺少驱动而失败 ⚠️(各 OS 变量文件已按系统预置好正确值)。

四、安全配置:认证方式与访问控制

密码认证方式自动适配

postgresql_auth_method: "{{ ansible_fips | ternary('scram-sha-256', 'md5') }}"

开启 FIPS 的系统自动使用 scram-sha-256,否则用 md5,通常无需手动干预。

访问控制规则(pg_hba.conf)

postgresql_hba_entries 定义了主机认证规则,渲染模板为 templates/pg_hba.conf.j2。默认包含:本地 peer 认证(postgres 用户与所有用户)、回环地址(IPv4/IPv6)密码认证。每条规则支持 type、database、user、address/ip_address/ip_mask、auth_method 等字段,覆盖时记得带上原有默认条目,避免误锁自己的管理通道 🔐。

敏感信息日志保护

postgres_users_no_log: true 会在执行用户管理任务时屏蔽密码等敏感数据输出,保持默认即可。

五、建库建用户:三个列表变量搞定业务初始化

声明式创建数据库

只需列出库名,其余全部有合理默认值(UTF-8 编码、template0 模板等):

postgresql_databases:
  - name: example_db

执行逻辑见 tasks/databases.yml。

声明式创建用户

postgresql_users:
  - name: example_user
    password: supersecure

支持 role_attr_flags、encrypted、port 等可选字段,对应任务文件 tasks/users.yml。

精细化授权(权限配置)

postgresql_privs 用于对数据库对象做 GRANT 操作,必填项是 db 和 roles,可选 privs、type、objs、schema 等,适合"给某用户只授某张表的 SELECT"这类细粒度场景。

六、OS 特有变量:通常不用碰

variables.yml(tasks/variables.yml)会根据发行版加载 vars/ 目录下的文件,定义 postgresql_version、postgresql_data_dir、postgresql_bin_path、postgresql_config_path、postgresql_daemon、postgresql_packages 等 OS 级变量。它们只在你要使用非系统包方式安装的 PostgreSQL 时才需要覆盖,新手直接跳过这一节 ✅。

七、最小可用 Playbook 示例

- hosts: database
  become: yes
  vars_files:
    - vars/main.yml
  roles:
    - geerlingguy.postgresql

其中 vars/main.yml 里写上前面介绍的 postgresql_databases 与 postgresql_users,跑一次即可得到一台可用、可自启、权限清晰的 PostgreSQL 服务器。

八、常见问题速查(FAQ)

  1. 用户/数据库没建出来? 检查 postgresql_python_library 是否与目标机 Python 版本匹配(Python 3 用 python3-psycopg2)。
  2. 改了 pg_hba.conf 却连不上? 确认覆盖 postgresql_hba_entries 时保留了回环地址条目,且服务已重启。
  3. 想改全局参数(如 shared_buffers)? 追加到 postgresql_global_config_options 即可,Role 会自动写入 postgresql.conf。
  4. CI 测试参考? 项目使用 Molecule + Docker 做集成测试,入口为 molecule/default/molecule.yml 与 molecule/default/converge.yml,可作为验收标准参考。

💡 小贴士:把本文第二节速览表保存到你的团队 Wiki,配合 defaults/main.yml 中的注释,基本可以覆盖 90% 的 PostgreSQL 自动化部署场景。

【免费下载链接】ansible-role-postgresql Ansible Role - PostgreSQL 【免费下载链接】ansible-role-postgresql 项目地址: https://gitcode.com/gh_mirrors/an/ansible-role-postgresql

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐