DjangoをVPSにデプロイする2〜パッケージ編〜の続きです。
この記事では、VPSでPostgreSQLの設定をしていきます。
PostgreSQLにデータベースとユーザーを作成しますが、この名前やパスワードはローカルで作成したものと同一にしておくと事を管理が楽です。
最終環境
- ubuntu 24.0.4
- PostgreSQL 14
- Nginx 1.22.1
- Gunicorn
- 独自ドメイン
- SSL化
- メール設定
SSH接続
ターミナルでVPSにSSH接続します。
$ ssh COMAND_NAME
postgresの確認
PostgreSQLをインストールすると、ubuntuに「postgres」というユーザー、PostgreSQLに「postgres」というロールが作成されます。
ubuntuのpostgresユーザーが存在するか確認してみましょう。
$ cat /etc/passwd | grep postgres
以下のように表示されればOK!
postgres:x:113:123:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
パスワード設定
生まれたばかりのpostgresには、パスワードが無いのでログインできません。
パスワードを設定してあげます。
$ sudo passwd postgres
PostgreSQLにログイン
postgresユーザーに切り替えます。
USERNAME@xxx.xxx.xxx.xxx:~$ su - postgres
名前がpostgresになれば切り替えられています。
postgres@xxx.xxx.xxx.xxx:~$
PostgreSQLにログインします。
postgres@xxx.xxx.xxx.xxx:~$ psql
補足ですが、通常のユーザーでログインする時は次のようにデータベース名を指定します。
USERNAME@xxx.xxx.xxx.xxx:~$ psql -d database_name
ロールを作成
ロールというとグループのように感じるかもしれませんが、PostgreSQLのユーザーと考えて下さい。
データベースのロールは、ubuntuで作ったシステムユーザーとは別物ですが、データベースのロール名とシステムユーザー名を一致させておくと便利です。
今回はスーパーユーザーの権限を与えています。
「rool_name」と「password」を自身のものに変えて下さい。最後の「;」を忘れないように。
postgres=# CREATE ROLE rool_name WITH SUPERUSER LOGIN PASSWORD 'password';
ロール一覧を表示
ロールが作成できているか確認します。
postgres=# \du
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
rool_name | Superuser | {}
「Attributes」に属性(できること)が表示されています。
少し話は逸れますが、ロールの権限を「継承」することでグループように扱うこともできます。
データベースの作成
ローカルで作成したデータベース名と同じだと楽です。
database_nameというデータベースを作成し、オーナーをrool_nameとしています。
postgres=# CREATE DATABASE database_name OWNER rool_name;
PostgreSQLから出ます。バックスラッシュは「¥」で入力できます。
postgres=# \q
通常のユーザーに戻します。
postgres@xxx.xxx.xxx.xxx:~$ exit
USERNAME@xxx.xxx.xxx.xxx:~$
接続設定
ローカルのパソコンからデータベースにアクセスできるように設定します。
接続設定のファイルは2つあり「postgresql.conf」と「pg_hba.conf」で設定します。
どちらも「/etc/postgresql/14/main」の中にあります。
postgresql.confの設定
$ sudo vi /etc/postgresql/14/main/postgresql.conf
コメントアウトを解除し「*」に修正します。
- #listen_addresses = ‘localhost’
+ listen_addresses = ‘*’
pg_hba.confの設定
$ sudo vi /etc/postgresql/14/main/pg_hba.conf
- Database administrative login by Unix domain socket
postgresから「all」に変更、peerから「scram-sha-256」に変更 - IPv4 local connections
「0.0.0.0/0」の行を追加
# Database administrative login by Unix domain socket
- local all postgres peer
+ local all all scram-sha-256
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
+ host all all 0.0.0.0/0 scram-sha-256
「scram-sha-256」は「md5」より安全な接続方法だそうです。
「0.0.0.0/0」は全てのIPから、データベースへの接続を許可しています。
個人の場合は問題ないと思いますが、法人等でセキュリティーを高めたい場合はデータベース、ユーザー、IPを指定した方が良いかもしれません。
詳しく知りたい方は、電算星組さんのページが分かりやすいです。
再起動
PostgreSQLを再起動します。
$ sudo /etc/init.d/postgresql restart
状態確認
PostgreSQLのステータスを確認します。
$ sudo /etc/init.d/postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2022-11-09 18:22:10 JST; 3 days ago
Main PID: 1051 (code=exited, status=0/SUCCESS)
CPU: 943us
11月 09 18:22:10 x162-43-6-128 systemd[1]: Starting PostgreSQL RDBMS...
11月 09 18:22:10 x162-43-6-128 systemd[1]: Finished PostgreSQL RDBMS.
Activeが「active (exited)」となっていれば正常に起動しています。
コマンドまとめ
起動
$ sudo /etc/init.d/postgresql start
停止
$ sudo /etc/init.d/postgresql stop
再起動
$ sudo /etc/init.d/postgresql restart
ステータス
$ sudo /etc/init.d/postgresql status
これでPostgreSQL編は終了です!
次は「DjangoをVPSにデプロイする4〜Nginx編〜」です。