🚀

Docker + Fly.ioで爆速デプロイ

2024/08/06に公開

Fly.ioをご存知でしょうか。
Alternative Herokuなどとも呼ばれているホスティングサービスで、「簡単、無料、爆速」でアプリケーションをデプロイできるサービスとして近年注目度が高いPaaSです。

公式のチュートリアルを見ると、サポートしている言語やフレームワークもなかなか幅広い様子。
https://fly.io/docs/languages-and-frameworks/

Dockerを使うとなお早くデプロイできます。
今回はPHP Laravel Sailを使って構築したアプリケーションをFly.ioにデプロイするまでの流れをご紹介しますが、Docker環境なら言語が違っても真似できるかと思います。
今回私めが使う環境はこちら

  • Laravel Sail v8.3
  • PHP v8.3
  • Laravel v11.x
  • MySQL v8.0

前提

※Laravel Sailでのセットアップ済み、ローカルサーバーでの動作確認が済んでいる前提で進めます。
まずローカル環境で自身のアプリケーションが動くことを確認しましょう。

localhost でアクセスするとこのように表示されるはずです。
(※なお、今回Laravel Breezeで最低限の認証機能まで実装しているのでヘッダーにRegisterなど表示がありますが、これは真似しなくてかまいません)


https://fly.io/docs/languages-and-frameworks/dockerfile/

Fly.ioのアカウント登録とプラン選択

まずは公式サイトでアカウントを作成ください。
https://fly.io/dashboard

クレジットカードの登録が求められますが、「Pay As You Go」プランであれば実質無料で利用できます。
月額費用はゼロで下記の内容まで無料で利用できます。個人でのポートフォリオやプロトタイプ開発なら十分でしょう。
(参考:https://fly.io/docs/about/pricing/

  • 最大 3 つの共有 CPU 1x 256 MB VM
  • 3 GB の永続ボリューム ストレージ (合計)
  • データ転送:
  • 北米およびヨーロッパ: 100 GB
  • アジア太平洋、オセアニア、南米: 30 GB
  • アフリカおよびインド: 30 GB

登録後はダッシュボードにアクセスできるようになります。
https://fly.io/dashboard

Fly CLIのインストール

基本的にデプロイなどはCLIで操作するので、まずはFly CLIをインストールします。
(参考:https://fly.io/docs/flyctl/install/

macOS

curl -L https://fly.io/install.sh | sh

またはHomebrewなら

brew install flyctl

Linux

curl -L https://fly.io/install.sh | sh

Windows

Windows

pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"

Windowsの場合、OSや使用しているCLIによってはこれだと動かないかもしれません。
その場合は下記どちらかでいけるはず。

iwr https://fly.io/install.ps1 -useb | iex
powershell -Command "iwr https://fly.io/install.ps1 -useb | iex"

また、インストール後にflyコマンドを入力して The term 'flyctl' is not recognized ... などとエラーが出た場合は、PCの再起動で解決できます。

デプロイ

参考)https://fly.io/docs/languages-and-frameworks/dockerfile/

Fly CLIのインストールが完了したら、デプロイしたいプロジェクトのルートディレクトリで fly launch コマンドを実行してください。するとデプロイに必要な設定が対話形式で開始されます。

0. fly Login

ログイン指定ない状態であれば、まずログインが求められます。

You must be logged in to do this. Would you like to sign in? (y/N)

ここで y を入力→エンターキーを押すと https://fly.io/app/sign-in がブラウザで開くので、ログインを完了させ、CLIに戻ってください。
(また、CLIでのfly.ioへのログインは fly auth login でいつでもできます。)

1. fly lanch

ログイン状態で fly launch を実行すると、設定ファイル fly.toml のほか、デプロイに必要な Dockerfile などのファイルがルートディレクトリに生成されます。(いじらなくてよい)
また下記のようにプロジェクトがもつファイルやディレクトリ名から読み取ってよしなに初期設定を提案してくれます。

Organization: Seito                      (fly launch defaults to the personal org)
Name:         django-test-cold-dust-5879 (generated)
Region:       Tokyo, Japan               (this is the fastest region for you)
App Machines: shared-cpu-1x, 1GB RAM     (most apps need about 1GB of RAM)
Postgres:     <none>                     (not requested)
Redis:        <none>                     (not requested)
Tigris:       <none>                     (not requested)

Do you want to tweak these settings before proceeding? (y/N)
(デプロイを開始する前にこれらの設定を調整しますか?)

Nを選択した場合

ここで N -> エンターキーを押すとこの設定のままデプロイが実行され、ものの数分で完了します。
ログの最後の方に表示されているデプロイ先のURLが確認できるので、これをクリックするとデプロイ先のアプリケーションにアクセスできます。

yを選択した場合

ここで y -> エンターキーを押すと下記のようなWebページが立ち上がり、設定を調整することが可能です。設定後は「Confirm Settings」ボタンをクリックするとデプロイが開始されます。
こだわりがある人はこちらをお試しください。

2. デプロイ後

デプロイ後は https://fly.io/dashboard でアプリケーションの状態を確認できます。緑色の光が灯っていればアプリケーションは成功&起動しています。


通常、このようなPaaSを使ってデプロイする際は環境変数の設定などが必要ですが、これもDockerを使っていれば自動で設定されます。

なお、データを更新したときなどに再デプロイしたい場合は、 fly deploy を実行してください。

そのほかのコマンドについては、 fly --help で一覧を確認できます。

Discussion