DELOGs
[サーバ構築編#5] Ubuntu初期設定-アプライアンスDB(PostgreSQL 13)との接続設定

サーバ構築編#5
Ubuntu初期設定-アプライアンスDB(PostgreSQL 13)との接続設定

Webサーバのイーサネット設定を行いローカルスイッチとアプライアンスDBのPostgreSQL 13へのアクセスを可能に

初回公開日

最終更新日

サーバ構築編第5回ではWebサーバとローカルスイッチと接続してローカルネットワーク上のDBへアクセスできるようします。
サーバ構築編第3回までで作成、設定した下記の内容を利用しますので、事前に用意してください。
  • 秘密鍵ファイルとパスフレーズ
  • WebサーバのグローバルIP、ローカルIP
  • 管理ユーザとパスワード
  • sshのポート番号
  • DBのローカルIP、デフォルトユーザ、デフォルトユーザのパスワード

1.ローカルスイッチとの接続

まずはSSHでサーバへ接続
bash
1ssh -p [ポート番号] -i "~/filename.pem" username@xxx.xxx.xxx.xxx
-pでポートを指定、xxxx.xxxx.xxx.xxxはサーバのグローバルIPです。

インターフェースの状態を確認

とりあえず、現状を確認します。
bash
1ip link show
一部を伏せた状態でお見せるとこのような状態です。
bash
11: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 2 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 32: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 4 link/ether **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff 5 altname enp0s3 6 altname ens3 73: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 8 link/ether **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff 9 altname enp0s4 10 altname ens4
eth1の行を見ると「state DOWN」にいます。ここがローカルネットワークで利用されるインターフェイスになります。 ちなみにloはループバック用のインターフェイスで、eth0はインターネット用のインターフェイスになります。

インターフェースの設定を編集

再起動後も設定を維持したいので netplan の設定を変更していきます。 /etc/netplan/01-netcfg.yamlが該当ファイルです。環境によって、ファイル名が異なる場合がありますので/etc/netplan/ディレクトリを参照してください。
bash
1sudo vi /etc/netplan/01-netcfg.yaml
初期状態ではeth0の設定があるだけと思います。 ここにeth1についての設定を追記していきます。eth0の設定も一部修正します。
修正前の状態
bash : 01-netcfg.yaml
1network: 2 ethernets: 3 eth0: 4 addresses: 5 - xxx.xxx.xxx.xxx/24 6 dhcp4: 'no' 7 dhcp6: 'no' 8 gateway4: xxx.xxx.xxx.xxx 9 nameservers: 10 addresses: 11 - xxx.xxx.xxx.xxx 12 - xxx.xxx.xxx.xxx 13 search: 14 - localdomain 15 renderer: networkd 16 version: 2
修正後
diff : 01-netcfg.yaml
1network: 2 ethernets: 3 eth0: 4 addresses: 5 - xxx.xxx.xxx.xxx/24 6 dhcp4: 'no' 7 dhcp6: 'no' 8- gateway4: xxx.xxx.xxx.xxx #デフォルトゲートウェイの書き方修正 9+ routes: #デフォルトゲートウェイの書き方修正 10+ - to: default #デフォルトゲートウェイの書き方修正 11+ via: xxx.xxx.xxx.xxx #デフォルトゲートウェイの書き方修正 12 nameservers: 13 addresses: 14 - xxx.xxx.xxx.xxx 15 - xxx.xxx.xxx.xxx 16 search: 17 - localdomain 18+ eth1: # <- 追記:インターフェイス名 19+ dhcp4: no # <- 追記:固定IPなのでDHCPは使わない 20+ addresses: # <- 追記 21+ - 192.168.x.x/24 # <- 追記:ローカルネットワーク用の固定IP 22+ optional: true # <- 追記:別途説明 23 renderer: networkd 24 version: 2
gateway4という書き方のままだと、この設定を適用させた時に、下記のようなwarningが出ます。
bash
1** (generate:6414): WARNING **: **:**:**:**: `gateway4` has been deprecated, use default routes instead. 2See the 'Default routes' section of the documentation for more details.
gateway4 は非推奨になっており、新しい方法(default routes)を使え という警告。 動作はする可能性が高いが、今後のUbuntuのバージョンアップでエラーになる可能性がありそうなので、対応しておきます。
○optional: true の意味
通常、netplan は設定したすべてのネットワークインターフェース (eth0, eth1 など) を 起動時に必ず検出しようとします。 もし eth1 が接続されていない場合(ケーブルが抜けている・デバイスが存在しないなど)、起動時に待機したり、エラーで止まったりすることがあります。 これを防ぐために optional: true を設定すると、
  • そのインターフェースがなくても起動時にエラーにならない
  • ネットワークが完全に初期化されるのを待たずにブートが進む(起動が速くなることもある)
eth0の方はdhcp4: 'no'とシングルクォートで括っていますが、追記した部分はシングルクォートで括っていませんが、同じ意味にはなります。一応、元々の記述されていた内容はいじりたくないのでそのままにしていますが、YAML では、ブール値(true/false)や数値は、クオートなしで書くのが原則というので、それにしたがっています。

インターフェース設定ファイルのパーミッションを変更

/etc/netplan/01-netcfg.yamlのデフォルトのパーミッションは644です。このまま適用するとwarningが出ます。それを回避するため、パーミッションを600に変更します。
bash
1sudo chmod 600 /etc/netplan/01-netcfg.yaml

インターフェースの設定を反映

下記のコマンドで設定を反映させます。
bash
1sudo netplan apply
eth1 が有効になったか確認します。
bash
1ip a show eth1
bash
13: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP ・・
state UPになったことが確認できます。 これで、ローカルスイッチへの接続が可能な状態になります。

2.postgresql-client-13 のインストール

私の環境は「さくらのクラウド」のアプライアンスDBで「PostgreSQL 13」を利用しています。 アプライアンスDBへの接続は、SQLコマンドでしかできません。 なので、SQLコマンドを実行できるツール(psql) をインストールします。

psql クライアントのインストール

postgresql-client-13は PostgreSQL 13 用のクライアントのみをインストールするパッケージです。Webサーバ側では DBサーバを持たず、アプライアンスDBに接続するだけなので、PostgreSQL の本体は不要です。
Ubuntu 24.04 (noble) の標準リポジトリでは、postgresql-client-16が提供されており(2025年5月27日現在)、古い PostgreSQL 13 に対応したクライアント (postgresql-client-13) は含まれていません。

標準リポジトリでどのバージョンのpostgresql-clientインストールされるのか調べる方法

bash
1apt update 2apt-cache policy postgresql-client
bash
1postgresql-client: 2 インストールされているバージョン: (なし) 3 候補: 16+257build1.1 4 バージョンテーブル: 5 16+257build1.1 500 6 500 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages 7 16+257build1 500 8 500 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages
PostgreSQL 13に対応するクライアントツールは、PostgreSQL の公式リポジトリ (pgdg) を追加する必要があります。

PostgreSQL公式リポジトリのGPGキーをバイナリ形式で保存

PostgreSQL の公式リポジトリ (pgdg) を追加するために、GPGキー(デジタル署名)を登録 します。
GPGキーとは? apt は、追加したリポジトリが本物であることを検証するために GPGキーを使います。 公式の pgdg リポジトリのパッケージが改ざんされていないことを確認するため、GPGキーを事前に登録する必要があります。
Ubuntu 24.04 では GPGキーの保存形式が変更された! 従来の apt-key は非推奨になり、**バイナリ形式 (.gpg) で保存しないと NO_PUBKEY エラーが発生するため、以下の方法で登録します。
bash
1sudo mkdir -p /etc/apt/keyrings 2curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/keyrings/postgresql.gpg

リポジトリ設定を追加

公式リポジトリ (pgdg) を /etc/apt/sources.list.d/ に追加します。
Ubuntu 24.04 (noble) では noble-pgdg に postgresql-client-13 が提供されていることを確認済みなので、以下の設定でインストール可能 です。
bash
1echo "deb [signed-by=/etc/apt/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt noble-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list > /dev/null

パッケージリストを更新

リポジトリを追加したら、パッケージリストを更新します。
bash
1sudo apt update

postgresql-client-13 のインストール

最後に postgresql-client-13 をインストールします。
bash
1sudo apt install -y postgresql-client-13
インストール完了後、バージョンを確認します。
bash
1psql --version 2pg_dump --version
psql (PostgreSQL) 13.x のように表示されれば成功です!

3.アプライアンスDBへの接続

SQLコマンドで接続

bash
1psql -h <DBのIPアドレス> -p <ポート番号> -U <ユーザー名> -d <データベース名>
「さくらのクラウド」のアプライアンスDBの場合、管理画面の[アプライアンス]-[データベース]-[作成したデータベース名]-[詳細]の「コマンド例」に接続コマンドがありますのでそれを利用してください。
DB接続コマンド
例)
bash
1psql -h 192.168.x.x -p 5432 -U myuser -d mydatabase

/etc/hostsの設定

前段のようにIPアドレスで接続するのも良いのですが、今後の設定も含めて/etc/hostsで任意の名称でDB接続できるようにしておくと運用のとある段階でIPアドレスが変更になった時に、一箇所だけ変更すればいいと状態になります。方法は下記のように簡単です。
bash
1sudo vi /etc/hosts 2 3192.168.xx.xx db-master.local 4192.168.xx.xx db-read.local
192.168.xx.xxはDBのローカルIPです。将来のマスター&スレーブ構成のために変更しやすく上記のように記述しました。 /etc/hostsファイルは即時反映されますので、記載するとすぐに利用可能です。
注意
[サーバ構築編#10]でPostfixのインストールと設定を行なっています。ここでわかったのですが、Postfixを運用する際に/etc/hostsの設定をそのまま利用できると思っていましたが、Postfixは/var/spool/postfix/etc/hostsを参照するようです。なので、Postfixをインストール後に/etc/hostsを編集した際は、忘れないようにsudo cp /etc/hosts /var/spool/postfix/etc/hostsを実行するようにしないといけないです。
下記のようにしてDBアクセスできるようになると思います。
例)
bash
1psql -h db-master.local -p 5432 -U myuser -d mydatabase

クライアントツールで接続

ローカルPCからクライアントツールで接続する場合は、「SSHトンネル」で接続可能なツールを利用してください。 私は「DBeaver」を利用しています。
DBeaver
「DBeaver」はmacOSで利用できる無料ツールで、とても便利です。 上図のように接続設定時に「SSH」タブにSSH接続情報を入力して、「一般タブ」でDBへの接続情報を入力すればDB接続できます。 「SSH」タブにSSH接続情報のときに、Authentication MethodのところをPublic Keyにすると秘密鍵ファイルを設定できるようになります。

SSHトンネルで接続

ローカルPCで開発する時にアプライアンスDBに接続する場合は、SSHトンネルをターミナルで実行して、作業したい場面もあると思います。 私の環境ですと、Next.jsで開発して、PrismaクライアントでDB接続して開発しています。
その場合は、
zsh
1ssh -L 5433:192.168.x.x:5432 -N -f -i ~/.ssh/your_private_key -p 2222 user@your.server.com 2 3# /etc/hosts の設定をした場合 4ssh -L 5433:db-master.local:5432 -N -f -i ~/.ssh/your_private_key -p 2222 user@your.server.com
  • -L 5433:192.168.x.x:5432 → ローカルの5433ポートをリモートの5432に転送(192.168.x.xはDBのローカルIP)
  • -N → コマンド実行せずポートフォワードのみ
  • -f → SSHをバックグラウンドで実行
  • -i ~/.ssh/your_private_key → SSHキーを指定(必要に応じて)
  • -p 2222 → SSHポートの指定(必要に応じて)
上記のコマンド実行後に、下記でローカルからSSHトンネルできているから確認
zsh
1netstat -an | grep 5433 2 3#下記のように5433でリッスンできていればOK 4 5tcp4 0 0 127.0.0.1.5433 *.* LISTEN 6tcp6 0 0 ::1.5433 *.* LISTEN
ssh接続後にprismaなら.envファイルにDATABASE_URL="postgresql://your_db_user:your_db_password@127.0.0.1:5433/your_database_name"とする。 これで、DBアプライアンスに接続して、開発を進めたりnpm run devで動作確認できます。
以上で、アプライアンスDBへの接続は完了です。
続きはこちら...
前回の確認はこちら...
この記事の執筆・編集担当
DE

松本 孝太郎

DELOGs編集部/中年新米プログラマー

ここ数年はReact&MUIのフロントエンドエンジニアって感じでしたが、Next.jsを学んで少しずつできることが広がりつつあります。その実践記録をできるだけ共有していければと思っています。