🐘
Rasberry Pi5にPostgre SQLの環境を構築
Raspberry PiにPostgreSQLをインストールし、外部PCから接続して書き込みを行うための手順をまとめたガイドです。
1. システム更新とPostgreSQLインストール
# パッケージリストとシステムを最新化
sudo apt update
sudo apt upgrade -y
# PostgreSQLと関連ツールをインストール
sudo apt install postgresql postgresql-contrib -y
# サービスの稼働確認 (任意)
# active (exited)やactive (running)と表示されていれば稼働中
sudo systemctl status postgresql
2. データベースと専用ユーザーの作成
セキュリティのため、外部接続用の専用ユーザーとデータベースを作成します。
# postgresユーザーでpsqlにログイン
sudo -u postgres psql
psqlのプロンプト(postgres=#)で以下を実行します。
-- 1. 新しいユーザーを作成 (パスワードは強力なものに変更)
CREATE ROLE myuser WITH LOGIN PASSWORD 'your_strong_password';
-- 2. 新しいデータベースを作成
CREATE DATABASE mydb;
-- 3. データベースの全権限を作成したユーザーに付与
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
-- 4. psqlを終了
\q
3. 外部接続の許可設定
PostgreSQLが外部からの接続を受け付けるように設定ファイルを変更します。
3.1. postgresql.conf の編集
どのIPアドレスからの接続を待ち受けるかを設定します。
# エディタでファイルを開く (パスのXXはバージョンに合わせて変更)
sudo nano /etc/postgresql/XX/main/postgresql.conf
Ctrl+Wでファイル内のlisten_addressesを探し、以下のように変更します。
# 変更前
#listen_addresses = 'localhost'
# 変更後 (コメントを外し、値を '*' にする)
listen_addresses = '*'
3.2. pg_hba.conf の編集
どのユーザーがどのIPから接続できるかを設定します。
# エディタでファイルを開く (パスのXXはバージョンに合わせて変更)
sudo nano /etc/postgresql/XX/main/pg_hba.conf
ファイルの末尾に、以下の行を追記します。
# TYPE DATABASE USER ADDRESS METHOD
# 任意のリモートIPからmyuserがmydbへパスワード認証で接続することを許可
host mydb myuser 0.0.0.0/0 md5
注意: 0.0.0.0/0は全てのIPを許可します。セキュリティを高めるには、接続元IPを192.168.1.0/24のように限定してください。
3.3. PostgreSQLの再起動
設定を反映させるためにサービスを再起動します。
sudo systemctl restart postgresql
4. ポート開放の確認とファイアウォール設定
4.1. ポートの待ち受け状態を確認
5432番ポートが0.0.0.0で待ち受け状態になっているか確認します。
sudo ss -lntp | grep 5432
OKな例: LISTEN ... 0.0.0.0:5432 ... と表示される。
NGな例: LISTEN ... 127.0.0.1:5432 ... や何も表示されない場合。
4.2. ファイアウォール(ufw)の設定
ufwが有効な場合のみ、以下のコマンドでポートを開放します。
(ufw: command not foundと表示された場合は、この手順は不要です)
# ufwが有効か確認
sudo ufw status
# ufwが有効(active)な場合、ポート5432を許可
sudo ufw allow 5432/tcp
sudo ufw reload
5. テーブルへの書き込み権限付与
特定のテーブル(例: mytable)にmyuserが書き込みできるように権限を付与します。
# postgresユーザーで対象のデータベースに接続
sudo -u postgres psql -d mydb
psqlのプロンプト(mydb=#)で以下を実行します。
-- mytableにSELECT, INSERT, UPDATE, DELETE権限を付与
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE mytable TO myuser;
-- (参考) 権限の確認
\dp mytable
-- psqlを終了
\q
6. 外部PCからの接続
GUIツール(DBeaver, pgAdminなど)やコマンドラインから以下の情報で接続します。
-
ホスト (Host): Raspberry PiのIPアドレス (
hostname -Iで確認) -
ポート (Port):
5432 -
データベース (Database):
mydb -
ユーザー (Username):
myuser - パスワード (Password): 手順2で設定したパスワード
Discussion