
課題
自作サービスであるlytnoteはRender.comを利用してデプロイしている。しかし月額料金がかかっているため、これをなくしたい。Fly.ioはレガシーHobyyプランの状態であるため、月の合計金額が$5までなら無料で利用できる。こちらに移行する。
データのバックアップ
Render.comでデプロイしたアプリケーションのデータのバックアップをとる。こちらのQ&Aが参考になった。
Backup Postgresql database using pg_dump? - Render
This worked for me.
PGPASSWORD=<YOUR_DB_PASS> pg_dump \ -h postgres.render.com \ -U <YOUR_DB_USER> \ --format=custom --no-acl --no-owner \ <YOUR_DB_NAME> > <YOUR_DUMP_NAME>.dump
なるほど。
まずはRender.com にアクセスして、サービスのダッシュボードから「PSQL Command」のコマンドをコピーする。
Render · The Easiest Cloud For All Your Apps

ターミナルでこのコマンドを入力すると、Render.comにデプロイしたアプリのサーバーへアクセスすることができる。ここでさきほどのpg_dump コマンドを実行し、データベースのバックアップファイルをローカルにダウンロードする。
PGPASSWORD=<PASSWORD> pg_dump -h <自分のサーバーのアドレスrender.com> -U <アプリ名> --format=custom --no-acl --no-owner <dbの名前> -f <任意のファイル名.dump>
これでファイルをダウンロードできた。
データの移行
1. 状態の確認
取り出したバックアップデータを今度はfly.ioへデプロイしたアプリへ投入する。
カレントディレクトリをデプロイしたプロジェクトに移動させてから以下のコマンドを打つ。
fly status
$ fly status App Name = <app名> Owner = personal Hostname = <app名>.fly.dev Image = xxxxxx Machines PROCESS ID VERSION REGION STATE ROLE CHECKS LAST UPDATED app xxxxx 2 nrt stopped 2025-08-30T01:29:09Z app yyyyy 2 nrt stopped 2025-08-20T19:57:11Z
2. Machineの起動
Machinesは停止していた。これを起動させておく必要がある。以下のコマンドを打つ。
fly machine start <マシンID> -a <app名>
マシンIDは複数あるがどれを指定しても良い。
再度 fly status コマンドによってステータスを表示させ、Machineがstoppedからstartedになっていることを確認する。
Machines PROCESS ID VERSION REGION STATE ROLE CHECKS LAST UPDATED app xxxxx 2 nrt started 2025-08-30T01:29:09Z app yyyyy 2 nrt stopped 2025-08-20T19:57:11Z
3. 環境変数から接続情報を確認
Fly.ioが動いているコンテナにログインし、サーバー上に保管されている環境変数を確認する。
$ fly ssh console -a <app名> Connecting to xxxx... complete root@xxxx:/rails# echo $DATABASE_URL postgres://<ユーザー名>:<DATABASE_PASSWORD>@<ホスト名>:5432/xxxxxx..
環境変数DATABASE_URLから、DATABASE_PASSWORD やホスト名などを確認できる。
4. プロキシを張る
データベースへバックアップデータを投入するために、ローカルからfly.ioのデータベースへ接続する。そのためにはfly proxy をつかう必要がある。
新しくターミナルウィンドウを開き、以下のコマンドを打つ。
fly proxy 5433:5432 -a <postgres-app-name>
このとき、5433はローカル側のport番号の指定。5432をローカルで使用していないなら以下でも問題ない。
fly proxy 5432 -a <postgres-app-name>
Connect With flyctl · Fly Docs
このターミナルウィンドウはそのままにしておく。
5. データの投入
以下のコマンドを打つ。
PGPASSWORD=<DATABASE_PASSWORD> pg_restore \ -h localhost \ -U <ユーザー名> \ -d <データベース名> \ <ファイル名.dump>
ユーザー名とデータベース名は同じだった。fly.ioの<app名>でできた。ファイル名はターミナルでコマンド打った場所からのパスを入力する。私の場合はDesktop/ファイル名.dump だった。
成功するとSQLの実行ログがぶわぁーっと出る。
おわりに
データの移行は初めてだったがなんとかできた。少しずつ個人開発を頑張っていこう。