organicveggie.postgres_docker

Rôle Ansible : PostgreSQL sur Docker

github github Issues PullRequests Dernier commit

Un rôle Ansible pour configurer et exécuter le PostgreSQL dans un conteneur Docker.

Contenu

Exigences

Nécessite Docker. Rôle recommandé pour l'installation de Docker : geerlingguy.docker.

Variables de rôle

  • postgres_docker_name: Nom du conteneur Docker.

  • postgres_docker_admin_password: Mot de passe de l'utilisateur administrateur.

  • postgres_docker_initscripts: Scripts d'initialisation optionnels à copier dans le conteneur Docker PostgreSQL. Ceux-ci peuvent être des fichiers .sql, sql.gz ou .sh. Ils doivent déjà exister sur le système cible, afin que ce rôle puisse les copier dans le conteneur Docker.

    Après que le conteneur ait appelé initdb pour créer l'utilisateur et la base de données par défaut postgres, il exécutera les fichiers *.sql, les scripts exécutables *.sh, et chargera les scripts *.sh non exécutables avant de démarrer le service. Les scripts ne sont exécutés que si vous démarrez le conteneur avec un répertoire de données vide ; toute base de données déjà existante restera intacte au démarrage du conteneur. Un problème courant est que si l'un de vos scripts échoue et que votre orchestrateur redémarre le conteneur avec le répertoire de données déjà initialisé, il ne continuera pas avec vos scripts.

    Les fichiers d'initialisation seront exécutés dans l'ordre alphabétique défini par la locale actuelle, qui est par défaut en_US.utf8. Tout fichier *.sql sera exécuté par POSTGRES_USER, qui est par défaut l'utilisateur superutilisateur postgres. Il est recommandé que toutes les commandes psql exécutées à l'intérieur d'un script *.sh soient exécutées en tant que POSTGRES_USER en utilisant le paramètre --username "$POSTGRES_USER". Cet utilisateur pourra se connecter sans mot de passe grâce à la présence de l'authentification trust pour les connexions par socket Unix effectuées à l'intérieur du conteneur.

  • postgres_docker_use_volumes: Indique s'il faut ou non utiliser des volumes Docker. Vrai créera deux volumes Docker dédiés :

    • Un pour les fichiers de configuration montés à /etc/postgresql.
    • Un pour les fichiers de données montés à /var/lib/postgresql/data.
  • postgres_docker_memory: Quantité de mémoire à allouer au conteneur PostgreSQL.

  • postgres_docker_cpu: Nombre de vCPUs à allouer au conteneur PostgreSQL.

  • postgres_docker_network_create: Indique s'il faut ou non créer un réseau Docker pour le conteneur PostgreSQL. Vrai créera un réseau spécifiquement pour ce conteneur. Faux ne créera pas de réseau, mais rejoindra automatiquement le réseau spécifié dans postgres_docker_network_name.

  • postgres_docker_network_name: Nom du réseau Docker à rejoindre. Requis. Particulièrement utile si postgres_docker_network_create est défini sur faux.

  • postgres_docker_image: Nom et étiquette de l'image Docker à utiliser.

  • postgres_docker_available_externally: Indique s'il faut ou non activer dans le Proxy Traefik.

Voir defaults/main.yml pour une liste complète.

Dépendances

Aucune.

Exemples de Playbooks

Créer un réseau

- hosts: all
  vars:
    postgres_docker_network_create: true
    postgres_docker_memory: "2GB"
    postgres_docker_cpu: "2"
  roles:
    - geerlingguy.docker
    - organicveggie.postgres_docker

Nom personnalisé avec montages liés

- hosts: all
  vars:
    postgres_docker_name: "pgsql-example"
    postgres_docker_use_volumes: false
  roles:
    - geerlingguy.docker
    - organicveggie.postgres_docker

Scripts d'initialisation

Script shell pour configurer un nouvel utilisateur et une nouvelle base de données : 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: Copier le script d'initialisation
      ansible.builtin.copy:
        src: "files/01_create_example.sh"
        dest: "/tmp"
        mode: "755"

  roles:
    - organicveggie.postgres_docker

Licence

Apache

Informations sur l'auteur

Sean Laurent

À propos du projet

Role to install PostgreSQL Docker container on Linux.

Installer
ansible-galaxy install organicveggie.postgres_docker
Licence
apache-2.0
Téléchargements
98
Propriétaire