herokuの無料枠が利用できなくなるのでFly.ioでnodejsアプリケーションをデプロイしてみる。
yamaday0uです。
herokuの無料プランが2022年11月に廃止になるということで、Qiitaのいくつかの記事で紹介されていたFly.ioというサービスを使って、アプリケーションのデプロイを試してみたので皆さんに共有します。
今回は仕事で使っていて愛着のあるnode.jsで作成したアプリケーションをデプロイしてみました。デプロイ方法は、Fly Docsの「Run a Node App」を参考にしました。
スポンサーリンク
Fly.ioとは
アメリカのFly.io社が提供するアプリケーションプラットフォームです。Node、Ruby、Rails、Go、Pyson等に対応しています。
flyctlコマンドでデプロイするのですが、コマンドの内容がシンプルで直感的な点が使いやすいです。
ソースコード
expressのドキュメントを参考にして、express-practiceというアプリを作成しました。express-practiceはindex.jsとbirds.jsで構成されています。ぼくのGitHubでもコードを公開していますので、試してみたい場合はこちらからクローンしてください。
const express = require("express");
const app = express();
const port = process.env.PORT || 3000;
const birds = require("./birds");
app.get('/', (req, res) => {
res.send('Hello, World');
});
app.listen(port, () => {
console.log(`app listening on port ${port}`);
});
app.use('/birds', birds);
const express = require("express");
const router = express.Router();
router.use((req, res, next) => {
console.log("Time", Date.now());
next();
});
router.get("/", (req, res) => {
res.send("Birds home page");
});
router.get("/about", (req, res) => {
res.send("About birds");
});
module.exports = router;
スポンサーリンク
アプリの作成とデプロイ
アプリをFly.ioに作成する
アプリをFly.ioに作成するために、express-practiceディレクトリ内でflyctl launchコマンドを実行します。
アプリ名、地域、Postgresqlの利用有無、すぐにデプロイするかを聞かれますので、任意の入力をしましょう。
$ fly launch
Creating app in /Users/**********/projects/express-practice
Scanning source code
Detected a NodeJS app
Using the following build configuration:
Builder: heroku/buildpacks:20
? App Name (leave blank to use an auto-generated name): express-practice
Automatically selected personal organization: **********@gmail.com
? Select region: nrt (Tokyo, Japan)
Created app express-practice in organization personal
Wrote config file fly.toml
? Would you like to set up a Postgresql database now? No
? Would you like to deploy now? No
Your app is ready. Deploy with `flyctl deploy`
アプリをデプロイする
アプリをFly.ioに作成したので、今度はデプロイするために以下のコマンドを入力します。
flyctl deploy
エラー対応
ところがぼくが実行した際は以下のようなエラーが出てしまいました。
[Error: Node.js engine package.json error]
Couldn't parse package.json: Could not parse package.json. missing field `name` at line 5 column 1
ERROR: failed to build: exit status 1
Error failed to fetch an image or build from source: executing lifecycle: failed with status code: 51
package.json内にnameフィールドがないと言われているので、nameを追記しましょう。
{
"name": "express-practice", // nameフィールドを追記
"dependencies": {
"express": "^4.18.1"
}
}
再びflyctl deployコマンドを入力したところ、無事にデプロイが完了しました。動作は以下のとおりです。
参考資料
yamaday0uを応援お願いします!あなたの1クリックが励みになります。
>> にほんブログ村