Server Deployment#

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

サーバーモードで展開された場合、ユーザーにとって2つの大きな違いがあります。

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

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

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

参考

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

要件#

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

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

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

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

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

構成#

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

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

パイソン#

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

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

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

ホスティング#

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

Apache HTTPD構成Windows#

mod_wsgi をサポートするようにApache HTTPが構成されている場合、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がアップグレードまたはダウングレードされると元に戻ります。

Apache HTTPD構成Linux/Unix#

mod_wsgi をサポートするようにApache HTTPが構成されている場合、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: Apache HTTPD 2.4以降を使用している場合、次の行を置き換えます。

Order deny,allow
Allow from all

で

Require all granted

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

スタンドアロンのGunicorn構成#

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

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

スタンドアロンuWSGI構成#

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

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でホストできます。これらの例は、pgAdminがPython Wheelを使用してインストールされたことを前提としていることに注意してください インストールに合わせてパスを調整する必要がある場合があります。

サーバーのルートディレクトリで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;
}

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

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

uWSGIを使用したNGINX構成#

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

サーバーのルートディレクトリで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;
}

また、pgAdminは、サーバー上のサブディレクトリこの場合/pgadmin4でホストできます。 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 コマンドラインオプションを提供しています。