11 月 28 に Heroku の無料プランが終了するとのことです.
Today, we’re announcing important Heroku updates. These include an interactive product roadmap on #GitHub, support programs for students and nonprofits, as well as phasing out free product plans. See what the future of building on #Heroku looks like: https://t.co/g6J4qJnyW0 Heroku (@heroku) August 25, 2022
Render.com とは?
PaaS(Platform as a Service)の一つで, Gatsby や Hugo などで作成した世紀サイトはもちろん, Django や Rails ベースの Web アプリケーションもデプロイできるサービスです. 有料プランの価格設定もお手頃なので Heroku よりコストを抑えることが出来ます.
CMS デプロイの準備
予算やサービスの用途によって以下の構成が推奨されています.
SQLite
もっとも簡単な構成で, Heroku の無料プランでも動作します. ただし, データの永続化が出来ないので, データのバックアップが必要です.
PostgreSQL+Cloudinary
手動でバックアップを取る必要がなく, データの永続化が出来ます. ただし, Heroku の無料プランでは PostgreSQL のデータベースの容量が 1GB までしか使えないので, 画像のアップロードが出来ない場合があります.
Heroku で Strapi を運用していた際は PostgreSQL+Cloudinary の構成でした. しかしHeroku の無料プランでは画像のアップロードが出来なくなるため, Render.com に移行しました.
render.yaml の作成
Render のデプロイには render.yaml というファイルが必要です.
render.yaml の書き方はこちらを参考にしてください.
Strapi のプロジェクトルートにrender.yaml
を作成し, 以下を記述します.
services:
- type: web
name: strapi
env: node
plan: starter
buildCommand: yarn install && yarn build
startCommand: rsync -a public/ /data/public/ && yarn start
healthCheckPath: /_health
disk:
name: strapi-data
mountPath: /data
sizeGB: 1
envVars:
- key: NODE_VERSION
value: ~16.13.0
- key: NODE_ENV
value: production
- key: DATABASE_FILENAME
value: /data/strapi.db
- key: JWT_SECRET
generateValue: true
- key: ADMIN_JWT_SECRET
generateValue: true
- key: APP_KEYS
generateValue: true
本番環境の設定
config/env/production/server.js
を以下のように編集します.
module.exports = ({ env }) => ({
url: env("RENDER_EXTERNAL_URL"),
dirs: {
public: "/data/public",
},
});
リポジトリの作成・更新
Github または Gitlab にリポジトリを作成し, Strapi のプロジェクトを push します.
デプロイ
Render.com にログインし, Dashboard から New→Blueprint を選択して対象のリポジトリとブランチを選択します. とっても簡単!🍺
詰まったところ
Render ではなく Strapi 側の問題なのですが, Strapi のバージョンをアップデートした際に以下のようなエラーが出てしまいました.
Missing apiToken.salt. Please set apiToken.salt in config/admin.js
以下のようにconfig/admin.js
を編集することで解決しました.
module.exports = ({ env }) => ({
auth: {
secret: env("ADMIN_JWT_SECRET", "your secret"),
},
apiToken: {
salt: "your key",
},
});
とりあえず直にトークンを打ち込んだら動きましたが, あくまで応急処置なので実際に運用する際は Render 側で環境変数を設定するようにしましょう.
まとめ
Heroku は開発者コミュニティに多大な貢献をした素晴らしいサービスですが, 悪用する人が多かったので無料プランの廃止も仕方がないですね. 今後Web アプリケーションを開発する際は Render.com を検討してみてはいかがでしょうか?