organicveggie.postgres_docker

Ansible Rolle: PostgreSQL auf Docker

github github Issues PullRequests Letzte Änderung

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 Standardbenutzer postgres 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 von POSTGRES_USER ausgeführt, der standardmäßig der Superuser postgres ist. Es wird empfohlen, dass alle psql Befehle, die innerhalb eines *.sh Skripts ausgeführt werden, als POSTGRES_USER mit dem Flag --username "$POSTGRES_USER" ausgeführt werden. Dieser Benutzer kann aufgrund der trust 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.
  • 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 in postgres_docker_network_name angegebenen Netzwerk bei.

  • postgres_docker_network_name: Name des Docker-Netzwerks, dem beigetreten werden soll. Erforderlich. Besonders nützlich, wenn postgres_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

Apache

Autor Informationen

Sean Laurent

Über das Projekt

Role to install PostgreSQL Docker container on Linux.

Installieren
ansible-galaxy install organicveggie.postgres_docker
GitHub Repository
Lizenz
apache-2.0
Downloads
98
Besitzer