前提
- Fly.ioのページについては、2024年5月26日時点の構成で説明しています。
- 検証環境
- MacBook Pro(Intel)
- macOS Sonoma 14.5
- Dell Latitude 3420
- Ubuntu 22.04.4 LTS
- MacBook Pro(Intel)
Fly.ioのページにアクセスし、画面上部メニューのから「Docs」をクリックします。
画面左側のメニューから「Getting started」をクリックします。
「Getting started」のページを参照すると、「Launch on Fly.io」、「Hands-on」の順に進めるようなので、まずは「Launch on Fly.io」をクリックします。
「Launch on Fly.io」のページは、画面左側のメニューからも遷移できるようになっています。
「Launch on Fly.io」のページを参照すると、まず、flyctlコマンドを実行環境にインストールし、Fly.ioのアカウント作成(またはログイン)を行い、アプリケーションの作成と構築、そして、デプロイという手順で進めるようです。
flyctlコマンドをインストールするため、「Install flyctl」をクリックします。
「Install flyctl」のページは、画面左側のメニューからも遷移できるようになっています。
「Install flyctl」のページには各環境ごとにインストール手順が記述されていますので、お手元の環境に合わせて実行します。
Mac環境
flyctl
コマンドをインストールします。
% brew install flyctl
flyctl
コマンドのバージョンを確認します。
% flyctl version
flyctl v0.2.55 darwin/amd64 Commit: 0a7df8d78123d5809167cdaa11a78dec92a87e47 BuildDate: 2024-05-16T17:23:50Z
Ubuntu環境
flyctl
コマンドをインストールします。
$ curl -L https://fly.io/install.sh | sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1735 0 1735 0 0 7517 0 --:--:-- --:--:-- --:--:-- 7543
######################################################################## 100.0%
set update channel to shell
flyctl was installed successfully to /home/akase244/.fly/bin/flyctl
Manually add the directory to your $HOME/.bash_profile (or similar)
export FLYCTL_INSTALL="/home/akase244/.fly"
export PATH="$FLYCTL_INSTALL/bin:$PATH"
Run '/home/akase244/.fly/bin/flyctl --help' to get started
以下の2行を .bash_profile
(または準ずるファイル)に追記します。
$ tail -2 ~/.bashrc
export FLYCTL_INSTALL="/home/akase244/.fly"
export PATH="$FLYCTL_INSTALL/bin:$PATH"
flyctl
コマンドのバージョンを確認します。
$ flyctl version
flyctl v0.2.59 linux/amd64 Commit: 76e31c66ca2982cb2e919f5bc34bb521451690a2 BuildDate: 2024-05-24T23:13:23Z
画面左側のメニューから「Sign up / Sign in」をクリックします。
Fly.ioのアカウント登録はメールアドレス、Googleアカウント、GitHubアカウントのいずれかを選択できるようです。
fly auth signup
コマンドを実行すると、以下のような表示になり、ブラウザが起動して「Sign up」画面が表示されます。
Opening
https://fly.io/app/auth/cli/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...
Waiting for session...⣯
すべての入力が終えたら、「Create My Account」ボタンをクリックします。
ターミナル上の表示が以下のように切り替わります。
% fly auth signup
Opening
https://fly.io/app/auth/cli/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...
Waiting for session... Done
successfully logged in as ログインアカウント
ブラウザ側もアカウント登録が成功した旨の表示に切り替わります。
メールアカウントによるアカウント登録を行った場合は、この時点で「Activate your Fly.io account」という件名でメールが届いているので認証処理を行います。
※Googleアカウント、GitHubアカウントの場合も同様の流れになるかは検証していません。
先程は、 fly auth signup
の流れでログインまで完了したので、今度は fly auth login
でログインしてみます。
アカウント登録時に利用していたターミナルを継続して利用する場合は、一旦ログアウトを行います。
% fly auth logout
fly auth login
コマンドを実行すると、以下のような表示になり、ブラウザが起動して「Sign in」画面が表示されます。
% fly auth login
Opening https://fly.io/app/auth/cli/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...
Waiting for session...⣷
入力を終えたら、「Sign In」ボタンをクリックします。
ターミナル上の表示が以下のように切り替わります。
% fly auth login
Opening https://fly.io/app/auth/cli/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...
Waiting for session... Done
successfully logged in as ログインアカウント
ブラウザ側もログインが成功した旨の表示に切り替わります。
画面左側のメニューから「Launch app」をクリックします。
デモ用に準備されたDockerイメージを利用してアプリを作成します。
デフォルト設定のままでよいので「y」と入力しエンターを押下します。
% fly launch --image flyio/hellofly:latest
Using image flyio/hellofly:latest
Creating app in /Users/akase244/repo/akase244_hellofly
We're about to launch your app on Fly.io. Here's what you're getting:
Organization: akase244 (fly launch defaults to the personal org)
Name: akase244-hellofly (derived from your directory name)
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)
Sentry: false (not requested)
? Do you want to tweak these settings before proceeding? (y/N) y
以下の表示に切り替わり、ブラウザが起動します。
? Do you want to tweak these settings before proceeding? Yes
Opening https://fly.io/cli/launch/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...
Waiting for launch data...⣻
アプリ名を入力し、必要なスペックを選択します。
この画面が表示されたらブラウザは閉じて構いません。
ターミナルの表示がこのように切り替わるので「y」と入力しエンターを押下します。
Waiting for launch data... Done
Warning: This organization has no payment method, turning off high availability
Created app 'akase244-hellofly' in organization 'personal'
Admin URL: https://fly.io/apps/akase244-hellofly
Hostname: akase244-hellofly.fly.dev
? Create .dockerignore from 4 .gitignore files? (y/N) y
クレジットカード登録が未完了なため、以下のようにエラーが発生します。
? Create .dockerignore from 4 .gitignore files? Yes
Created /Users/akase244/repo/.dockerignore from 4 .gitignore files.
Wrote config file fly.toml
Validating /Users/akase244/repo/fly.toml
✓ Configuration is valid
==> Building image
Searching for image 'flyio/hellofly:latest' remotely...
image found: img_XXXXXXXXXXXXXXXX
Watch your deployment at https://fly.io/apps/akase244-hellofly/monitoring
Provisioning ips for akase244-hellofly
Dedicated ipv6: XXXX:XXXX:X::XX:XXXX:X
Shared ipv4: XXX.XXX.XXX.XXX
Add a dedicated ipv4 with: fly ips allocate-v4
Error: input:3: createRelease We need your payment information to continue! Add a credit card or buy credit: https://fly.io/dashboard/akase244/billing
ブラウザでFly.ioのッシュボード画面に遷移します。
画面左側のメニューから「Billing」をクリックします。
「Account Status」に「Requires a credit card」と表示されていますので、「Add credit card」をクリックします。
今回は「Hobby Plan」を申し込むので、そのまま「Continue」をクリックします。
クレジットカード情報の入力が完了すると「Billing」画面が以下のような表示に変わります。
アプリ作成をやり直すためにダッシュボードから「akase244-hellofly」を選択します。
画面左側のメニューから「Settings」をクリックします。
「Delete app」をクリックします。
アプリ名を入力して、「Yes, delete it」をクリックします。
アプリ作成をはじめからやり直すために、ローカル環境の fly.toml
を削除します。
※こちらを利用して前回の続きからやる方法もありますが、今回は一旦削除して最初からやり直します。
fly launch
を改めて実行し、前回と同じ手順でアプリの作成を行います。
% fly launch --image flyio/hellofly:latest
Using image flyio/hellofly:latest
Creating app in /Users/akase244/repo/akase244_hellofly
We're about to launch your app on Fly.io. Here's what you're getting:
Organization: akase244 (fly launch defaults to the personal org)
Name: akase244-hellofly (derived from your directory name)
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)
Sentry: false (not requested)
? Do you want to tweak these settings before proceeding? Yes
Opening https://fly.io/cli/launch/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ...
Waiting for launch data... Done
Created app 'akase244-hellofly' in organization 'personal'
Admin URL: https://fly.io/apps/akase244-hellofly
Hostname: akase244-hellofly.fly.dev
Wrote config file fly.toml
Validating /Users/akase244/repo/akase244_hellofly/fly.toml
✓ Configuration is valid
==> Building image
Searching for image 'flyio/hellofly:latest' remotely...
image found: img_XXXXXXXXXXXXXXXX
Watch your deployment at https://fly.io/apps/akase244-hellofly/monitoring
Provisioning ips for akase244-hellofly
Dedicated ipv6: XXXX:XXXX:X::XX:XXXX:X
Shared ipv4: XXX.XXX.XXX.XXX
Add a dedicated ipv4 with: fly ips allocate-v4
This deployment will:
* create 2 "app" machines
No machines in group app, launching a new machine
Creating a second machine to increase service availability
Finished launching new machines
-------
NOTE: The machines for [app] have services with 'auto_stop_machines = true' that will be stopped when idling
-------
Checking DNS configuration for akase244-hellofly.fly.dev
Visit your newly deployed app at https://akase244-hellofly.fly.dev/
実行結果の最後に表示されているURL https://akase244-hellofly.fly.dev/ にブラウザでアクセスすると、以下のように表示されました。
fly.toml
の internal_port
の値を修正します。
% diff fly.toml fly.toml.orig
13c13
< internal_port = 8888
---
> internal_port = 8080
内部ポートの値を修正した状態で fly deploy
コマンドを実行してデプロイを行ってみます。
% fly deploy
==> Verifying app config
Validating /Users/akase244/repo/akase244_hellofly/fly.toml
✓ Configuration is valid
--> Verified app config
==> Building image
Searching for image 'flyio/hellofly:latest' remotely...
image found: img_XXXXXXXXXXXXXXXX
Watch your deployment at https://fly.io/apps/akase244-hellofly/monitoring
-------
Updating existing machines in 'akase244-hellofly' with rolling strategy
WARNING The app is not listening on the expected address and will not be reachable by fly-proxy.g that XXXXXXXXXXXXXX [app] is up and running
You can fix this by configuring your app to listen on the following addresses:
- 0.0.0.0:8888
Found these processes inside the machine with open listening sockets:
PROCESS | ADDRESSES
-----------------*----------------------------------------
/goapp/app | [::]:8080
/.fly/hallpass | [XXXX:X:XXXX:XXX:XXXX:XXXX:XXXX:X]:22
-------
✔ [1/2] Machine XXXXXXXXXXXXXX [app] update succeeded
✔ [2/2] Machine XXXXXXXXXXXXXX [app] update succeeded
-------
Checking DNS configuration for akase244-hellofly.fly.dev
Visit your newly deployed app at https://akase244-hellofly.fly.dev/
デプロイ自体は成功したようですが、Fly.ioの内部ポートは「8080」で固定のようなので、 internal_port
の値を元に戻して、再度デプロイを行いました。
% fly deploy
==> Verifying app config
Validating /Users/akase244/repo/akase244_hellofly/fly.toml
✓ Configuration is valid
--> Verified app config
==> Building image
Searching for image 'flyio/hellofly:latest' remotely...
image found: img_XXXXXXXXXXXXXXXX
Watch your deployment at https://fly.io/apps/akase244-hellofly/monitoring
-------
Updating existing machines in 'akase244-hellofly' with rolling strategy
-------
✔ [1/2] Machine XXXXXXXXXXXXXX [app] update succeeded
✔ [2/2] Machine XXXXXXXXXXXXXX [app] update succeeded
-------
Checking DNS configuration for akase244-hellofly.fly.dev
Visit your newly deployed app at https://akase244-hellofly.fly.dev/
一通り操作感が確認できたので、最後にアプリを削除して今回のデプロイ練習を終わりとします。