Server Deployment

pgAdminは、サーバーモードで実行するようにアプリを構成し、リバースプロキシとして実行されているWebサーバーの背後にデプロイするか、WSGIインターフェイスを使用してデプロイすることにより、Webアプリケーションとしてデプロイできます。

サーバーモードで展開する場合、ユーザーには2つの注目すべき違いがあります。

  • ユーザーはpgAdminを使用する前にログインする必要があります。サーバーモードの初期化時に初期スーパーユーザーアカウントが作成され、このユーザーは必要に応じてスーパーユーザーと非スーパーユーザーを追加できます。

  • ファイルストレージは、 STORAGE_DIR 構成パラメーターを使用して構成されたディレクトリの下の個々のユーザーの仮想ルートディレクトリに制限されています。ユーザーは、サーバーの完全なファイルシステムにアクセスできません。

次の手順は、 Apache HTTPD の下で mod_wsgi を使用して、 uWSGI または Gunicorn を使用してスタンドアロンで、 uWSGI または Gunicorn を使用して NGINX の下でpgAdminをWSGIアプリケーションとして実行する方法を示しています。

参考

pgAdminをゼロからビルドおよび構成する手順の詳細については、ソースコードの最上位ディレクトリにあるREADMEファイルを参照してください。便宜上、ファイル here の最新バージョンを見つけることができますが、これはpgAdminの特定のバージョンのソースコードに含まれるバージョンとは異なる場合があることに注意してください。

要件

Important :pgAdminの一部のコンポーネントは、クライアントセッションと特定のデータベース接続間のアフィニティを維持する機能を必要とします(たとえば、ユーザーがBEGINコマンドに続けて多数のDMLSQLステートメント、次にCOMMITを実行するクエリツール)。pgAdminは、これを処理するビルトイン接続管理を使用して設計されていますが、クライアントセッションと複数のWSGIワーカープロセスの1つとの間のアフィニティを維持することは簡単ではないため、単一のPythonプロセスのみを使用する必要があります。

Windowsシステムでは、ApacheHTTPサーバーはシングルプロセス、マルチスレッドアーキテクチャを使用します。WSGIアプリケーションは embedded モードで実行されます。つまり、すべての場合において、このプラットフォームには1つのプロセスのみが存在します。

Unixシステムでは、ApacheHTTPサーバーは通常、マルチプロセス、シングルスレッドアーキテクチャを使用します(これは、コンパイル時に選択される MPM によって異なります)。WSGIアプリケーションに embedded モードが選択されている場合、Apacheプロセスごとに1つのPython環境があり、それぞれに独自の接続マネージャーがあり、接続アフィニティが失われます。したがって、単一のプロセスを使用するように構成された mod_wsgi の daemon モードを使用する必要があります。これにより、すべてのApacheワーカープロセスで使用されるWSGIアプリケーションの単一のインスタンスが起動されます。

これが潜在的なパフォーマンスのボトルネックであることは事実ですが、実際にはpgAdminは、ビジーなWebサイトとは異なり、大量のトラフィックが発生する可能性が高いWebアプリケーションではないため、実際には問題になりません。

pgAdminの将来のバージョンでは、この制限を克服するために共有接続マネージャープロセスが導入される可能性がありますが、これはかなりの量の作業であり、実際的なメリットはほとんどありません。

構成

サーバーモードで実行するようにpgAdminを構成するには、マルチユーザーモードで実行するようにPythonコードを構成し、コードを見つけて実行するようにWebサーバーを構成する必要がある場合があります。

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

パイソン

pgAdmin4v2以降、サーバーモードがデフォルト構成です。デスクトップランタイムで実行している場合、これは自動的にオーバーライドされます。通常、サーバーモードを有効にするためだけに構成を変更する必要はありませんが、使用されるパスの一部を調整することが望ましい場合があります。

Pythonコードを構成するには、次の手順に従います。

  1. 既存の config.py ファイルと一緒に config_local.py ファイルを作成します。

  2. config_local.py を編集し、以下の設定を追加します。ほとんどの場合、デフォルトのファイルの場所は適切です。

    *注:指定されたディレクトリが、Webサーバープロセスを実行するユーザーによって書き込み可能であることを確認する必要があります。apacheまたはwww-data。DATA_DIRを指定して、DATA_DIRフォルダーの下に必要なすべてのディレクトリとファイルを作成できます。

    LOG_FILE = '/var/log/pgadmin4/pgadmin4.log'
    SQLITE_PATH = '/var/lib/pgadmin4/pgadmin4.db'
    SESSION_DB_PATH = '/var/lib/pgadmin4/sessions'
    STORAGE_DIR = '/var/lib/pgadmin4/storage'
    AZURE_CREDENTIAL_CACHE_DIR = '/var/lib/pgadmin4/azurecredentialcache'
    KERBEROS_CCACHE_DIR = '/var/lib/pgadmin4/kerberoscache'
    
  1. 次のコマンドを実行して、構成データベースを作成します。

    # python setup.py
    
  2. 構成データベースの所有権を、Webサーバープロセスが実行されるユーザーに変更します。たとえば、Webサーバーがグループwww-dataのユーザーwww-dataとして実行され、SQLiteパスが /var/lib/pgadmin4/pgadmin4.db であると仮定します。

    # chown www-data:www-data /var/lib/pgadmin4/pgadmin4.db
    

ホスティング

サーバーモードでpgAdminをホストする方法はたくさんあります。いくつかの例を以下に示します。

ApacheHTTPD構成(Windows)

mod_wsgi をサポートするようにApacheHTTPを構成したら、pgAdminアプリケーションを以下の例と同様に構成できます。

<VirtualHost *>
    ServerName pgadmin.example.com
    WSGIScriptAlias / "C:\Program Files\pgAdmin4\web\pgAdmin4.wsgi"
    <Directory "C:\Program Files\pgAdmin4\web">
            Order deny,allow
            Allow from all
    </Directory>
</VirtualHost>

お気に入りのエディターで C:/Program Files/pgAdmin4/web/pgAdmin4.wsgi ファイルを開き、以下のコードを追加します。Apacheサーバーの実行時にPython仮想環境がアクティブになります。

activate_this = 'C:\Program Files\pgAdmin4\venv\Scripts\activate_this.py'
exec(open(activate_this).read())

Note: pgAdmin4.wsgi ファイルで行われた変更は、pgAdmin4がアップグレードまたはダウングレードされると元に戻ります。

ApacheHTTPD構成(Linux/Unix)

mod_wsgi をサポートするようにApacheHTTPを構成したら、pgAdminアプリケーションを以下の例と同様に構成できます。

<VirtualHost *>
    ServerName pgadmin.example.com

    WSGIDaemonProcess pgadmin processes=1 threads=25 python-home=/path/to/python/virtualenv
    WSGIScriptAlias / /opt/pgAdmin4/web/pgAdmin4.wsgi

    <Directory /opt/pgAdmin4/web>
        WSGIProcessGroup pgadmin
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

Note: ApacheHTTPD2.4以降を使用している場合は、次の行を置き換えます。

Order deny,allow
Allow from all

と:

Require all granted

アクセス制御の要件に合わせて、必要に応じて調整します。

スタンドアロンGunicorn構成

pgAdminは、以下に示すようなコマンドを実行するだけで、Gunicornが直接ホストできます。この例では、PythonWheelを使用してpgAdminがインストールされたことを想定していることに注意してください(インストールに合わせてパスを調整する必要がある場合があります)。

gunicorn  --bind 0.0.0.0:80 \
          --workers=1 \
          --threads=25 \
          --chdir /usr/lib/python3.7/dist-packages/pgadmin4 \
          pgAdmin4:app

スタンドアロンuWSGI構成

pgAdminは、以下に示すようなコマンドを実行するだけで、uWSGIで直接ホストできます。この例では、PythonWheelを使用してpgAdminがインストールされたことを想定していることに注意してください(インストールに合わせてパスを調整する必要がある場合があります)。

uwsgi --http-socket 0.0.0.0:80 \
      --processes 1 \
      --threads 25 \
      --chdir /usr/lib/python3.7/dist-packages/pgadmin4/ \
      --mount /=pgAdmin4:app

Gunicornを使用したNGINX構成

pgAdminは、NGINXを前に置いて、Gunicornでホストできます。これらの例では、PythonWheelを使用してpgAdminがインストールされたことを想定していることに注意してください(インストールに合わせてパスを調整する必要がある場合があります)。

サーバーのルートディレクトリでpgAdminで実行するには、次のようなコマンドを使用してGunicornを起動します。

gunicorn --bind unix:/tmp/pgadmin4.sock \
         --workers=1 \
         --threads=25 \
         --chdir /usr/lib/python3.7/dist-packages/pgadmin4 \
         pgAdmin4:app

そしてNGINXを構成します。

location / {
    include proxy_params;
    proxy_pass http://unix:/tmp/pgadmin4.sock;
}

または、サーバー上のサブディレクトリ(この場合は/pgadmin4)でpgAdminをホストできます。ルートディレクトリを使用する場合と同様にGunicornを起動しますが、次のようにNGINXを構成します。

location /pgadmin4/ {
    include proxy_params;
    proxy_pass http://unix:/tmp/pgadmin4.sock;
    proxy_set_header X-Script-Name /pgadmin4;
}

uWSGIを使用したNGINX設定

pgAdminは、NGINXをその前に置いて、uWSGIでホストできます。これらの例では、PythonWheelを使用してpgAdminがインストールされたことを想定していることに注意してください(インストールに合わせてパスを調整する必要がある場合があります)。

サーバーのルートディレクトリでpgAdminで実行するには、次のようなコマンドを使用してuWSGIを起動します。

uwsgi --socket /tmp/pgadmin4.sock \
      --processes 1 \
      --threads 25 \
      --chdir /usr/lib/python3.7/dist-packages/pgadmin4/ \
      --manage-script-name \
      --mount /=pgAdmin4:app

そしてNGINXを構成します。

location / { try_files $uri @pgadmin4; }
location @pgadmin4 {
    include uwsgi_params;
    uwsgi_pass unix:/tmp/pgadmin4.sock;
}

または、サーバー上のサブディレクトリ(この場合は/pgadmin4)でpgAdminをホストできます。uWSGIを起動し、ディレクトリ名が mount パラメーターで指定されていることに注意してください。

uwsgi --socket /tmp/pgadmin4.sock \
      --processes 1 \
      --threads 25 \
      --chdir /usr/lib/python3.7/dist-packages/pgadmin4/ \
      --manage-script-name \
      --mount /pgadmin4=pgAdmin4:app

次に、NGINXを構成します。

location = /pgadmin4 { rewrite ^ /pgadmin4/; }
location /pgadmin4 { try_files $uri @pgadmin4; }
location @pgadmin4 {
  include uwsgi_params;
  uwsgi_pass unix:/tmp/pgadmin4.sock;
}

追加情報

注釈

pgAdminは追加のPythonプロセスを随時生成し、これを行うにはPythonの sys.executable 変数に依存しています。場合によっては、その値をオーバーライドして、WSGIホストプロセスの代わりに正しいインタープリターが使用されるようにする必要があります。たとえば、uWSGIはこれを実現するための --py-sys-executable コマンドラインオプションを提供します。