さくらvpsにRailsアプリをデプロイするまで (2) PostgreSQLの設定


0. データベースをやっていく

 データベースをやっていかないといけない。わたしのRailsアプリのDBはPostgreSQLでやっており、さくらvpsでほんとうにできるかわからない。さくらvps公式で紹介されているのはMariaDBというやつだった。

 いろんなひとが記録を残しているので、たぶんできるだろう。ちょっとやっていく。

1. PostgreSQLをインストール

公式に良いページがあった。プルダウンでインストールしたいやつを選ぶと、したにコマンドリストがでてくる。
バージョン:11、プラットフォーム:CentOS7 、アーキテクチャはx86_64とした。

# sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# sudo yum install -y postgresql11-server
# sudo /usr/pgsql-11/bin/postgresql-11-setup initdb
# sudo systemctl enable postgresql-11
# sudo systemctl start postgresql-11

できた。ちゃんとバージョンも出てくる。

# psql --version

>psql (PostgreSQL) 11.15

2. アカウント設定

ここからいきなりデータベースを作成しようとしたが以下のエラーが出た。

# createdb database_lytnote
createdb: could not connect to database template1: FATAL:  role "root" does not exist

ちょっと調べた。

これは、管理者がそのユーザ用のPostgreSQLユーザアカウントを作成していない時に起こります (PostgreSQLユーザアカウントは、オペレーティングシステムのユーザアカウントとは異なります)。 管理者であれば、アカウントの作成方法に関して第20章を参照してください。

なるほど。

実はPostgreSQLユーザーアカウントはすでにあり、「postgres」という名前らしい。パスワードは未設定なので、まずは設定する。

rootユーザーで操作。

# sudo passwd postgres

これができたらpostgresにユーザーを切り替える。

# su - postgres

この状態でデータベースをつくってみよう。

-bash-4.2$  createdb mydatabase 

データベース一覧でデータがあればOK

-bash-4.2$  psql -l

    Name    |  Owner   | Encoding  | Collate | Ctype |   Access privileges   
------------+----------+-----------+---------+-------+-----------------------
 mydatabase | postgres | SQL_ASCII | C       | C     | 
 postgres   | postgres | SQL_ASCII | C       | C     | 
 template0  | postgres | SQL_ASCII | C       | C     | =c/postgres          +
            |          |           |         |       | postgres=CTc/postgres
 template1  | postgres | SQL_ASCII | C       | C     | =c/postgres          +
            |          |           |         |       | postgres=CTc/postgres
(5 rows)

3. 外部からの接続設定

ドキュメントによると、postgreSQLはデフォルトでlocalhostからの接続しか許可をしていない。このままではリモートの接続はできないので設定を変更する。

 postgresql.conf を編集する。場所はpostgresでログインした時に、

11/data/postgresql.conf にある。

11はバージョン番号なので、人によっては異なるかもしれない。

ユーザー名 postgres で作業する。

-bash-4.2$ vi 11/data/postgresql.conf
(中略)
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*' # 追加
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all

listen_addresses = '*'を追加する。設定ファイルが長いので/localhostなどと打って検索をかけよう。次へ検索はnを打てばいい。

4. クライアント認証の設定

 pg_hba.confという設定ファイルを編集し、クライアント認証を追加させる。

postgresユーザーになってからファイルを編集する。

# su - postgres
-bash-4.2$ vi 11/data/pg_hba.conf
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
host    all             all             0.0.0.0/0               md5 

設定の値は以下のページを参考にした。
https://qiita.com/haruto167/items/05d0d65f243dd01a9ab4

5. ファイアウォールの設定

現状でどこまで必要かはわからないが、設定をしておく。さくらvpsにわかりやすいページがある。

サーバーOSがCentOS7の場合はファイアウォールの設定コマンドとしてfirewalldを用いる。

まずは現状のファイアウォール設定を確認する。rootユーザーで操作する。

# firewall-cmd --get-active-zones

これでFirewallD is not runningと表示されたら以下のコマンドでファイアウォールを有効にする。

# systemctl start firewalld
# systemctl enable firewalld

ファイアウォールにpostgresの通信を許可するように設定する。

# firewall-cmd --add-service=postgresql --permanent

できたか状態をみてみる。

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dhcpv6-client postgresql ssh
  ports: 
  protocols: 

...

services: に postgresql が追加されていれば問題ない。

6. おわりに

 まだまだ先が見えないがすこしずつ記録していこう。