ローカルから Heroku Postgres に接続する際は SSL 通信にする
拙作の Neo's Hatebu は Node.js 製。Heroku 上にデプロイしており、pg
パッケージと sequelize
を使って Heroku Postgres と接続している。
このアプリをローカルで開発する際、ローカルサーバから Heroku Postgres の DB に接続したかったのだが、エラーが出たので対処法を調べた。
エラーの内容は次のような感じ。
error: no pg_hba.conf entry for host "00.000.000.00", user "username", database "databasename", SSL off
no pg_hba.conf
というのがよく分からないが、なんとなく最後の SSL off
が気になって調べたらビンゴ。
sequelize
を使う前に、pg
パッケージを読み込んで SSL を有効にすると良い。
// ↓ 以下を追加する
require('pg').defaults.ssl = true;
const Sequelize = require('sequelize');
const sequelize = new Sequelize('postgres://...');
また、Postgres との接続文字列の最後に sslmode=require
を付与するというのも、公式にガイドがあった。コレだけでは解決しなかったのだが、一応。
// 実際は Postgres への接続文字列は環境変数で注入すると思うが、以下のような感じで `sslmode=require` を追加してやる
const sequelize = new Sequelize('postgres://【Host】:5432?sslmode=require');
一番重要なのは pg
で SSL を true
にしてやることでした。