organicveggie.postgres_docker
Rôle Ansible : PostgreSQL sur Docker
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éfautpostgres
, 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é parPOSTGRES_USER
, qui est par défaut l'utilisateur superutilisateurpostgres
. Il est recommandé que toutes les commandespsql
exécutées à l'intérieur d'un script*.sh
soient exécutées en tant quePOSTGRES_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'authentificationtrust
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
.
- Un pour les fichiers de configuration montés à
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é danspostgres_docker_network_name
.postgres_docker_network_name
: Nom du réseau Docker à rejoindre. Requis. Particulièrement utile sipostgres_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
Informations sur l'auteur
Role to install PostgreSQL Docker container on Linux.
ansible-galaxy install organicveggie.postgres_docker