- 发表于
使用 Bun 和 Docker 部署独立 Next.js 应用程序的完整指南
- 作者
- 姓名
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
为什么用 Bun 和 Docker 部署 Next.js?
当 Bun 达到稳定版本 1,Vercel 开始支持它作为包管理器(尽管运行时仍依赖 Node)时,我感到很 intrigued。你如何在本地模拟 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 步:自定义 Shell 脚本
创建一个自定义 Shell 脚本 ./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: 为前缀的错误。我通过使用 imbios/bun-node
而不是 oven/bun
作为基础镜像来修复了这些问题。因为我们需要 Node.js 回退来支持 Bun 尚未实现的功能。
总结
通过遵循本指南,您应该能够部署一个 Next.js 应用程序,模拟 Vercel 部署流程,并使用 Bun 和 Docker。请根据您的项目需求随意调整和优化设置。
下一步?
如果您觉得本指南有用,请分享它,如果您有任何问题或改进建议,请留言。敬请期待更多内容!