organicveggie.postgres_docker

Ansibleロール: Docker上のPostgreSQL

github github Issues PullRequests Last commit

Ansibleのロールを使って、PostgreSQLのDockerコンテナをセットアップして実行するためのものです。

目次

必要条件

Dockerが必要です。Dockerのインストールには、geerlingguy.dockerのロールを推奨します。

ロール変数

  • postgres_docker_name: Dockerコンテナの名前。

  • postgres_docker_admin_password: スーパーユーザーのパスワード。

  • postgres_docker_initscripts: PostgreSQL Dockerコンテナにコピーするオプションの初期化スクリプト。ファイル形式は.sqlsql.gz、または.shです。ターゲットシステムにあらかじめ存在している必要があります。

    コンテナがinitdbを呼び出してデフォルトのpostgresユーザーとデータベースを作成した後、*.sqlファイルが実行され、実行可能な*.shスクリプトが実行され、非実行可能な*.shスクリプトがサービスを開始する前に取得されます。スクリプトは、データディレクトリが空の状態でコンテナを起動した場合のみ実行されます。事前に存在するデータベースは、コンテナの起動時には変更されません。一般的な問題は、スクリプトの1つが失敗し、オーケストレーターがすでに初期化されたデータディレクトリでコンテナを再起動すると、スクリプトが続行されないことです。

    初期化ファイルは、現在のロケールによって定義された名前順に実行されます。デフォルトはen_US.utf8です。すべての*.sqlファイルは、デフォルトでpostgresスーパーユーザーであるPOSTGRES_USERによって実行されます。*.shスクリプト内で実行されるpsqlコマンドは、--username "$POSTGRES_USER"フラグを使用してPOSTGRES_USERとして実行することを推奨します。このユーザーは、コンテナ内でUnixソケット接続のためのtrust認証があるため、パスワードなしで接続できます。

  • postgres_docker_use_volumes: Dockerボリュームを使用するかどうか。Trueにすると、次の2つの専用Dockerボリュームが作成されます:

    • /etc/postgresqlにマウントされる設定ファイル用の1つ。
    • /var/lib/postgresql/dataにマウントされるデータファイル用の1つ。
  • postgres_docker_memory: PostgreSQLコンテナに割り当てるメモリの量。

  • postgres_docker_cpu: PostgreSQLコンテナに割り当てるvCPUの数。

  • postgres_docker_network_create: PostgreSQLコンテナ用のDockerネットワークを作成するかどうか。Trueにすると、このコンテナ専用のネットワークが作成されます。Falseの場合はネットワークを作成せず、postgres_docker_network_nameで指定されたネットワークに自動的に参加します。

  • postgres_docker_network_name: 参加するDockerネットワークの名前。必須。postgres_docker_network_createが偽の場合は特に便利です。

  • postgres_docker_image: 使用するDockerイメージの名前とラベル。

  • postgres_docker_available_externally: Traefik Proxyでの有効化を行うかどうか。

完全なリストはdefaults/main.ymlを参照してください。

依存関係

なし。

サンプルプレイブック

ネットワークを作成

- hosts: all
  vars:
    postgres_docker_network_create: true
    postgres_docker_memory: "2GB"
    postgres_docker_cpu: "2"
  roles:
    - geerlingguy.docker
    - organicveggie.postgres_docker

バインドマウントを使用したカスタム名

- hosts: all
  vars:
    postgres_docker_name: "pgsql-example"
    postgres_docker_use_volumes: false
  roles:
    - geerlingguy.docker
    - organicveggie.postgres_docker

初期化スクリプト

新しいユーザーとデータベースをセットアップするシェルスクリプト: 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

プレイブック:

- hosts: all
  roles:
    - geerlingguy.docker

- hosts: all

vars:
    postgres_docker_initscripts:
        - "/tmp/01_create_example.sh"

  tasks:
    - name: 初期化スクリプトをコピー
      ansible.builtin.copy:
        src: "files/01_create_example.sh"
        dest: "/tmp"
        mode: "755"

  roles:
    - organicveggie.postgres_docker

ライセンス

Apache

著者情報

Sean Laurent

プロジェクトについて

Role to install PostgreSQL Docker container on Linux.

インストール
ansible-galaxy install organicveggie.postgres_docker
ライセンス
apache-2.0
ダウンロード
98
所有者