postgres_docker

Ansible Роль: PostgreSQL на Docker

github github Issues PullRequests Last commit

Это Ansible роль для настройки и запуска PostgreSQL Docker контейнера.

Содержание

Требования

Требуется Docker. Рекомендуемая роль для установки Docker: geerlingguy.docker.

Переменные роли

  • postgres_docker_name: Имя Docker контейнера.

  • postgres_docker_admin_password: Пароль суперпользователя.

  • postgres_docker_initscripts: Необязательные скрипты инициализации, которые нужно скопировать в контейнер PostgreSQL. Это могут быть файлы .sql, sql.gz или .sh. Они должны уже существовать на целевой системе, чтобы эта роль могла скопировать их в Docker контейнер.

    После вызова контейнера initdb для создания пользователя и базы данных postgres будут выполнены все файлы *.sql, исполняемые скрипты *.sh, а также неисполняемые *.sh скрипты перед запуском службы. Скрипты запускаются только если вы запускаете контейнер с пустым домашним каталогом; любая уже существующая база данных останется нетронутой при запуске контейнера. Распространенной проблемой является то, что если один из ваших скриптов завершится неудачно и ваш оркестратор перезапустит контейнер с уже инициализированным домашним каталогом, выполнение ваших скриптов не продолжится.

    Инициализационные файлы будут выполняться в порядке сортировки по имени, определенному текущей локалью, которая по умолчанию - en_US.utf8. Все файлы *.sql будут выполняться пользователем POSTGRES_USER, который по умолчанию является суперпользователем postgres. Рекомендуется, чтобы любые команды psql, которые выполняются внутри *.sh скрипта, выполнялись как POSTGRES_USER с флагом --username "$POSTGRES_USER". Этот пользователь сможет подключаться без пароля благодаря наличию аутентификации trust для подключений через Unix сокеты, сделанных внутри контейнера.

  • postgres_docker_use_volumes: Нужно ли использовать Docker тома. Если True, будет создано два отдельных Docker тома:

    • Один для конфигурационных файлов, смонтированных в /etc/postgresql.
    • Один для файлов данных, смонтированных в /var/lib/postgresql/data.
  • postgres_docker_memory: Объем памяти, который нужно выделить контейнеру PostgreSQL.

  • postgres_docker_cpu: Количество vCPU, которые нужно выделить контейнеру PostgreSQL.

  • postgres_docker_network_create: Нужно ли создавать Docker сеть для контейнера PostgreSQL. Если True, будет создана сеть специально для этого контейнера. Если False, сеть не будет создана, но будет автоматически присоединена к сети, указанной в postgres_docker_network_name.

  • postgres_docker_network_name: Имя Docker сети для присоединения. Обязательно. Особенно полезно, если postgres_docker_network_create установлен на false.

  • postgres_docker_image: Имя и метка Docker изображения для использования.

  • postgres_docker_available_externally: Нужно ли включать в Traefik Proxy.

Смотрите defaults/main.yml для полного списка.

Зависимости

Нет.

Примеры плейбуков

Создание сети

- 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

Плейбук:

- hosts: all
  roles:
    - geerlingguy.docker

- hosts: all

vars:
    postgres_docker_initscripts:
        - "/tmp/01_create_example.sh"

  tasks:
    - name: Копировать скрипт инициализации
      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/ansible.postgres_docker
Лицензия
apache-2.0
Загрузки
62
Владелец