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/ansible.postgres_docker