😃

Dockerではなく、Fly.ioでPostgresを構築し、ローカル開発に活用するため

2024/09/30に公開

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アドレスを割り当てる必要があります。

  1. 現在のIPアドレスの確認
    まず、PostgresアプリにパブリックIPアドレスが割り当てられているか確認します。

    fly ips list --app <pg-app-name>
    
  2. IPアドレスの割り当て
    パブリックIPが割り当てられていない場合、以下のコマンドでIPv4アドレスを割り当てます。

    fly ips allocate-v4 --app <pg-app-name>
    

3. 外部サービスの設定

次に、Postgresの接続設定を構成します。

  1. Fly.ioの設定ファイルを取得
    以下のコマンドで設定ファイル(fly.toml)をダウンロードします。

    fly config save --app <pg-app-name>
    
  2. サービス設定を追加
    fly.tomlファイルを開き、Postgresのポートマッピングを追加します。以下の設定をファイル内に記述してください。

    [[services]]
      internal_port = 5432   # Postgresのデフォルトポート
      protocol = "tcp"
    
      [[services.ports]]
        handlers = ["pg_tls"]
        port = 5432
    

4. 新しい設定でのデプロイ

設定が完了したら、Fly.io上にデプロイします。

  1. 現在のPostgresバージョンを確認

    fly image show --app <pg-app-name>
    
  2. アプリケーションをデプロイ

    確認したPostgresのバージョンに合わせて、以下のコマンドでデプロイします。たとえば、Postgres 14.xを使用している場合、以下のように実行します。

    fly deploy . --app <pg-app-name> --image flyio/postgres:14
    
  3. サービス設定の確認

    デプロイ後、サービス設定が正しく反映されているか確認します。

    fly services list
    

5. ローカル開発環境からPostgresに接続する

Fly.io上のPostgresにローカルから接続するため、接続文字列を修正します。

  1. 接続情報の確認
    fly pg createで表示された接続文字列は以下の形式です。

    postgres://{username}:{password}@{hostname}:{port}/{database}?options
    
  2. ホスト名の変更
    デフォルトでは内部ホスト名が使用されますが、外部接続するために以下のようにホスト名を変更します。

    <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