organicveggie.postgres_docker
Rol de Ansible: PostgreSQL en Docker
Una rol de Ansible para configurar y ejecutar PostgreSQL en un contenedor Docker.
Contenidos
Requisitos
Se requiere Docker. Recomendación para la instalación de Docker: geerlingguy.docker
.
Variables de rol
postgres_docker_name
: Nombre del contenedor Docker.postgres_docker_admin_password
: Contraseña del superusuario.postgres_docker_initscripts
: Scripts de inicialización opcionales para copiar en el contenedor Docker de PostgreSQL. Pueden ser archivos.sql
,sql.gz
o.sh
. Deben existir en el sistema de destino para que este rol pueda copiarlos al contenedor Docker.Después de que el contenedor llame a
initdb
para crear el usuario y la base de datos predeterminadospostgres
, ejecutará los archivos*.sql
, los scripts ejecutables*.sh
y los scripts*.sh
no ejecutables que se hayan definido antes de iniciar el servicio. Los scripts solo se ejecutan si comienzas el contenedor con un directorio de datos vacío; cualquier base de datos preexistente permanecerá sin cambios al iniciar el contenedor. Un problema común es que si uno de tus scripts falla y tu orquestador reinicia el contenedor con el directorio de datos ya inicializado, no continuará con tus scripts.Los archivos de inicialización se ejecutarán en orden de nombre según lo definido por la configuración regional actual, que por defecto es
en_US.utf8
. Cualquier archivo*.sql
será ejecutado porPOSTGRES_USER
, que por defecto es el superusuariopostgres
. Se recomienda que cualquier comandopsql
que se ejecute dentro de un script*.sh
sea ejecutado comoPOSTGRES_USER
usando la opción--username "$POSTGRES_USER"
. Este usuario podrá conectarse sin contraseña debido a la presencia de la autenticacióntrust
para conexiones de socket Unix realizadas dentro del contenedor.postgres_docker_use_volumes
: Indica si se deben usar volúmenes de Docker. Verdadero creará dos volúmenes dedicados de Docker:- Uno para los archivos de configuración montado en
/etc/postgresql
. - Uno para los archivos de datos montado en
/var/lib/postgresql/data
.
- Uno para los archivos de configuración montado en
postgres_docker_memory
: Cantidad de memoria a asignar al contenedor PostgreSQL.postgres_docker_cpu
: Número de vCPUs a asignar al contenedor PostgreSQL.postgres_docker_network_create
: Indica si se debe crear una red de Docker para el contenedor PostgreSQL. Verdadero creará una red específicamente para este contenedor. Falso no creará una red, pero se unirá automáticamente a la red especificada enpostgres_docker_network_name
.postgres_docker_network_name
: Nombre de la red de Docker a la que unirse. Requerido. Especialmente útil sipostgres_docker_network_create
está configurado como falso.postgres_docker_image
: Nombre y etiqueta de la imagen de Docker a utilizar.postgres_docker_available_externally
: Indica si se habilita en Traefik Proxy.
Consulta defaults/main.yml para una lista completa.
Dependencias
Ninguna.
Ejemplos de Playbooks
Crear una red
- hosts: all
vars:
postgres_docker_network_create: true
postgres_docker_memory: "2GB"
postgres_docker_cpu: "2"
roles:
- geerlingguy.docker
- organicveggie.postgres_docker
Nombre personalizado con montajes enlazados
- hosts: all
vars:
postgres_docker_name: "pgsql-example"
postgres_docker_use_volumes: false
roles:
- geerlingguy.docker
- organicveggie.postgres_docker
Scripts de inicialización
Script de shell para configurar un nuevo usuario y base de datos: 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: Copiar script de inicialización
ansible.builtin.copy:
src: "files/01_create_example.sh"
dest: "/tmp"
mode: "755"
roles:
- organicveggie.postgres_docker
Licencia
Información del autor
Role to install PostgreSQL Docker container on Linux.
ansible-galaxy install organicveggie.postgres_docker