organicveggie.postgres_docker
Ansible Rolle: PostgreSQL auf Docker
Eine Ansible Rolle zum Einrichten und Ausführen des PostgreSQL Docker Containers.
Inhalt
Voraussetzungen
Benötigt Docker. Empfohlene Rolle für die Docker-Installation: geerlingguy.docker
.
Rollen-Variablen
postgres_docker_name
: Name des Docker-Containers.postgres_docker_admin_password
: Passwort für den Superuser.postgres_docker_initscripts
: Optionale Initialisierungsskripte, die in den PostgreSQL Docker-Container kopiert werden. Diese können.sql
,sql.gz
oder.sh
Dateien sein. Sie müssen bereits auf dem Zielsystem vorhanden sein, damit diese Rolle sie in den Docker-Container kopieren kann.Nachdem der Container
initdb
aufgerufen hat, um den Standardbenutzerpostgres
und die Datenbank zu erstellen, wird er alle*.sql
Dateien ausführen, alle ausführbaren*.sh
Skripte ausführen und alle nicht ausführbaren*.sh
Skripte laden, bevor der Dienst gestartet wird. Skripte werden nur ausgeführt, wenn der Container mit einem leeren Datenverzeichnis gestartet wird; jede vorhandene Datenbank bleibt beim Start des Containers unberührt. Ein häufiges Problem ist, dass, wenn eines Ihrer Skripte fehlschlägt und Ihr Orchestrator den Container mit dem bereits initialisierten Datenverzeichnis neu startet, die Skripte nicht weitergeführt werden.Initialisierungsdateien werden in der Reihenfolge ihrer Namen ausgeführt, wie sie durch die aktuelle Locale definiert ist, die standardmäßig
en_US.utf8
ist. Alle*.sql
Dateien werden vonPOSTGRES_USER
ausgeführt, der standardmäßig der Superuserpostgres
ist. Es wird empfohlen, dass allepsql
Befehle, die innerhalb eines*.sh
Skripts ausgeführt werden, alsPOSTGRES_USER
mit dem Flag--username "$POSTGRES_USER"
ausgeführt werden. Dieser Benutzer kann aufgrund dertrust
Authentifizierung für Unix Socket Verbindungen, die im Container erstellt werden, ohne Passwort verbinden.postgres_docker_use_volumes
: Ob Docker-Volumes verwendet werden sollen oder nicht. True erstellt zwei dedizierte Docker-Volumes:- Eines für die Konfigurationsdateien, die an
/etc/postgresql
montiert werden. - Eines für die Datendateien, die an
/var/lib/postgresql/data
montiert werden.
- Eines für die Konfigurationsdateien, die an
postgres_docker_memory
: Menge an Speicher, die dem PostgreSQL-Container zugeordnet werden soll.postgres_docker_cpu
: Anzahl der vCPUs, die dem PostgreSQL-Container zugeordnet werden sollen.postgres_docker_network_create
: Ob ein Docker-Netzwerk für den PostgreSQL-Container erstellt werden soll oder nicht. True erstellt ein Netzwerk speziell für diesen Container. False erstellt kein Netzwerk, fügt aber automatisch dem inpostgres_docker_network_name
angegebenen Netzwerk bei.postgres_docker_network_name
: Name des Docker-Netzwerks, dem beigetreten werden soll. Erforderlich. Besonders nützlich, wennpostgres_docker_network_create
auf false gesetzt ist.postgres_docker_image
: Name und Tag des Docker-Images, das verwendet werden soll.postgres_docker_available_externally
: Ob in Traefik Proxy aktiviert werden soll oder nicht.
Siehe defaults/main.yml für eine vollständige Liste.
Abhängigkeiten
Keine.
Beispiel Playbooks
Netzwerk erstellen
- hosts: all
vars:
postgres_docker_network_create: true
postgres_docker_memory: "2GB"
postgres_docker_cpu: "2"
roles:
- geerlingguy.docker
- organicveggie.postgres_docker
Benutzerdefinierter Name mit Bind-Mounts
- hosts: all
vars:
postgres_docker_name: "pgsql-example"
postgres_docker_use_volumes: false
roles:
- geerlingguy.docker
- organicveggie.postgres_docker
Initialisierungsskripte
Shell-Skript zur Einrichtung eines neuen Benutzers und einer Datenbank: 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: Init-Skript kopieren
ansible.builtin.copy:
src: "files/01_create_example.sh"
dest: "/tmp"
mode: "755"
roles:
- organicveggie.postgres_docker
Lizenz
Autor Informationen
Role to install PostgreSQL Docker container on Linux.
ansible-galaxy install organicveggie.postgres_docker