Dockerではなく、Fly.ioでPostgresを構築し、ローカル開発に活用するため
0. Dockerで構築しないの?
めちゃめちゃいろんなサービスを構築していてdocker-compose.ymlのコピペすら面倒になってきた人向けの横着記事です。
Fly.ioでPostgresを構築し、ローカル開発に活用するため
Fly.ioは、手軽にアプリケーションやデータベースをグローバルにデプロイできるクラウドプラットフォームです。この記事では、Fly.io上でPostgresデータベースを構築し、ローカル開発環境から接続することで、効率的かつスピーディに開発を進める手順を紹介します。
1. Fly.ioにPostgresをデプロイする
まず、Fly.ioにPostgresアプリをデプロイします。以下のコマンドで、Fly.ioにPostgresクラスタを作成します。
flyctl postgres create
このコマンドを実行すると、Postgresのインスタンスが作成され、接続情報が出力されます。出力される内容には、接続に必要なユーザー名、パスワード、ホスト名、ポート番号が含まれています。これを後で使用するので、メモしておきます。
2. パブリックIPアドレスの割り当て
ローカル環境からFly.io上のPostgresに接続するには、パブリックIPアドレスを割り当てる必要があります。
-
現在のIPアドレスの確認
まず、PostgresアプリにパブリックIPアドレスが割り当てられているか確認します。fly ips list --app <pg-app-name>
-
IPアドレスの割り当て
パブリックIPが割り当てられていない場合、以下のコマンドでIPv4アドレスを割り当てます。fly ips allocate-v4 --app <pg-app-name>
3. 外部サービスの設定
次に、Postgresの接続設定を構成します。
-
Fly.ioの設定ファイルを取得
以下のコマンドで設定ファイル(fly.toml)をダウンロードします。fly config save --app <pg-app-name>
-
サービス設定を追加
fly.toml
ファイルを開き、Postgresのポートマッピングを追加します。以下の設定をファイル内に記述してください。[[services]] internal_port = 5432 # Postgresのデフォルトポート protocol = "tcp" [[services.ports]] handlers = ["pg_tls"] port = 5432
4. 新しい設定でのデプロイ
設定が完了したら、Fly.io上にデプロイします。
-
現在のPostgresバージョンを確認
fly image show --app <pg-app-name>
-
アプリケーションをデプロイ
確認したPostgresのバージョンに合わせて、以下のコマンドでデプロイします。たとえば、Postgres 14.xを使用している場合、以下のように実行します。
fly deploy . --app <pg-app-name> --image flyio/postgres:14
-
サービス設定の確認
デプロイ後、サービス設定が正しく反映されているか確認します。
fly services list
5. ローカル開発環境からPostgresに接続する
Fly.io上のPostgresにローカルから接続するため、接続文字列を修正します。
-
接続情報の確認
fly pg create
で表示された接続文字列は以下の形式です。postgres://{username}:{password}@{hostname}:{port}/{database}?options
-
ホスト名の変更
デフォルトでは内部ホスト名が使用されますが、外部接続するために以下のようにホスト名を変更します。<pg-app-name>.fly.dev
これで、ローカルからFly.ioのPostgresにアクセス可能です。
6. 接続確認
最後に、ローカルのPostgresクライアント(psqlやGUIツール)から接続してみましょう。
psql postgres://{username}:{password}@<pg-app-name>.fly.dev:5432/{database}
これで、Fly.io上のPostgresにローカルから接続できるはずです。
7. create database
postgres> CREATE DATABASE storybook
WITH ENCODING 'UTF8'
LC_COLLATE 'ja_JP.UTF-8'
LC_CTYPE 'ja_JP.UTF-8'
TEMPLATE template0;
postgres> ALTER DATABASE mydb SET timezone TO 'Asia/Tokyo';
終わりに
Fly.io上にPostgresを構築し、ローカル環境から参照することで、インフラを意識せずに爆速で開発を進めることが可能です。この手順を参考にして、あなたの開発ワークフローをさらに効率化しましょう!
Discussion