結論
fastify使うなら fastify-cli使え
環境
- Nodejs 10
- fastify v3.0.0
概要
Nodejsでサーバーfastify-cliを使ってAPIサーバーのひな壇を作って、GCPのCloud Runにデプロイするところまでやってみる。
インストール
まずはfastify-cliをインストール 公式ではグローバルインストールが推奨されている
npm install fastify-cli --global
これで fastify コマンドが使えるようになる。
ひな壇作成
fastify generate YOUR_APP_NAME cd yourapp yarn install
するとこんな感じのひな壇が生成される。
├── app.js ├── node_modules ├── package.json ├── plugins │ ├── README.md │ └── support.js ├── routes │ ├── README.md │ ├── example │ └── root.js ├── test │ ├── helper.js │ ├── plugins │ └── routes └── yarn.lock
MVCでいうControllerにあたるのはroutesディレクトリ。特にroutes/root.jsが一番重要
起動
yarn dev
で、http://127.0.0.1:3000 にアクセスすると
{"root":true}
のJSONが表示されるはず。これはさっきの routes/root.js で制御されている。
routes/example/index.js にもあるように、ルーティングを足していきたければ、都度ディレクトリを切って fastify.get
等を追加していくだけ。簡単。
デプロイ
公式ドキュメントにサーバーレスのデプロイ方法が詳しく載っているので参考になる。
gcloud auth configure-docker
ルートディレクトリにDockerfileを作成し、以下
FROM node:10 WORKDIR /app COPY package.json ./ COPY yarn.lock ./ RUN npm install --only=production COPY . . CMD [ "npm", "start" ]
ビルド
docker build -t asia.gcr.io/[PROJECT_ID]/[APP_NAME]:latest .
GCP側でビルドする場合は以下(料金がかかるので注意
gcloud builds submit --tag asia.gcr.io/[PROJECT_ID]/[APP_NAME]
うまくビルドができたら、ローカルで確認してみる
docker run --rm -p 3000:3000 asia.gcr.io/[PROJECT_ID]/fastify-example:latest
これで curl http://localhost:3000/
してJSONが返ってくればおk
いざデプロイ
gcloud beta run deploy [APP_NAME] \ --image asia.gcr.io/[PROJECT_ID]/[APP_NAME] \ --platform managed \ --region=asia-northeast1