Next.js + サーバーサイドTypeScript + 関数フレーバーでクリーンなアプリを作ったので実装意図とか書く Advent Calendar 2022
の23日目。株式会社mofmofに生息しているshwldです。
前日はNext.js+URQL環境でPostgreSQLのPub/Subを使ったGraphQL Subscriptionについて書きました
Next.jsとgraphile-workerをRailwayにデプロイする
先日こういう記事を書きました。
上の記事内でも書いていますが、このアドベントカレンダーで作っているサービスはRailwayにホスティングしています。
ホスティングするべき項目
- web (Next.js)
- worker (graphile-worker)
- db (PostgreSQL)
今回は、これらを利用します。
Webサービスをデプロイする
builderは選択できますが、Nixpacksという、Railwayが開発しているビルドツールを使いました。
これは、Herokuのbuildpackと似たもので、buildしてOpen Container Initiative (OCI)準拠のイメージを作成するようなツールになっているようです。
一般的なアプリケーションに必要な依存は含まれていそうで、今回のケースでも特に困ることなくビルドできました。
Turbopackを使ったmonorepoで作成していますが、webアプリケーションはソースコードのルートで、 yarn build
と yarn start
するだけで起動するようになっています。
なので、特に特別な設定は行っていません。
ちなみに今回未設定ですが、RailwayではHeroku同様 Procfile
によってビルド、開始コマンドを指定できるようです。
一点だけ見つけづらいなと思ったのが、エンドポイントとなるドメインの設定です。
RailwayはDomainsに自動でrailwayのドメインが付与されているわけではなく、Next.jsなどのように外部からアクセスして使うサービスの場合、domainを指定して付与する必要があるのですが、どこから設定するのか最初見つけられませんでした。
SettingのここにDomainsがあり、ここでrailwayドメインとカスタムドメインを付与できます。
ワーカーサービスをデプロイする
Webサービスと同様に設定し、 yarn start:worker
という用意したコマンドをスタートコマンドに指定するだけでした。
ちなみに、コマンドはこんなふうに定義しています
{
"scripts": {
"build": "turbo run build",
"start": "yarn workspace web start",
"start:worker": "yarn workspace worker start"
}
}
次回予告
明日は、GraphQLのUnionやInputTypeについて書きます