PostgreSQL 導入¶
対象 VM: finance-manager(192.168.40.212 / debian)
関連: インフラ / テーブル定義
役割¶
finance-manager は次を PostgreSQL に永続化する。
- 支出イベント(金額、店名、カテゴリなど)
- 生データ(Discord メッセージ、メール本文、通知 raw)
- Grafana が読む集計の元データ
要件どおり PostgreSQL を使う。 同じ VM に同居させて始め、後で分離してもよい。
用語¶
| 用語 | 意味 |
|---|---|
| PostgreSQL(サーバ) | DB エンジン本体(postgresql パッケージ) |
| データベース | データの入れ物。今回は finance_manager |
| ロール(ユーザー) | 接続、権限の単位。アプリ用と読み取り専用を分ける |
psql |
対話型クライアント |
| peer / scram-sha-256 | 認証方式。OS ユーザー一致 or パスワード |
0. 初期パスワードを変える¶
初期パスワードを変える
cloud-init の初期パスワードは changeme なので、変更する。
1. パッケージ更新と locale¶
sudo apt-get update
sudo apt-get install -y locales
sudo sed -i 's/^# *en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
sudo locale-gen
sudo update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
再ログイン後、locale 警告が消えるか確認する。
2. PostgreSQL のインストール¶
sudo apt-get install -y postgresql postgresql-contrib
sudo systemctl enable --now postgresql
sudo systemctl status postgresql --no-pager
postgresql… サーバpostgresql-contrib… 拡張パッケージsystemctl enable --now… 今すぐ起動し、再起動後も自動起動する
3. バージョンと接続確認¶
Debian の初期スーパーユーザー相当は、OS ユーザー postgres に置く。
sudo -u postgres は postgres ユーザーとして実行する、という意味である。
4. アプリ用 DB / ユーザー作成¶
パスワードは強いものに変える。
sudo -u postgres psql <<'SQL'
CREATE USER finance_app WITH PASSWORD 'CHANGE_ME_STRONG_PASSWORD';
CREATE DATABASE finance_manager OWNER finance_app;
GRANT ALL PRIVILEGES ON DATABASE finance_manager TO finance_app;
\c finance_manager
GRANT ALL ON SCHEMA public TO finance_app;
ALTER DATABASE finance_manager SET timezone TO 'Asia/Tokyo';
SQL
- USER:ログインできるロール
- DATABASE:入れ物。OWNER にアプリユーザーを付ける
- SCHEMA public:テーブルを置く名前空間。PostgreSQL 15+ では明示 GRANT が必要なことが多い
- timezone:日時を日本時間前提で扱いやすくする
5. パスワード接続の確認¶
localhost からアプリユーザーで入れるか確認する。
psql "postgresql://finance_app:CHANGE_ME_STRONG_PASSWORD@127.0.0.1:5432/finance_manager" -c '\conninfo'
成功すれば、アプリの DATABASE_URL と同じ形になる。
6. Grafana 用読み取りユーザー¶
LAN 公開、データソース、パネル SQL は Grafana を参照する。
可視化に進む段階で実施する。 Bot だけなら今はスキップできる。
CREATE USER finance_readonly WITH PASSWORD 'CHANGE_ME_READONLY_PASSWORD';
GRANT CONNECT ON DATABASE finance_manager TO finance_readonly;
GRANT USAGE ON SCHEMA public TO finance_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO finance_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO finance_readonly;
7. 接続を LAN に開けるか¶
MVP の Bot は同じ VM 内から 127.0.0.1 で足りる。
Grafana(例: 192.168.40.220)から読む段階で、postgresql.conf の listen_addresses と pg_hba.conf を調整する。
手順の本体は Grafana。
5432 をインターネットに出さない
インターネット向けに 5432 をポート開放しない。 LAN 内の Grafana IP だけ許可するのが基本である。
確認¶
systemctl is-active postgresqlがactivefinance_appでfinance_managerに接続できる- パスワードは VM 上の env(例:
/etc/finance-manager.env)にだけ置く。Git には入れない