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.gz
lub.sh
. Muszą one już istnieć na docelowym systemie, aby ta rola mogła je skopiować do kontenera Docker.Po wywołaniu
initdb
w kontenerze, aby utworzyć domyślnego użytkownikapostgres
i bazę danych, zostaną uruchomione wszelkie pliki*.sql
, a także wykonane skrypty*.sh
oraz 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*.sql
bę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_USER
przy użyciu flagi--username "$POSTGRES_USER"
. Ten użytkownik będzie mógł się połączyć bez hasła dzięki obecności uwierzytelnianiatrust
dla 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_create
jest 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