🐘
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が外部からの接続を受け付けるように設定ファイルを変更します。
postgresql.conf
の編集
3.1. どのIPアドレスからの接続を待ち受けるかを設定します。
# エディタでファイルを開く (パスのXXはバージョンに合わせて変更)
sudo nano /etc/postgresql/XX/main/postgresql.conf
Ctrl+W
でファイル内のlisten_addresses
を探し、以下のように変更します。
# 変更前
#listen_addresses = 'localhost'
# 変更後 (コメントを外し、値を '*' にする)
listen_addresses = '*'
pg_hba.conf
の編集
3.2. どのユーザーがどの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