organicveggie.postgres_docker

Ansible角色:在Docker上使用PostgreSQL

github github Issues PullRequests Last commit

一个Ansible角色,用于设置和运行PostgreSQLDocker容器

内容

要求

需要Docker。推荐的Docker安装角色:geerlingguy.docker

角色变量

  • postgres_docker_name: Docker容器的名称。

  • postgres_docker_admin_password: 超级用户密码。

  • postgres_docker_initscripts: 可选的初始化脚本,复制到PostgreSQL Docker容器中。这些可以是.sqlsql.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

许可证

Apache

作者信息

Sean Laurent

关于项目

Role to install PostgreSQL Docker container on Linux.

安装
ansible-galaxy install organicveggie.postgres_docker
许可证
apache-2.0
下载
98
拥有者