Ubuntu 18.04でサーバーモードでpgAdmin 4のインストールと設定方法
はじめに
pgAdminは、PostgreSQLおよび関連するデータベース管理システムのためのオープンソースの管理および開発プラットフォームです。PythonとjQueryで書かれており、PostgreSQLのすべての機能をサポートしています。基本的なSQLクエリの作成からデータベースの監視や高度なデータベースアーキテクチャの設定まで、pgAdminを使用してさまざまなことができます。
このチュートリアルでは、Ubuntu 18.04 サーバーに最新バージョンの pgAdmin をインストール・設定し、ウェブブラウザから pgAdmin にアクセスし、サーバー上の PostgreSQL データベースに接続する手順を説明します。
必要条件 (Hitsuyōjōken)
このチュートリアルを完了するには、次のものが必要です。
- A server running Ubuntu 18.04. This server should have a non-root user with sudo privileges, as well as a firewall configured with ufw. For help with setting this up, follow our Initial Server Setup Guide for Ubuntu 18.04.
- Nginx installed and configured as a reverse proxy for http://unix:/tmp/pgadmin4.sock, following Step 1 and 2 of How To Configure Nginx as a Reverse Proxy on Ubuntu 22.04.
- PostgreSQL installed on your server. You can set this up by following our guide on How To Install and Use PostgreSQL on Ubuntu 18.04. As you follow this guide, be sure to create a new role and database, as you will need both to connect pgAdmin to your PostgreSQL instance.
- Python 3 and venv installed on your server. Follow How To Install Python 3 and Set Up a Programming Environment on an Ubuntu 18.04 server to install these tools and set up a virtual environment.
1. ステップ1 — pgAdminとその依存関係のインストール
この時点では、pgAdminの最新バージョンはpgAdmin 4ですが、公式のUbuntuリポジトリを通じて利用できる最新バージョンはpgAdmin 3です。しかし、pgAdmin 3はもはやサポートされておらず、プロジェクトのメンテナーはpgAdmin 4のインストールを推奨しています。このステップでは、プロジェクトの開発チームが推奨する仮想環境内での最新バージョンのpgAdmin 4のインストールと、その依存関係のaptを使用したインストール手順について説明します。
最初に、最近行っていない場合は、サーバーのパッケージインデックスを更新します。
- sudo apt update
次に、以下の依存関係をインストールしてください。これには、多倍長演算用のライブラリであるlibgmp3-devと、PostgreSQLバックエンドとの通信を支援するためのヘッダーファイルと静的ライブラリを含むlibpq-devが含まれます。
- sudo apt install libgmp3-dev libpq-dev
その後、pgAdminがセッションデータ、ストレージデータ、およびログを保存するためのディレクトリをいくつか作成してください。
- sudo mkdir -p /var/lib/pgadmin4/sessions
- sudo mkdir /var/lib/pgadmin4/storage
- sudo mkdir /var/log/pgadmin4
その後、これらのディレクトリの所有権を非ルートユーザーとグループに変更してください。現在、これらのディレクトリはルートユーザーに所有されているため、非ルートユーザーによって所有される仮想環境からpgAdminをインストールする必要があります。そのためには、インストールプロセス中にこれらのディレクトリ内にいくつかのファイルを作成する必要があります。しかし、インストール後にはwww-dataユーザーとグループに所有権を変更して、ウェブに公開することができるようにします。
- sudo chown -R sammy:sammy /var/lib/pgadmin4
- sudo chown -R sammy:sammy /var/log/pgadmin4
次に、仮想環境を開きます。プログラミング環境があるディレクトリに移動し、それをアクティブにします。前提条件のPython 3チュートリアルの命名規則に従って、環境ディレクトリに移動し、my_env環境をアクティブにします。
- cd environments/
- source my_env/bin/activate
仮想環境を起動した後、システムに最新バージョンのpipがインストールされていることを確認することが賢明です。デフォルトのUbuntu 18.04リポジトリから入手できるpipのバージョンは9.0.1ですが、最新バージョンは21.0.1です。プロジェクトで必要なPythonのインストールチュートリアルで指示されたようにpython3-pipパッケージをインストールした場合でも、最新バージョンにアップグレードしていない場合は、次のステップでpgAdminの設定に問題が発生する可能性があります。
最新バージョンにpipをアップグレードするために、以下のコマンドを実行してください。
- python -m pip install -U pip
この後、pgAdmin 4のソースコードを自分のマシンにダウンロードします。ソースコードの最新バージョンを見つけるには、pgAdmin 4(Python Wheel)のダウンロードページに移動します。最新バージョンのリンク(この執筆時点ではv6.10)をクリックし、次のページでpipと書かれたリンクをクリックします。このファイルブラウザのページから、Pythonの配布パッケージである.whlで終わるファイルリンクをコピーしてください。そして、ターミナルに戻り、次のwgetコマンドを実行します。PostgreSQLサイトからコピーしたリンクで置き換え、.whlファイルをサーバーにダウンロードします。
- wget https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v6.10/pip/pgadmin4-6.10-py3-none-any.whl
次に、ホイールパッケージをインストールしてください。ホイールパッケージは、ホイールパッケージングの標準であるリファレンス実装です。Pythonのライブラリであり、このパッケージはホイールのビルドのための拡張機能と、.whlファイルを操作するためのコマンドラインツールが含まれています。
- python -m pip install wheel
次のコマンドを使用して、pgAdmin 4パッケージをインストールしてください。
- python -m pip install pgadmin4-6.10-py3-none-any.whl
次に、このチュートリアルの後半でNginxと一緒に使用するPythonのWSGIサーバであるGunicornをインストールして、pgadminのWebインターフェースを提供します。
- python -m pip install gunicorn
それで、pgAdminとその依存関係のインストールは完了です。ただし、データベースに接続する前に、プログラムの設定にいくつかの変更が必要です。
ステップ2- pgAdmin 4の設定を行います。
あなたのサーバーにはpgAdminがインストールされていますが、ウェブインターフェースを正しく提供するために必要な権限と設定を持つようにするために、まだいくつかの手順を踏む必要があります。
pgAdminのメインの設定ファイルであるconfig.pyは、他の設定ファイルよりも先に読み込まれます。config.pyの内容は、pgAdminの他の設定ファイルに指定できる追加の設定の参考点として使用できますが、予期せぬエラーを避けるために、config.pyファイル自体を編集しないでください。新しいファイルであるconfig_local.pyにいくつかの設定変更を追加しますが、これは最初のファイルの後に読み込まれます。
今すぐお好きなテキストエディタを使用して、このファイルを作成してください。ここでは、nanoを使用します。
- nano my_env/lib/python3.10/site-packages/pgadmin4/config_local.py
エディターに以下のコンテンツを追加してください。
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'
SERVER_MODE = True
これが5つの指示の役割です。
- LOG_FILE: this defines the file in which pgAdmin’s logs will be stored.
- SQLITE_PATH: pgAdmin stores user-related data in an SQLite database, and this directive points the pgAdmin software to this configuration database. Because this file is located under the persistent directory /var/lib/pgadmin4/, your user data will not be lost after you upgrade.
- SESSION_DB_PATH: specifies which directory will be used to store session data.
- STORAGE_DIR: defines where pgAdmin will store other data, like backups and security certificates.
- SERVER_MODE: setting this directive to True tells pgAdmin to run in Server mode, as opposed to Desktop mode.
Step 1で作成したディレクトリーへのファイルパスが、それぞれのディレクトリーに指し示されていることに注意してください。
これらの行を追加した後、ファイルを保存して閉じます。もしnanoを使用している場合は、CTRLキーとXキーを押してからYキーを押し、最後にENTERキーを押してください。
これらの設定を行ったら、pgAdminのセットアップスクリプトを実行してログイン認証情報を設定してください。
- python my_env/lib/python3.10/site-packages/pgadmin4/setup.py
このコマンドを実行すると、メールアドレスとパスワードの入力を求めるプロンプトが表示されます。後でpgAdminにアクセスする際のログイン資格情報としてこれらが利用されるため、入力内容を忘れないように注意してください。
. . . Enter the email address and password to use for the initial pgAdmin user account: Email address: sammy@example.com Password: Retype password:
それによって、pgAdminは完全に設定されます。ただし、プログラムはまだサーバーから提供されておらず、アクセスできない状態です。この問題を解決するために、GunicornとNginxを設定してpgAdminを提供し、ウェブブラウザを通じてそのユーザーインターフェースにアクセスできるようにします。
ステップ3 — Gunicornの起動とNginxの設定を開始します。
Gunicornを使用してpgAdminをウェブアプリケーションとして提供します。ただし、アプリケーションサーバーであるGunicornはローカルでしか利用できず、インターネットを介してアクセスすることはできません。リモートで利用するには、逆プロキシとしてNginxを使用する必要があります。
Nginxのリバースプロキシとしての設定をする前提条件を満たした後、あなたのNginxの設定ファイルには次のような内容が含まれています。
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain;
location / {
proxy_pass http://unix:/tmp/pgadmin4.sock;
include proxy_params;
}
}
この逆プロキシの設定により、Gunicorn サーバーにローカルブラウザからアクセスできるようになります。pgAdmin アプリケーションとともに Gunicorn サーバーを起動してください。
- gunicorn –bind unix:/tmp/pgadmin4.sock –workers=1 –threads=25 –chdir ~/environments/my_env/lib/python3.10/site-packages/pgadmin4 pgAdmin4:app
[2022-08-29 00:19:11 +0000] [7134] [INFO] Starting gunicorn 20.1.0 [2022-08-29 00:19:11 +0000] [7134] [INFO] Listening at: unix:/tmp/pgadmin4.sock (7134) [2022-08-29 00:19:11 +0000] [7134] [INFO] Using worker: gthread [2022-08-29 00:19:11 +0000] [7135] [INFO] Booting worker with pid: 7135
Note
あなたのNginxリバースプロキシでアクセス可能になったGunicornがアプリケーションサーバーとして機能しているため、WebブラウザでpgAdminにアクセスする準備が整いました。
ステップ4 – pgAdminにアクセスする
ローカルマシンでお好きなウェブブラウザを開き、サーバーのIPアドレスに移動してください。
http://your_server_ip
一度そこに行くと、次のようなログイン画面が表示されます。
ステップ2で定義したログイン情報を入力してください。すると、pgAdminのウェルカム画面に移動します。
pgAdminのインターフェースにアクセスできることを確認したので、あとはpgAdminをPostgreSQLデータベースに接続するだけです。しかし、その前に、PostgreSQLのスーパーユーザーの設定を少し変更する必要があります。
ステップ5 – PostgreSQLユーザーの設定
前提としてPostgreSQLのチュートリアルをフォローした場合、すでに新しいスーパーユーザーとデータベースがセットアップされたサーバーにPostgreSQLがインストールされているはずです。
デフォルトでは、PostgreSQLでは、「認証プロトコル」と呼ばれるメソッドを使用してデータベースユーザーとして認証します。これは、PostgreSQLがクライアントのUbuntuのユーザー名を取得し、許可されているデータベースのユーザー名として使用するものです。これにより、多くの場合にはより高いセキュリティを実現できますが、pgAdminなどの外部プログラムがデータベースに接続する場合に問題が発生することもあります。そのため、このPostgreSQLのロールにパスワードを設定し、pgAdminがデータベースに接続できるようにします。
あなたのターミナルから、スーパーユーザー権限でPostgreSQLプロンプトを開いてください。
- sudo -u sammy psql
PostgreSQLのプロンプトから、ユーザープロフィールを強力なパスワードで更新してください。
- ALTER USER sammy PASSWORD ‘password‘;
その後、PostgreSQLのプロンプトを終了してください。
- \q
次に、ブラウザでpgAdmin 4のインターフェースに戻り、左側にあるブラウザメニューを見つけてください。サーバーを右クリックしてコンテキストメニューを開き、マウスを「作成」の上に置いてから「サーバー…」をクリックしてください。
これにより、ブラウザにポップアップウィンドウが表示され、サーバー、役割、およびデータベースに関する情報を入力することができます。
一つのオプションだけで、以下の文章を日本語に自然に言い換えます:
「Generalタブに、このサーバーの名前を入力してください。何でも構いませんが、説明的な名前にすると役に立つかもしれません。例えば、このサーバーはSammy-server-1と名付けられています。」
次に、接続タブをクリックしてください。”ホスト名/アドレス”の欄にlocalhostを入力します。ポートはデフォルトで5432に設定されていますが、これはPostgreSQLで使用されるデフォルトのポートなので、この設定で問題ありません。
メンテナンスデータベースのフィールドに、接続したいデータベースの名前を入力してください。このデータベースは、サーバー上で既に作成されている必要があります。次に、それぞれユーザー名とパスワードのフィールドに、事前に設定したPostgreSQLのユーザー名とパスワードを入力してください。
他のタブの空白のフィールドはオプションであり、特定の設定に必要な場合にのみ入力する必要があります。保存ボタンをクリックすると、データベースがブラウザメニューのサーバーの下に表示されます。
あなたはpgAdmin4をPostgreSQLデータベースに正常に接続しました。pgAdminのダッシュボードからはPostgreSQLのプロンプトと同様のことがほぼ何でもできます。これを説明するために、ウェブインターフェースを介して例のテーブルを作成し、サンプルデータを追加します。
ステップ6 – pgAdminダッシュボードでテーブルの作成
pgAdminのダッシュボードから、ウィンドウの左側にあるブラウザメニューを見つけてください。それから、Servers(1)の隣にあるプラス記号(+)をクリックしてツリーメニューを展開します。次に、前の手順で追加したサーバーの左側にあるプラス記号をクリックし、追加したデータベースの名前(例えば、sammy)とSchemas(1)を展開します。以下のようなツリーメニューが表示されるはずです。
テーブルのリスト項目を右クリックし、カーソルを「作成」に合わせてクリックしてください。
これによって、作成テーブルのウィンドウが開きます。このウィンドウの一般タブには、テーブルの名前を入力します。これには任意の名前を使用できますが、わかりやすくするためにtable-01と呼びます。
次に、Columnsタブに移動し、ウィンドウの右上隅にある+マークをクリックして、いくつかの列を追加してください。列を追加する際には、名前とデータ型を入力する必要があります。また、選択したデータ型によっては、長さを指定する必要があるかもしれません。
さらに、公式のPostgreSQLドキュメントによれば、テーブルに主キーを追加することは通常のベストプラクティスです。主キーは、テーブル内の行に特別な識別子として使用できる特定の列または列のセットを示す制約です。これは必須ではありませんが、1つ以上の列を主キーとして設定したい場合は、右端のスイッチを「No」から「Yes」に切り替えてください。
テーブルを作成するには、保存ボタンをクリックしてください。
この時点では、テーブルを作成し、いくつかの列を追加しました。ただし、まだ列にはデータが含まれていません。新しいテーブルにデータを追加するには、ブラウザメニューでテーブルの名前を右クリックし、カーソルを「スクリプト」に合わせ、INSERTスクリプトをクリックします。
これにより、ダッシュボードに新しいパネルが開かれます。一番上には、適切なテーブル名と列名を含む部分的に完成したINSERT文が表示されます。ダミーデータを使って「?」の部分を置き換え、追加するデータが各列の選択したデータ型と一致するようにしてください。また、以下の例のように、コンマで区切られた新しい括弧セットごとに各行を追加することで、複数の行のデータを追加することもできます。
もしよければ、この部分的に入力されたINSERTスクリプトを、以下の例のINSERT文で置き換えても問題ありません。
INSERT INTO public."table-01"(
col1, col2, col3)
VALUES ('Juneau', 14, 337), ('Bismark', 90, 2334), ('Lansing', 51, 556);
挿入文を実行するために、横向きの三角形アイコン(▶)をクリックしてください。なお、古いバージョンのpgAdminでは、実行アイコンは代わりに稲妻のボルト(⚡)です。
ブラウザメニューで表の名前を右クリックし、View/Edit Dataの上にカーソルを移動させ、All Rowsを選択することで、表とその中のすべてのデータを表示することができます。
これによって、新しいパネルが開かれます。そのパネルの下には、下のパネルのデータ出力タブで、そのテーブル内に保持されているすべてのデータを表示することができます。
それによって、pgAdminのウェブインターフェースを介して、テーブルを作成し、一部のデータを入力することができました。もちろん、これはpgAdminを使用してテーブルを作成するための一つの方法です。例えば、この手順で説明されているGUIベースの方法ではなく、SQLを使用してテーブルを作成し、データを入力することも可能です。
結論
このガイドでは、Pythonの仮想環境からpgAdmin 4をインストールし、設定し、GunicornとNginxでウェブ上に提供する方法、そしてPostgreSQLデータベースに接続する方法を学びました。さらに、このガイドでは、テーブルの作成とデータの追加に使用することができる方法を紹介しましたが、pgAdminは単にテーブルの作成や編集だけでなく、さまざまな用途にも利用できます。
pgAdminのすべての機能を最大限に活用する方法については、プロジェクトのドキュメントをご覧ください。また、PostgreSQLについては、当社のコミュニティチュートリアルでも詳しく学ぶことができます。