organicveggie.postgres_docker
Ansible Роль: PostgreSQL на Docker
Это 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
Лицензия
Информация о авторе
Role to install PostgreSQL Docker container on Linux.
ansible-galaxy install organicveggie.postgres_docker