Container Deployment#

pgAdminは、次のイメージを使用してコンテナに展開できます。

Dockerを使用している場合、次のようなコマンドを使用して、必要なpgAdminのバージョンを取得するために選択できるさまざまなタグがあります。

docker pull dpage/pgadmin4:<tag name>

ここで、 <tag name> は次のいずれかです。

タグ名

説明

最新の

最新のリリース。

8.4

特定のバージョンこの場合は8.4。

8

特定のメジャーバージョンこの場合はメジャーバージョン8の最新リリース。

スナップショット

最新の夜間テストビルド。

PostgreSQLユーティリティ#

PostgreSQLユーティリティ pg_dump 、 pg_dumpall 、 pg_restore 、および psql がコンテナに含まれており、バックアップを作成および復元し、その他のメンテナンス機能を実行できます。複数のバージョンが次のディレクトリに含まれているため、データベースサーバーのさまざまなバージョンで使用できます。

  • PostgreSQL 12 /usr/local/pgsql-12

  • PostgreSQL 13 /usr/local/pgsql-13

  • PostgreSQL 14 /usr/local/pgsql-14

  • PostgreSQL 15: /usr/local/pgsql-15

  • PostgreSQL 16 /usr/local/pgsql-16

コンテナに設定されるデフォルトのバイナリパスは次のとおりです。

DEFAULT_BINARY_PATHS = {
    'pg-17': '/usr/local/pgsql-17',
    'pg-16': '/usr/local/pgsql-16',
    'pg-15': '/usr/local/pgsql-15',
    'pg-14': '/usr/local/pgsql-14',
    'pg-13': '/usr/local/pgsql-13'
}

これは Preferences で変更される場合があります。

環境変数#

コンテナは、起動時に次の変数を受け入れます。

PGADMIN_DEFAULT_EMAIL

これは、pgAdminにログインするための初期管理者アカウントを設定するときに使用されるメールアドレスです。この変数は必須で、起動時に設定する必要があります。

PGADMIN_DEFAULT_PASSWORD

これは、pgAdminにログインするための初期管理者アカウントを設定するときに使用されるパスワードです。この変数は必須で、起動時に設定する必要があります。

PGADMIN_DEFAULT_PASSWORD_FILE

これは、pgAdminにログインするための初期管理者アカウントを設定するときに使用されるパスワードです。パスワードを設定するには、この値を docker Secret に設定する必要があります。この変数は、docker swarm環境で、またはdocker composeでコンテナを作成中にサポートされています。 PGADMIN_DEFAULT_PASSWORDまたはPGADMIN_DEFAULT_PASSWORD_FILE変数は必須で、起動時に設定する必要があります。

PGADMIN_DISABLE_POSTFIX

デフォルト<null>

設定しない場合、Postfixサーバーが起動して、パスワードをリセットするメールを配信します。

任意の値に設定している場合、Postfixサーバーは起動されず、以下の PGADMIN_CONFIG_ オプションを使用して外部メールサーバーを使用するようにpgAdminを構成する必要があります。

このオプションは、Postfixの起動にsudoを使用できない環境で実行している場合、または外部メールサーバーを使用する場合に役立ちます。

PGADMIN_ENABLE_TLS

デフォルト<null>

設定しない場合、コンテナはポート80でプレーンテキストでの接続をリッスンすることになります。任意の値に設定されている場合、コンテナはポート443でTLS接続をリッスンするようになります。

TLSが有効になっている場合、証明書とキーを提供する必要があります。通常、これらはホストファイルシステムに保存し、コンテナからマウントする必要があります。予想されるパスは/certs/server.certおよび/certs/server.keyです。

PGADMIN_LISTEN_ADDRESS

デフォルト[::]

サーバーがリッスンするローカルアドレスを指定します。デフォルトでほとんどのユーザーで動作します。IPv4のみの環境では、これを0.0.0.0に設定する必要がある場合があります。

PGADMIN_LISTEN_PORT

デフォルト80または443TLSが有効な場合

サーバーがリッスンするポートを、デフォルトを使用するのではなく特定の値に設定できます。

PGADMIN_SERVER_JSON_FILE

デフォルト/pgadmin4/servers.json

サーバー定義リストのデフォルトのファイルパスをオーバーライドします。詳細については、以下の/pgadmin4/servers.jsonマップされたファイルを参照してください。 Servers JSON file のフォーマットを参照してください。

PGADMIN_REPLACE_SERVERS_ON_STARTUP

デフォルトnull

デフォルトでは、サーバー定義は最初の起動時、つまり構成データベースを初期化するときにのみロードされます。上記のPGADMIN_SERVER_JSON_FILEを参照してください。

この変数がTrueに設定されている場合、サーバー定義は起動するたびに置き換えられます。これは、サーバー定義を宣言的に管理するために使用できます。

PGADMIN_PREFERENCES_JSON_FILE

デフォルト/pgadmin4/preferences.json

コンテナ作成時に設定カスタマイズのデフォルトのファイルパスをオーバーライドします。詳細については、以下の/pgadmin4/preferences.jsonマップされたファイルを参照してください。 Preferences JSON file のフォーマットを参照してください。

PGADMIN_CUSTOM_CONFIG_DISTRO_FILE

デフォルト /pgadmin4/config_distro.py

pgadmin構成ファイルのデフォルトのファイルパスをオーバーライドします。これは、読み取り専用のルートファイルシステムでコンテナをプロビジョニングするときに使用でき、kubernetesのより安全なpgadmin4展開を実現します。このファイルを外部マッピングする場合、 PGADMIN_CONFIG_ サフィックスを使用して渡された環境変数は無視されることに注意してください。

PGPASS_FILE

デフォルト<null> この変数は、 pgadminで追加されたサーバーのpgpassファイルを使用してパスワードを渡す場合に設定する必要があります。

GUNICORN_ACCESS_LOGFILE

デフォルト- 標準出力

Gunicornアクセスログをstdoutに送信する代わりに、保存する出力ファイルを指定します。

GUNICORN_LIMIT_REQUEST_LINE

デフォルト8190

HTTP要求ラインの最大サイズをバイト単位で設定します。一部の要求は非常に大きくなる場合があるため、デフォルトでは、pgAdminコンテナはGunicornが提供する最大制限サイズを使用します。例外的な場合、この値を0ゼロに設定して/"unlimited/"を指定できますが、これは潜在的なサービス拒否の危険をもたらします。

GUNICORN_THREADS

デフォルト25

Gunicornサーバーが着信要求の処理に使用するスレッド数を調整します。これは、高負荷のシステムで増加する可能性がある場合を除き、通常はそのままにしておく必要があります。

PGADMIN_CONFIG_ *

これは、pgAdminの config.py ファイルの構成オプションをオーバーライドするために使用できる変数プレフィックスです。 config.py の変数名に PGADMIN_CONFIG_ 接頭辞を追加し、文字列の場合は'string value'、ブール値の場合はTrue/False、または数値の場合は123の形式で値を与えます。例については、以下を参照してください。

設定はコンテナ内の /pgadmin4/config_distro.py に書き込まれ、 /pgadmin4/config.py の後、 /pgadmin4/config_local.py の前に読み取られます。したがって、指定された設定はconfig.pyのすべてをオーバーライドしますが、 config_local.pyの設定でオーバーライドできます。

設定は /pgadmin4/config_distro.py に1回だけ、通常はコンテナの最初の起動時に書き込まれます。 /pgadmin4/config_distro.py に1行以上が含まれる場合、変更は行われません。たとえば、コンテナインスタンスが再起動された場合、または /pgadmin4/config_distro.py が永続ストレージ上のファイルにマッピングされている場合非推奨-代わりに /pgadmin4/config_local.py を使用します。

使用可能な構成設定の詳細については、 The config.py File を参照してください。

マップされたファイルとディレクトリ#

次のファイルまたはディレクトリをコンテナからホストマシンにマッピングして、インスタンス間で構成をカスタマイズ、共有できるようにします。

警告

警告 pgAdminは、コンテナ内の pgadmin グループGID:5050の pgadmin ユーザーUID:5050として実行されます。ホストマシン上のこのユーザーのすべてのファイルが読み取り可能で、必要に応じてworking/sessionディレクトリなどが書き込み可能であることを確認する必要があります。例

sudo chown -R 5050:5050 <host_directory>

拡張属性をサポートしていない一部のファイルシステムでは、1024より大きい PGADMIN_LISTEN_PORT の値を指定せずにpgAdminを実行できない場合があります。そのような場合、コンテナ起動時に環境変数を追加して代替ポートを指定します例

-e 'PGADMIN_LISTEN_PORT=5050'

それに応じて、ホストコンテナのポートマッピングを調整することを忘れないでください。

/var/lib/pgadmin

これは、pgAdminがセッションデータ、ユーザーファイル、構成ファイル、および構成データベースを保存する作業ディレクトリです。このディレクトリをホストマシンにマッピングすると、コンテナを呼び出すまでに構成を維持する簡単な方法が提供されます。

/pgadmin4/config_local.py

このファイルは、pgAdminの構成設定をオーバーライドするために使用できます。 config.pyにある設定は、必要に応じて展開固有の値でオーバーライドできます。 config_local.pyの設定は、 PGADMIN_CONFIG_ 接頭辞付き変数を介してコンテナ環境で指定されたものをオーバーライドします。

/pgadmin4/servers.json

このファイルがマップされている場合、その中にあるサーバー定義は、起動時にロードされます。これにより、接続情報をコンテナ内のpgAdminのインスタンスにプリロードできます。サーバー定義は、最初の起動時、つまり構成データベースが作成されたときにのみロードされ、同じ構成データベースを使用した後続の起動ではロードされないことに注意してください。

/pgadmin4/preferences.json

このファイルがマップされている場合、それに定義されている設定は、起動時に更新されます。これにより、コンテナ内のpgAdminのインスタンスに設定をカスタマイズできます。設定は最初の起動時、つまり構成データベースが作成されたときにのみ設定され、同じ構成データベースを使用した後続の起動では設定されないことに注意してください。

/certs/server.cert

TLSが有効になっている場合、このファイルはサーバーTLS証明書として使用されます。

/certs/server.key

TLSが有効になっている場合、このファイルはサーバーTLS証明書のキーファイルとして使用されます。

例#

ポート80で単純なコンテナを実行します。

docker pull dpage/pgadmin4
docker run -p 80:80 \
    -e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' \
    -e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' \
    -d dpage/pgadmin4

ポート80で単純なコンテナを実行し、いくつかの構成オプションを設定します。

docker pull dpage/pgadmin4
docker run -p 80:80 \
    -e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' \
    -e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' \
    -e 'PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION=True' \
    -e 'PGADMIN_CONFIG_LOGIN_BANNER="Authorised users only!"' \
    -e 'PGADMIN_CONFIG_CONSOLE_LOG_LEVEL=10' \
    -d dpage/pgadmin4

ホスト上の/private/var/lib/pgadminの共有config/storageディレクトリと、ホスト上の/tmp/servers.jsonからプリロードされたサーバーを使用して、TLSセキュアコンテナを実行します。

docker pull dpage/pgadmin4
docker run -p 443:443 \
    -v /private/var/lib/pgadmin:/var/lib/pgadmin \
    -v /path/to/certificate.cert:/certs/server.cert \
    -v /path/to/certificate.key:/certs/server.key \
    -v /tmp/servers.json:/pgadmin4/servers.json \
    -e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' \
    -e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' \
    -e 'PGADMIN_ENABLE_TLS=True' \
    -d dpage/pgadmin4

リバースプロキシ#

場合によっては、ユーザーが実行されているコンテナに直接ではなく、リバースプロキシを介してpgAdminに接続することが望ましい場合があります。次の例は、これを実現する方法を示しています。 Nginx などの従来のリバースプロキシサーバーでは、 pgAdminは同じホスト上のコンテナで実行され、ホストのポート5050がコンテナのポート80にマッピングされます。例、

docker pull dpage/pgadmin4
docker run -p 5050:80 \
    -e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
    -e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
    -d dpage/pgadmin4

pgAdmin X-Forwarded-*構成#

pgAdminは、各ヘッダーを設定するプロキシの数を理解して、どの値を信頼するかを知る必要があります。この目的に使用されるX-Forwarded-*オプションの構成パラメーターと、それらのデフォルト値を以下に示します。

pgAdminはデフォルトで非標準のポートでもリバースプロキシの背後で実行できるように構成され、通常、これらの構成オプションを変更する必要はありません。通常ではない構成複数のリバースプロキシなどを実行している場合、それに合わせて構成を調整できます。

# Number of values to trust for X-Forwarded-For
PROXY_X_FOR_COUNT = 1

# Number of values to trust for X-Forwarded-Proto.
PROXY_X_PROTO_COUNT = 0

# Number of values to trust for X-Forwarded-Host.
PROXY_X_HOST_COUNT = 0

# Number of values to trust for X-Forwarded-Port.
PROXY_X_PORT_COUNT = 1

# Number of values to trust for X-Forwarded-Prefix.
PROXY_X_PREFIX_COUNT = 0

Nginxを介したHTTP#

次のような構成を使用して、 Nginx ですべてのホスト名をリッスンする単純なHTTPリバースプロキシを作成できます。

server {
    listen 80;
    server_name _;

    location / {
        proxy_set_header Host $host;
        proxy_pass http://localhost:5050/;
        proxy_redirect off;
    }
}

サーバーのルートではなくサブディレクトリでpgAdminをホストする場合は、場所を指定し、pgAdminコンテナにパスを書き換える方法を指示する X-Script-Name ヘッダーを設定する必要があります。

server {
    listen 80;
    server_name _;

    location /pgadmin4/ {
        proxy_set_header X-Script-Name /pgadmin4;
        proxy_set_header Host $host;
        proxy_pass http://localhost:5050/;
        proxy_redirect off;
    }
}

Nginxもコンテナで実行されている場合、2つのコンテナが同じDockerネットワークで実行されている限り、pgAdminポートをホストにマッピングする必要はありません。このような構成では、 proxy_pass オプションは、Dockerネットワーク内のpgAdminコンテナを指すように変更されます。

Nginx経由のHTTPS#

次の構成は、バックエンドコンテナがプロキシサーバーにプレーンHTTPを提供しているときに、HTTPSを介してpgAdminをユーザに提供するために使用できます。この構成では、 X-Script-Name を設定するだけでなく、 X-Scheme を設定して、正しいスキームを使用してURLを生成するようにpgAdminサーバーに指示します。 HTTPからHTTPSへのリダイレクトも含まれます。証明書とキーパスは、特定の展開に応じて適切に調整する必要がある場合があります。

server {
    listen 80;
    return 301 https://$host$request_uri;
}

server {
    listen 443;
    server_name _;

    ssl_certificate /etc/nginx/server.cert;
    ssl_certificate_key /etc/nginx/server.key;

    ssl on;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    location /pgadmin4/ {
        proxy_set_header X-Script-Name /pgadmin4;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header Host $host;
        proxy_pass http://localhost:5050/;
        proxy_redirect off;
    }
}

Traefik#

Traefik の構成は、ローカルマシンで実行されているコンテナからコンテンツを提供するように自分自身を自動的に構成し、 <container_name>.<domain_name> で仮想ホスティングするため、HTTPまたはHTTPSの場合が簡単です。ここで、ドメイン名はTraefik構成で指定されたものです。コンテナは通常、次の例に従って起動されます。

docker pull dpage/pgadmin4
docker run --name "pgadmin4" \
    -e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
    -e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
    -d dpage/pgadmin4

TCP/IPポートはNginxの例のようにホストにマッピングされておらず、コンテナ名はホスト名として使用され、DNSに追加する必要があるため既知の値に設定されていることに注意してくださいゾーンファイル。

次の構成は、Traefikに同梱されているデフォルトの証明書を使用して、ポート80および443でリッスンし、80を443にリダイレクトします。 LetsEncryptまたは他の発行者からの証明書を使用するオプションについては、 Traefikドキュメントを参照してください。

defaultEntryPoints = ["http", "https"]

[entryPoints]
  [entryPoints.http]
    address = ":80"
      [entryPoints.http.redirect]
        entryPoint = "https"
  [entryPoints.https]
    address = ":443"
      [entryPoints.https.tls]

[docker]
domain = "domain_name"
watch = true

Traefikを使用してサブディレクトリの下でpgAdminをホストする場合、構成の変更は通常、Traefik自分自身ではなく、コンテナの起動方法に行われます。たとえば、ルートディレクトリではなく /pgadmin4/ の下でpgAdminをホストするには、Traefikのバージョンv1を使用しているときにコンテナが次のように起動された場合、上記のTraefik構成が使用されます。

docker pull dpage/pgadmin4
docker run --name "pgadmin4" \
    -e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
    -e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
    -e "SCRIPT_NAME=/pgadmin4" \
    -l "traefik.frontend.rule=PathPrefix:/pgadmin4" \
    -d dpage/pgadmin4

SCRIPT_NAME 環境変数は、サブディレクトリの下でホストされていることをコンテナに伝えるように設定され、Nginxで X-Script-Name ヘッダーが使用されるのと同じ方法。およびTraefikを伝えるラベルが追加されましたサブディレクトリの下の要求をこのコンテナにルーティングします。

サブディレクトリでpgAdminをホスティングするためにバージョンv2のTraefik構成を使用している間、通常、以下の例のようにコンテナが起動されます。

docker pull dpage/pgadmin4
docker run --name "pgadmin4" \
    -e "PGADMIN_DEFAULT_EMAIL=user@domain.com" \
    -e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" \
    -e "SCRIPT_NAME=/pgadmin4" \
    -l "traefik.frontend.pgadmin4.rule=Host(`host.example.com`) && PathPrefix(`/pgadmin4`)" \
    -d dpage/pgadmin4