Vercelで複数のプロジェクトを同一ドメインにデプロイ with Next.js
背景
複数のアプリケーションを同じURL(サブディレクトリ[1])上で実現したい。同ドメインに複数Webアプリケーションを動かしたいときに便利です。特に複雑な設定をする必要もなくnext.config.jsに数行追加するだけで実現できます。
簡単に実現できそうな予定が、かなりの時間をドキュメントの閲覧に費やすことになったので、この記事で同じ境遇の方の問題を解決できれば幸いです!
目的
複数のNext.jsアプリケーションを1つのドメインにホスティングしてるかのように見せる。実際はNext.jsのRewrite[2]を行う。
この記事の設定で下記の通りに、Project1をドメインルートに、Project2をサブディレクトリにデプロイされます。
Project1: https://domain.com
Project2: https://domain.com/project2
前提
Project1, Project2はそれぞれ独立したVercelのプロジェクトとなっております。
はじめに、Vercelのコンソール上からProject1に対して指定のドメインを割り当てておきます。今回の場合はhttps://domain.com
となります。
Project1の設定
既存のnext.config.js
に、rewrites設定を追加します。 Destinationはローカルや環境によって異なるので.envにて管理します。
{
async rewrites() {
return [
{
source: '/project2/',
destination: process.env.PROJECT2_URL,
},
{
source: '/project2/:match*',
destination: process.env.PROJECT2_URL + ':match*',
},
];
},
}
PROJECT2_URLには、Project2に割り当てられているVercelのUrlを入力します。
PROJECT2_URL="https://project2.vercel.app"
Project2の設定
{
assetPrefix: '/project2'
}
参考
-
サブディレクトリ:独自ドメインの後ろに新たな文字列を追加したドメインです。ベースとなる独自ドメインの後ろにスラッシュを入力し、文字列を追加します。
引用元:https://gmotech.jp/semlabo/seo/blog/subdomain-subdirectory/ -
rewrite:URLプロキシとして機能し、目的地パスをマスクすることで、ユーザーがサイト上の場所を変更していないように見せかけます。対照的に、リダイレクトは新しいページにリルートし、URLの変更を表示します。
引用元:https://nextjs.org/docs/pages/api-reference/next-config-js/rewrites
Discussion