Ubuntu 22.04にPostgreSQLをインストール:ゼロから本番デプロイまで

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

なぜExcelやMySQLではなく、PostgreSQLが不可欠な選択肢なのか?

データのサイズが1GBを超えたり、レコード数が数百万件に達したりすると、Excelはフリーズし始めます。その時こそ、真のリレーショナルデータベース管理システム(DBMS)が必要になります。PostgreSQLは単なる老舗の名前ではありません。適切にチューニングすれば、毎秒1万件以上のトランザクションを処理できるパフォーマンスの「怪物」です。

MySQLとPostgreSQLのどちらを選ぶべきか迷う方も多いでしょう。小数点以下の精度が求められるFintechプロジェクトをデプロイしてきた経験から、私はPostgreSQLを選びます。ACID準拠がより厳格であり、非常に高速なJSONBデータ型のサポート、さらには多様な言語での複雑な関数(functions)の記述が可能です。アプリケーションを長期的に拡張する予定があるなら、最初からPostgreSQLを選ぶことに躊躇は不要です。

私はこれまでUbuntu Server上で50以上のデータベースクラスターを直接構築してきました。ここでは、安定したシステムを運用するための最も効率的な手順を紹介します。

Ubuntu 22.04へのPostgreSQLインストール手順

Ubuntu 22.04では、公式リポジトリでデフォルトのPostgreSQL 14が提供されています。apt経由でインストールすることで、OSから自動的にセキュリティパッチを受け取ることができます。

ステップ1:パッケージリストの更新

このステップを忘れないでください。キャッシュを更新することで、古いバージョンの誤ったダウンロードを防ぐことができます。

sudo apt update

ステップ2:PostgreSQLと重要な拡張機能のインストール

postgresql-contribパッケージは非常に重要です。これには、コアバージョンには含まれていない曖昧文字列検索(fuzzy string matching)やデータ暗号化などの機能が含まれています。

sudo apt install postgresql postgresql-contrib -y

インストール後、サービスは自動的に有効化されます。サーバーが予期せず再起動しても、PostgreSQLは自動的に再起動するので安心です。

プロジェクト用のロールとデータベースの設定

PostgreSQLは「ロール(Roles)」という概念で権限を管理します。これはユーザーに似ていますが、より柔軟です。よくある間違いは、アプリケーションのコードにpostgresアカウントを使用することです。これはセキュリティ上、非常に大きなリスクとなります。

PostgreSQLターミナルを開く

まず、最高権限を持つシステムユーザーpostgresに切り替えます:

sudo -i -u postgres
psql

この時、プロンプトがpostgres=#に変わります。これでデータベースへのコマンド入力準備が整いました。

アプリケーション専用ユーザーの作成

在庫管理アプリを構築していると仮定しましょう。管理や将来のバックアップを容易にするために、専用のユーザーとデータベースを作成します。

CREATE ROLE app_user WITH LOGIN PASSWORD 'SuperStrongPassword2024';
CREATE DATABASE inventory_db OWNER app_user;

\qと入力して終了します。これで、アプリケーションに安全な「専用の環境」ができました。

安全なリモートアクセス(Remote Access)の設定

デフォルトでは、PostgreSQLはlocalhostからの接続のみを待ち受けます。個人のPCからTablePlusやDBeaverを使用してデータを確認したい場合は、アクセスを許可する必要があります。

1. アドレス設定ファイルの編集

nanoエディタでメイン設定ファイルを開きます:

sudo nano /etc/postgresql/14/main/postgresql.conf

listen_addressesの行を探します。外部からの接続を許可するために、localhostから'*'に変更します:

listen_addresses = '*'

2. pg_hba.confでのアクセス権限付与

これは第2のセキュリティ層です。どのIPがサーバーにアクセスできるかを定義する必要があります。

sudo nano /etc/postgresql/14/main/pg_hba.conf

ファイルの末尾に以下の行を追加します。セキュリティを万全にする場合は、0.0.0.0/0を自身の固定IPに置き換えてください:

host    all             all             0.0.0.0/0               md5

3. 変更の適用

.confファイルのすべての変更は、システムに新しいパラメータを読み込ませるために再起動が必要です:

sudo systemctl restart postgresql

クイックチェックと最適化のコツ

データベースが稼働しているからといって、正常であるとは限りません。以下のクイックチェックコマンドを覚えておきましょう。

サービスステータスの確認

sudo systemctl status postgresql

鮮やかな緑色のactive (running)が表示されれば、99%成功です。

ポート5432の確認

ファイアウォールがPostgreSQLのデフォルトポートをブロックしていないか確認します:

ss -nlt | grep 5432

エンジニアの皆さんへのアドバイス: すべてのクエリをログに記録するモード(スロークエリログ)を有効にしていると、/var/log/postgresql/にあるログディレクトリが1ヶ月で数GBのディスク容量を消費することがあります。サーバーが容量不足で停止するのを防ぐために、df -hコマンドで定期的に空き容量を確認しましょう。わずか10分の設定で、プロジェクトのための業界標準のデータベース基盤が整いました!

Share: