organicveggie.postgres_docker
Rola Ansible: PostgreSQL na Dockerze
Rola Ansible do skonfigurowania i uruchomienia PostgreSQL w kontenerze Docker.
Zawartość
Wymagania
Wymaga Dockera. Rekomendowana rola do instalacji Dockera: geerlingguy.docker.
Zmienne roli
postgres_docker_name: Nazwa kontenera Docker.postgres_docker_admin_password: Hasło superużytkownika.postgres_docker_initscripts: Opcjonalne skrypty inicjalizacyjne do skopiowania do kontenera Docker PostgreSQL. Mogą to być pliki.sql,sql.gzlub.sh. Muszą one już istnieć na docelowym systemie, aby ta rola mogła je skopiować do kontenera Docker.Po wywołaniu
initdbw kontenerze, aby utworzyć domyślnego użytkownikapostgresi bazę danych, zostaną uruchomione wszelkie pliki*.sql, a także wykonane skrypty*.shoraz załadowane skrypty*.sh, zanim uruchomiona zostanie usługa. Skrypty są uruchamiane tylko wtedy, gdy kontener uruchamia się z pustym katalogiem danych; jakakolwiek istniejąca wcześniej baza danych zostanie pozostawiona nietknięta przy uruchamianiu kontenera. Częstym problemem jest to, że jeśli jeden z twoich skryptów nie powiedzie się, a twój orkiestrator ponownie uruchomi kontener z już zainicjalizowanym katalogiem danych, nie zostaną one kontynuowane.Pliki inicjalizacyjne będą wykonywane w posortowanej kolejności nazw zgodnie z aktualnym ustawieniem lokalnym, które domyślnie jest ustawione na
en_US.utf8. Wszelkie pliki*.sqlbędą wykonywane przezPOSTGRES_USER, który domyślnie jest superużytkownikiempostgres. Zaleca się, aby wszelkie poleceniapsql, które są wykonywane w skrypcie*.sh, były wykonywane jakoPOSTGRES_USERprzy użyciu flagi--username "$POSTGRES_USER". Ten użytkownik będzie mógł się połączyć bez hasła dzięki obecności uwierzytelnianiatrustdla połączeń przez gniazda Unix wewnątrz kontenera.postgres_docker_use_volumes: Czy używać wolumenów Dockera, czy nie. Prawda spowoduje utworzenie dwóch dedykowanych wolumenów Dockera:- Jeden dla plików konfiguracyjnych montowanych w
/etc/postgresql. - Drugi dla plików danych montowanych w
/var/lib/postgresql/data.
- Jeden dla plików konfiguracyjnych montowanych w
postgres_docker_memory: Ilość pamięci do przydzielenia dla kontenera PostgreSQL.postgres_docker_cpu: Liczba vCPU, które mają być przydzielone dla kontenera PostgreSQL.postgres_docker_network_create: Czy utworzyć sieć Dockera dla kontenera PostgreSQL, czy nie. Prawda utworzy sieć specjalnie dla tego kontenera. Fałsz nie utworzy sieci, ale automatycznie dołączy do sieci określonej wpostgres_docker_network_name.postgres_docker_network_name: Nazwa sieci Dockera, do której należy dołączyć. Wymagane. Szczególnie przydatne, jeślipostgres_docker_network_createjest ustawione na fałsz.postgres_docker_image: Nazwa i tag obrazu Dockera do użycia.postgres_docker_available_externally: Czy włączyć w Traefik Proxy.
Zobacz defaults/main.yml w celu uzyskania pełnej listy.
Zależności
Brak.
Przykładowe Playbooki
Utwórz sieć
- hosts: all
vars:
postgres_docker_network_create: true
postgres_docker_memory: "2GB"
postgres_docker_cpu: "2"
roles:
- geerlingguy.docker
- organicveggie.postgres_docker
Niestandardowa nazwa z zamocowaniami
- hosts: all
vars:
postgres_docker_name: "pgsql-example"
postgres_docker_use_volumes: false
roles:
- geerlingguy.docker
- organicveggie.postgres_docker
Skrypty inicjalizacyjne
Skrypt powłoki do utworzenia nowego użytkownika i bazy danych: 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: Skopiuj skrypt inicjalizacyjny
ansible.builtin.copy:
src: "files/01_create_example.sh"
dest: "/tmp"
mode: "755"
roles:
- organicveggie.postgres_docker
Licencja
Informacje o autorze
Role to install PostgreSQL Docker container on Linux.
ansible-galaxy install organicveggie.postgres_docker