organicveggie.postgres_docker

Rol de Ansible: PostgreSQL en Docker

github github Issues PullRequests Último commit

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 predeterminados postgres, 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 por POSTGRES_USER, que por defecto es el superusuario postgres. Se recomienda que cualquier comando psql que se ejecute dentro de un script *.sh sea ejecutado como POSTGRES_USER usando la opción --username "$POSTGRES_USER". Este usuario podrá conectarse sin contraseña debido a la presencia de la autenticación trust 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.
  • 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 en postgres_docker_network_name.

  • postgres_docker_network_name: Nombre de la red de Docker a la que unirse. Requerido. Especialmente útil si postgres_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

Apache

Información del autor

Sean Laurent

Acerca del proyecto

Role to install PostgreSQL Docker container on Linux.

Instalar
ansible-galaxy install organicveggie.postgres_docker
Licencia
apache-2.0
Descargas
98
Propietario