yamaday0u Blog Written by yamaday0u

herokuの無料枠が利用できなくなるのでFly.ioでnodejsアプリケーションをデプロイしてみる。

PROGRAMMER

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コマンドを入力したところ、無事にデプロイが完了しました。動作は以下のとおりです。

Image from Gyazo

参考資料

yamaday0uを応援お願いします!あなたの1クリックが励みになります。
>> にほんブログ村