- 公開日
Bun と Docker を使用したスタンドアロン Next.js アプリケーションのデプロイに関する完全ガイド
- 著者
- 名前
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
Bun と Docker を使用して Next.js をデプロイする理由
Bun が安定版 1.0 に到達し、Vercel が Bun をパッケージマネージャーとしてサポートし始めた(ランタイムは依然として Node に依存していますが)ことに私は興味を持ちました。どのようにして Vercel のデプロイプロセスをローカルでシミュレートできるでしょうか?特に、Bun と Docker を使用して Next.js スタンドアロンアプリをどのようにデプロイできるでしょうか?このガイドは、これらの質問に答えることを目的としています。
前提条件
- Docker、Next.js、および Bun の基本的な理解
- Node.js がインストールされていること
- Bun パッケージマネージャーがインストールされていること
ステップバイステップガイド
ステップ 1: Dockerfile の設定
以下は必要な dockerfile
です。
FROM imbios/bun-node:18-slim AS deps
ARG DEBIAN_FRONTEND=noninteractive
# タイムゾーンは Asia/Jakarta を使用しています。必要に応じて変更してください
RUN apt-get -y update && \
apt-get install -yq openssl git ca-certificates tzdata && \
ln -fs /usr/share/zoneinfo/Asia/Jakarta /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata
WORKDIR /app
# 好みのパッケージマネージャーに基づいて依存関係をインストールします
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile
# アプリケーションをビルドします
FROM deps AS builder
WORKDIR /app
COPY . .
RUN bun run build
# プロダクションイメージ、すべてのファイルをコピーして Next を実行します
FROM node:18-slim AS runner
WORKDIR /app
ARG CONFIG_FILE
COPY $CONFIG_FILE /app/.env
ENV NODE_ENV production
# 実行時にテレメトリを無効にする場合は、次の行のコメントを外してください。
# ENV NEXT_TELEMETRY_DISABLED 1
COPY /app/.next/standalone ./
EXPOSE 3001
ENV PORT 3001
CMD ["node", "server.js"]
ステップ 2: カスタムシェルスクリプト
カスタムシェルスクリプト ./build.sh を作成します。
#!/bin/bash
set -e
# 渡された引数を使用して Next.js ビルドを実行します
next build "$@"
# CI 環境ではない場合にのみファイルをコピーします
if [ -z "$CI" ]; then
cp -r ./public ./.next/standalone/public
cp -r ./.next/static ./.next/standalone/.next/static
fi
よくあるエラーとトラブルシューティング
最初の試みでは、特に node:
で始まるエラーが発生しました。ベースイメージとして oven/bun
ではなく imbios/bun-node
を使用することで、これらのエラーを修正しました。Bun にはまだ実装されていない機能のために、Node.js のフォールバックが必要です。
まとめ
このガイドに従うことで、Vercel のデプロイプロセスを模倣して、Bun と Docker を使用して Next.js アプリをデプロイできるはずです。プロジェクトのニーズに合わせて、このセットアップを調整および最適化してください。
次に何をするか?
このガイドが役に立った場合は共有し、質問や改善点があればコメントを残してください。今後の更新をお楽しみに!