Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8873

LinuxサーバーにPostgreSQL導入~外部サーバー接続まで

$
0
0
今回の流れ ➀PostgreSQLの導入 ➁ローカルアプリ接続(Node.js) ➂外部サーバーアプリ接続(Node.js) ➀PostgreSQLの導入 サーバーはさくらのVPSのCentOS8です。 まずは下記からOSに応じたリポジトリURLを取得します。 https://yum.postgresql.org/repopackages/ 今回はCentOS 8 - x86_64のリンクをコピーします。 続いてサーバーにインストールしていきます。 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo dnf -qy module disable postgresql sudo dnf install -y postgresql13-server 上から順に、リポジトリの追加、デフォルトのPostgreSQLモジュール停止、PostgreSQLのインストールになります。 なお、オプションについては、q:メッセージ出力しない、y:すべてyes なので、あってもなくてもいいです。 これで自動的にpostgresユーザができたと思うので、suして環境変数をチェックします。 私の環境では「PGDATA=/var/lib/pgsql/13/data」となっていました。 sudo su - postgres env | grep PGDATA 続いて、初期データベースの作成 export PGSETUP_INITDB_OPTIONS="--encoding=UTF8 --locale=ja_JP.UTF-8 --lc-collate=ja_JP.UTF-8 --lc-ctype=ja_JP.UTF-8" /usr/pgsql-13/bin/postgresql-13-setup initdb データベースの起動 --nowをつけることで、enableとstartが同時にできます。 systemctl enable postgresql-13 --now postgresユーザでDBに接続、データベース作成、ロール作成 psql create database first_db create role test login password 'test'; いったん抜けて、testユーザで接続しようと試みます。 psql -U test -d first_db psql: error: FATAL: Peer authentication failed for user "test" エラーになってしまいました。 なんでもPostgreSQLはPeer認証というものにデフォルトでなっていて、Linuxのユーザ名とPostgreSQLのユーザ名が同じじゃないといけないそうです。 不便なので、そこを変えていきます。 /var/lib/pgsql/13/data/pg_hba.confをいじっていきます。 pg_hba.conf_bk local all all peer ↓ pg_hba.conf local all postgres peer local all all md5 peerをmd5に変えています。 これでパスワード認証になります。 ただ、postgresユーザはデフォルトではパスワードが設定されておらず、パスワード認証にすると使えなくなってしまうので、peer認証のままにしてあります。 パスワード設定すればいいんですけどね これでPostgreSQL再起動して、再度testユーザで接続 sudo systemctl restart postgresql-13 psql -U test -d first_db パスワードを聞かれるので、設定した"test"を入力して確認OK これでひとまずPostgreSQL導入完了とします! ➁ローカルアプリ接続(Node.js) 続いてNode.jsで作成したアプリからDBへの接続を試みます。 新しくディレクトリ作って、npm初期化して、pgモジュールをインストールします。 mkdir db_connect cd $_ npm init -y npm install pg 適当なファイル作ります。 index.js const pg = require('pg'); // 接続先文字列 const connectionString = 'postgres://test:test@localhost:5432/first_db'; console.log(`開始 : ${connectionString}`); const pool = new pg.Pool({ connectionString: connectionString }); pool.query('SELECT * FROM user') .then(result => { // 結果データの表示 if (result.rows) { result.rows.forEach((row) => { console.log(row); }); } }) .catch(err => { console.log('err: ', err); }) .then(() => { console.log('切断'); pool.end(); }); この辺はこちらの方の記事を参考に、というかほぼ丸パクリです。 「pg」パッケージを使ってローカルの PostgreSQL や Heroku Postgres に接続する これを実行して結果が返ってきたのでOKとします。 $ node index.js 開始 : postgres://test:test@localhost:5432/first_db { user: 'test' } 切断 ➂外部サーバーアプリ接続(Node.js) 最後に手元のローカルマシン(Windows)からLinux上のPostgreSQLに接続してみます。 Node.jsのファイルは➁で使ったものを流用してください。 ただし、接続先文字列だけ変更します。 postgres://test:test@[接続先サーバのアドレス]:5432/first_db これを実行しただけだと接続エラーになってしまいます。 PostgreSQLはデフォルトではlocalhostからしか接続を受け付けていません。 ですので、この辺の設定をいじっていきます。 まず、リッスン先を*(すべて)にして、ポート5432を許可します。 /var/lib/pgsql/13/data/postgresql.conf_bk #listen_addresses = 'localhost' #port = 5432 ↓ /var/lib/pgsql/13/data/postgresql.conf listen_addresses = '*' port = 5432 続いて、pg_hba.confに下記の1行を追加 /var/lib/pgsql/13/data/pg_hba.conf host first_db test [接続元アドレス]/32 md5 これでPostgreSQL再起動 sudo systemctl restart postgresql-13 あとはファイアーウォールなどで5432ポートを開放します。 さくらのVPSはブラウザからパケットフィルタリングの設定が変更できるので、そこから5432ポートを開放しました。 これで手元のマシンからnode index.jsとすると、接続に成功して結果が取得できました!

Viewing all articles
Browse latest Browse all 8873

Trending Articles