organicveggie.postgres_docker
Ansible角色:在Docker上使用PostgreSQL
一个Ansible角色,用于设置和运行PostgreSQL 的Docker容器。
内容
要求
需要Docker。推荐的Docker安装角色:geerlingguy.docker
。
角色变量
postgres_docker_name
: Docker容器的名称。postgres_docker_admin_password
: 超级用户密码。postgres_docker_initscripts
: 可选的初始化脚本,复制到PostgreSQL Docker容器中。这些可以是.sql
、sql.gz
或.sh
文件。它们必须已存在于目标系统上,以便此角色可以将它们复制到Docker容器中。在容器调用
initdb
创建默认的postgres
用户和数据库后,会运行任何*.sql
文件,执行任何可执行的*.sh
脚本,并在启动服务之前源任何非可执行的*.sh
脚本。只有当你用一个空的数据库目录启动容器时,脚本才会运行;任何已存在的数据库在容器启动时将保持不变。一个常见的问题是,如果你的一个脚本失败,且你的协调器用已初始化的数据目录重新启动容器,它将不会继续运行你的脚本。初始化文件将按照当前语言环境定义的名称顺序执行,默认语言环境为
en_US.utf8
。任何*.sql
文件将由POSTGRES_USER
执行,默认值为postgres
超级用户。建议在*.sh
脚本中运行的任何psql
命令使用--username "$POSTGRES_USER"
标志作为POSTGRES_USER
执行。由于在容器内的Unix套接字连接中存在trust
身份验证,该用户将能够无密码连接。postgres_docker_use_volumes
: 是否使用Docker卷。设置为真将创建两个专用Docker卷:- 一个挂载在
/etc/postgresql
的配置文件。 - 一个挂载在
/var/lib/postgresql/data
的数据文件。
- 一个挂载在
postgres_docker_memory
: 分配给PostgreSQL容器的内存量。postgres_docker_cpu
: 分配给PostgreSQL容器的vCPU数量。postgres_docker_network_create
: 是否为PostgreSQL容器创建Docker网络。设置为真将专门为此容器创建网络。设置为假将不会创建网络,但会自动加入指定在postgres_docker_network_name
中的网络。postgres_docker_network_name
: 要加入的Docker网络名称。必需的。特别在postgres_docker_network_create
设置为假时,有用。postgres_docker_image
: 要使用的Docker镜像名称和标签。postgres_docker_available_externally
: 是否启用在Traefik Proxy中的访问。
请查阅defaults/main.yml以获取完整列表。
依赖
无。
示例Playbooks
创建网络
- hosts: all
vars:
postgres_docker_network_create: true
postgres_docker_memory: "2GB"
postgres_docker_cpu: "2"
roles:
- geerlingguy.docker
- organicveggie.postgres_docker
使用绑定挂载的自定义名称
- hosts: all
vars:
postgres_docker_name: "pgsql-example"
postgres_docker_use_volumes: false
roles:
- geerlingguy.docker
- organicveggie.postgres_docker
初始化脚本
设置新用户和数据库的Shell脚本:01_create_example.sh
#!/bin/sh
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES" --dbname "molecule" <<-EOSQL
CREATE USER example;
CREATE DATABASE exampledb;
GRANT ALL PRIVILEGES ON DATABASE exampledb TO example;
CREATE TABLE test (
id int CONSTRAINT id_pk PRIMARY KEY
);
INSERT INTO test VALUES (42), (54);
EOSQL
Playbook:
- hosts: all
roles:
- geerlingguy.docker
- hosts: all
vars:
postgres_docker_initscripts:
- "/tmp/01_create_example.sh"
tasks:
- name: Copy init script
ansible.builtin.copy:
src: "files/01_create_example.sh"
dest: "/tmp"
mode: "755"
roles:
- organicveggie.postgres_docker
许可证
作者信息
ansible-galaxy install organicveggie.postgres_docker