−25%

Windows 年払い、10月31日まで。 プランを見る

EQVPS

VPS に PostgreSQL をインストールして安全に接続する方法

Ubuntu に PostgreSQL 16 を入れ、データベースとユーザーを作成し、5432 番をインターネットに公開せずにリモート接続。SSH トンネルか許可リストで接続します。

PostgreSQL のインストールはコマンド一つです。多くの人がつまずくのはリモートアクセスで、5432 番を世界に開け、パスワードを設定し、なぜログがログイン試行だらけなのかと首をかしげます。このガイドでは Ubuntu 24.04 に Postgres をインストールし、データベースを作成し、外部から接続する安全な方法を 2 つ紹介します。

1. インストール

apt update && apt install -y postgresql
systemctl status postgresql --no-pager

Ubuntu 24.04 では PostgreSQL 16 です。既定では localhost でのみ待ち受けます。理由がない限りそのままにしておきましょう。

2. ユーザーとデータベースを作成する

sudo -u postgres psql <<'SQL'
CREATE USER app WITH PASSWORD 'use-a-long-random-password';
CREATE DATABASE appdb OWNER app;
SQL

同じサーバー上のアプリは postgresql://app:PASSWORD@localhost:5432/appdb で接続します。

3. ノート PC から接続する:SSH トンネル(推奨)

開けるものも、サーバーで設定するものもありません。トンネルがローカルポートを SSH 経由で転送します。

ssh -N -L 5433:localhost:5432 root@203.0.113.10

NAT プランでは、パネルに表示される個人用 SSH ポートを追加します。

ssh -N -p 20123 -L 5433:localhost:5432 root@your-nat-host

トンネルが開いている間は、データベースクライアントを localhost:5433 に向けてください。SSH がすべてを暗号化し、5432 番はインターネットに対して閉じたままです。DBeaver や pgAdmin などの GUI ツールには、同じことをする「SSH トンネル」タブがあります。

4. 別のサーバーからの直接アクセス(許可リスト)

別の場所にあるアプリケーションサーバーが直接接続する必要があるなら、その IP だけを許可します。この場合、データベースサーバーは専用 IP 付きのプランである必要があります。NAT プランは SSH 以外の受信接続を受け付けないからです。

/etc/postgresql/16/main/postgresql.conf に次を設定します。

listen_addresses = '*'

/etc/postgresql/16/main/pg_hba.conf の末尾に追加します。

hostssl  appdb  app  198.51.100.20/32  scram-sha-256

そのアドレスだけにファイアウォールを開け、再起動します。

ufw allow from 198.51.100.20 to any port 5432 proto tcp
systemctl restart postgresql

hostssl は暗号化された接続を必須にします。Ubuntu のパッケージには自己署名証明書が付属しているので、クライアントは sslmode=require で接続してください。

5. 最初の妥当な設定

RAM 2 GB のサーバーなら、postgresql.conf で次のようにします。

shared_buffers = 512MB
effective_cache_size = 1536MB
work_mem = 8MB

変更後に再起動します。ほとんどの小さなアプリにはこれで十分で、実際のクエリを見てから調整しましょう。

6. バックアップ

毎晩ダンプを取り、1 週間保持します。

mkdir -p /var/backups/pg && chown postgres /var/backups/pg
cat > /etc/cron.d/pg-backup <<'EOF'
30 3 * * * postgres pg_dump -Fc appdb > /var/backups/pg/appdb-$(date +\%u).dump
EOF

-Fc は圧縮されたダンプを作り、pg_restore で復元します。ダンプはサーバーの外にもコピーしてください。Managed Backups がマシン全体の日次復元ポイントを追加します。

関連

よくある質問

5432 番ポートをインターネットに開けるべきですか?

開けないほうがよいです。公開されたデータベースポートは絶えずスキャンされ、総当たり攻撃を受けます。SSH トンネルで接続するか、アプリケーションサーバーが直接接続する必要があるなら、pg_hba.conf とファイアウォールの両方でその IP だけを許可してください。

NAT プランで PostgreSQL を使えますか?

使えます。同じサーバー上のアプリはローカルで接続し、あなたはノート PC から個人用 SSH ポートを通した SSH トンネルでデータベースに到達します。NAT プランにできないのは、別のサーバーから 5432 番への直接の受信接続を受け付けることです。

PostgreSQL に必要な RAM は?

数百メガバイトで動作し、与えたぶんはすべてキャッシュに使います。よくある出発点は shared_buffers を RAM の約 25% にすることです。小さなアプリのデータベースなら、サーバーの RAM は 2 GB で十分すぎるほどです。

データベースのバックアップはどうしますか?

pg_dump をカスタム形式('pg_dump -Fc')で使い、cron から実行します。サーバーの外にもコピーを保管してください。Managed Backups がサーバー全体の日次復元ポイントを追加します。

どのバージョンの PostgreSQL が入りますか?

Ubuntu 24.04 には PostgreSQL 16、Debian 12 には 15 が含まれています。より新しいメジャーバージョンが必要なら、PostgreSQL 公式の apt リポジトリ(apt.postgresql.org)を追加してください。

コメント

まだコメントはありません。最初になりましょう。

コメントを残す

コメントは表示される前にモデレートされます。