導入
先日突然発表されたHeroku無料枠終了のお知らせ。
私も含め、影響を受けた方は多いのではないでしょうか。
私の場合、Herokuにポートフォリオを無料で置いていたため、無料枠が終了するのは非常に困ります。
代わりとなるサービスを調べていると、fly.ioというサービスには無料枠があり、SSL化も無料でできるという情報を得ました。
そこで今回の記事では、無料枠が終了するHerokuから、代替サービスのfly.ioに移行する方法を紹介します。
fly.ioとは
fly.ioとは、静的サイトからRailsやLaravel、Node.jsなどのWebアプリ、PostgreSQLデータベースまでフルスタックなアプリをデプロイできるHerokuのようなプラットフォームです。
米シカゴを本社とする2017年創業のスタートアップ企業が運営しています。
料金
料金は、仮想マシン、データベース、ネットワークで料金体系が異なります。
- 仮想マシンの場合は、CPUとRAMのスペック
- データベースの場合は、データ量($0.15/GB)
- ネットワークの場合は、追加するIPアドレス数とSSL証明書の数、送信データ量
で決まります。
無料枠は豊富で、小規模なアプリであれば十分無料枠で収まります。
クレジットカードを登録しない場合はアプリ1つまで、登録するとアプリ3つまでが目安です。
無料枠で使えるのは以下の通りです。(クレジットカードを登録した場合)
仮想マシン | 共有CPU1つ・RAM256MBのマシンが最大3つ |
データベース | 合計3GBまで |
IPアドレス | エニーキャストIPv4アドレス1つと無制限のエニーキャストIPv6アドレス |
SSL証明書 | 最大10個まで |
データ転送量 | アウトバウンドは合計160GBまで・インバウンドは無制限 |
なかなか太っ腹だと思います。
詳細な料金については、公式サイトを 参照してください。
Herokuからfly.ioに移行するメリット・デメリット
fly.ioは基本的にはHerokuに似ているサービスなので、Herokuからは違和感なく置き換えることができます。
メリット
Herokuの後発のサービスということもあり、Herokuに比べてメリットは大きいです。
十分な無料枠がありPostgreSQLが使え、サイトのSSL化も自動でしてくれるなどメリットが多いです。
- Herokuで廃止予定の無料枠がある(目安はアプリ3つまで)
- データベースはPostgreSQLでHerokuからの移行が簡単
- データベースがインターネットに公開されていないので安心(Herokuの場合は公開されているのでSSL接続が必要)
- 無料でSSLが使える(https化可能)
- 無料プランで一定時間操作しなくてもスリープしない
- 日本リージョンが存在する
デメリット
デメリットもありますが、そこまで大きくないと思います。
CLIはHerokuに近いので、Heroku CLIを使い慣れている方であれば、問題なく利用できると思います。
- CLIでのみデプロイできる
- 環境変数などの設定もCLIでのみ設定・削除可能
スポンサードリンク
Herokuからfly.ioに移行する方法
それでは本題のHerokuからfly.ioに移行する方法を紹介します。
移行するアプリ
今回は、以前に自分のポートフォリオ用に作ったExpress製のアプリを移行します。
フレームワークにExpress、テンプレートエンジンにPug、デー タベースにPostgreSQLを使った基本的なWebアプリです。
アプリの使用技術の詳細は以下の通りです。
バックエンド
- Node.js
- Express
データベース
- PostgreSQL
- Sequelize
テスト
- Jest
フロントエンド
- jQuery
- Bootstrap
- Pug(テンプレートエンジン)
具体的な手順
それでは、Herokuにデプロイしたことのあるアプリをfly.ioに移行する方法を紹介します。
fly.ioはGUIではデプロイができないため、CLIでデプロイする必要があります。
今回はUbuntu20.04(WSL2)上で行っています。
それでは順に紹介していきます。
flyctlのインストール
まずターミナルを開き、以下のコマンドを入力して、CLIツールであるflyctlをインストールします。
curl -L https://fly.io/install.sh | sh
参考までに、Windowsとmacの場合も紹介します。
Windowsの場合
Windowsの場合、WSL2をインストールし、WSL2上のUbuntuで上記のコマンドを実行するほうが良いと思いますが、Windows本体に直接インストールすることもできます。
本体に直接インストールする場合、PowerShell上で以下のコマンドを入力します。
iwr https://fly.io/install.ps1 -useb | iex
macの場合
ターミナル上で以下のコマンドを入力します。
Homebrewがインストールされている場合
brew install flyctl
Homebrewがインストールされていない場合
curl -L https://fly.io/install.sh | sh
.bash_profileに環境変数を設定
flyctlをインストールすると、以下のようなメッセージが出てくると思います。
Manually add the directory to your $HOME/.bash_profile (or similar) export FLYCTL_INSTALL="/home/{UserName}/.fly" export PATH="$FLYCTL_INSTALL/bin:$PATH"Run '/home/{UserName}/.fly/bin/flyctl --help' to get started
vimで.bash_profile(macの場合は.zshrc)を開き、
vim ~/.bash_profile
※macの場合
vim ~/.zshrc
i
を押してインサートモードにし、先ほどのメッセージにある2行をそのままコピペして追加します。(UserNameの部分はそれぞれのユーザー名になっているはずです)
export FLYCTL_INSTALL="/home/{UserName}/.fly"export PATH="$FLYCTL_INSTALL/bin:$PATH"
追加したらEscキーを押した後、:wq
で保存して閉じます。
その後、以下のコマンドをターミナルに入力し、.bash_profile(macの場合は.zshrc)の設定を反映します。
source ~/.bash_profile
※macの場合
source ~/.zshrc
fly.ioへの会員登録(初回のみ)・ログイン(2回目以降)
初回は、ターミナルに以下のコマンドを入力して会員登録します。
flyctl auth signup
するとリンクが表示されるので、開きます。
ブラウザが立ち上がり、会員登録ページが開くので、「Sign up with GitHub」をクリックします。
GitHubのログイン画面が開くので、GitHubアカウントでログインし、「Authorize fly.io」をクリックします。
メール認証などもあるので、認証します。
これで会員登録は完了で、ターミナル上にログインできた旨が表示されます。
2回目以降は以下のコマンドを入力し、リンクを開いてGitHubアカウントでログインすればOKです。
flyctl auth login
アプリのデプロイ
あとは、デプロイするだけです。
まず、デプロイしたいアプリがあるディレクトリに移動します。
cd {デプロイしたいアプリがあるディレクトリへのPath}
その後、初回はターミナルに以下のコマンドを入力します。
flyctl launch
すると、以下のようにfly.ioがherokuでデプロイしていたことを推測してくれるので、
Creating app in /home/{UserName}/{Your App Path}Scanning source codeDetected a NodeJS appUsing the following build configuration: Builder: heroku/buildpacks:20
その後表示され る質問に答えていくだけです。
以下の例では、アプリ名なし(この場合自動で名前をつけてくれる)、リージョンは日本、PostgreSQLデータベースあり、無料の仮想マシンを指定しています。
? App Name (leave blank to use an auto-generated name):(空欄)? Select region: nrt (Tokyo, Japan)? Would you like to set up a Postgresql database now? Yes? Select configuration: Development - Single node, 1x shared CPU, 256MB RAM, 1GB disk
しばらく待つと準備が完了し、データベースの認証情報が表示されます。
これは一度しか表示されないみたいなので、どこかにメモしておきます。
Postgres cluster *****-*****-*****-db created Username: ****** Password: ***************** Hostname: *****-*****-*****-db.internal Proxy Port: 5432 PG Port: 5433Save your credentials in a secure place -- you won't be able to see them again!
しばらく待つとデプロイを今すぐ行うか確認されるので、y(Yes)と入力します。
? Would you like to deploy now? Yes
これでデプロイが完了です。
2回目以降は、デプロイしたいアプリのディレクトリに移動し、代わりに以下のコマンドを入力するだけです。
fly deploy
参考情報: デプロイ時にエラーが出る場合
デプロイ時に
Status: Downloaded newer image for heroku/heroku:20-cnbError executing lifecycle: io: read/write on closed pipe
というエラーが出る場合は、fly.ioにブラウザでログインし、Free builderとあるアプリ名(この場合fly-builder-floral-frog-1297
)をメモします。
その後、以下のコマンドを入力します。
fly apps destroy (先ほどメモしたビルダー名)
最後に、ローカルでデプロイしなおすと成功します。
fly deploy --local-only
スポンサードリンク
環境変数の設定・削除・確認
先述の通り、環境変数の設定・削除・確認はflyctlを使って行います。
環境変数の確認はWeb上でも行うことができますが、CLIと同様に環境変数の値の確認はできません。
環境変数の設定
環境変数を設定する場合は、デプロイしたいアプリのディレクトリで以下のコマンドを入力します。
flyctl secrets set {環境変数}={環境変数の値} {環境変数}={環境変数の値} ...
例えば、環境変数secret
にvalue
という値を設定する場合は、以下のように設定します。
flyctl secrets set secret=value
環境変数の削除
環境変数を削除したい場合は、以下のコマンドを入力します。
flyctl secrets unset {環境変数} {環境変数} ...
例えば、環境変数secret
を削除する場合は、以下のコマンドを入力します。
flyctl secrets unset secret
環境変数の確認
環境変数の一覧を確認するには、以下のコマンドを入力します。
注意点と しては、環境変数の値はセキュリティ上の理由から暗号化されている値のみが確認できるようになっています。
flyctl secrets list
特定のファイルを除外する場合
秘密情報を含むファイルなど、特定のファイルをデプロイしたくない場合は、.gitignoreではなく、.dockerignoreに記載します。
https://fly.io/docs/getting-started/node/#bonus-points
例えば、以下のように記載します。
(secret・testフォルダ配下のファイルを除外したい場合)
secrettest
スポンサードリンク
まとめ
今回は、Herokuからfly.ioに移行するメリット・デメリットと、具体的な移行方法を紹介しました。
fly.ioは基本CLIで操作することを除けば、無料枠も大きく使いやすいサービスだと思います。
参考になったらSNSでシェアしていただけると嬉しいです!