- Đăng ngày
Hướng dẫn Hoàn chỉnh về Triển khai Ứng dụng Next.js Độc lập bằng Bun và Docker
- Tác giả
- Tên
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
Tại sao nên triển khai Next.js với Bun và Docker?
Khi Bun đạt đến phiên bản ổn định 1.0 và Vercel bắt đầu hỗ trợ nó như một trình quản lý gói (mặc dù vẫn dựa vào Node để chạy), tôi đã rất tò mò. Làm sao bạn có thể mô phỏng quy trình triển khai Vercel ở địa phương? Cụ thể, làm sao bạn có thể triển khai ứng dụng Next.js độc lập với Bun và Docker? Hướng dẫn này nhằm mục đích trả lời những câu hỏi này.
Điều kiện tiên quyết
- Hiểu biết cơ bản về Docker, Next.js và Bun
- Node.js đã được cài đặt
- Trình quản lý gói Bun đã được cài đặt
Hướng dẫn từng bước
Bước 1: Cài đặt Dockerfile
Đây là dockerfile
đầy đủ mà bạn cần.
FROM imbios/bun-node:18-slim AS deps
ARG DEBIAN_FRONTEND=noninteractive
# Tôi sử dụng Asia/Jakarta làm múi giờ của mình, bạn có thể thay đổi nó thành múi giờ của mình
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
# Cài đặt các phụ thuộc dựa trên trình quản lý gói được ưu tiên
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile
# Xây dựng ứng dụng
FROM deps AS builder
WORKDIR /app
COPY . .
RUN bun run build
# Ảnh sản xuất, sao chép tất cả các tệp và chạy next
FROM node:18-slim AS runner
WORKDIR /app
ARG CONFIG_FILE
COPY $CONFIG_FILE /app/.env
ENV NODE_ENV production
# Bỏ chú thích dòng sau trong trường hợp bạn muốn vô hiệu hóa telemetri trong thời gian chạy.
# ENV NEXT_TELEMETRY_DISABLED 1
COPY /app/.next/standalone ./
EXPOSE 3001
ENV PORT 3001
CMD ["node", "server.js"]
Bước 2: Tập lệnh Shell tùy chỉnh
Tạo tập lệnh shell tùy chỉnh ./build.sh.
#!/bin/bash
set -e
# Chạy build Next.js với các đối số đã truyền
next build "$@"
# Sao chép các tệp chỉ khi không nằm trong môi trường CI
if [ -z "$CI" ]; then
cp -r ./public ./.next/standalone/public
cp -r ./.next/static ./.next/standalone/.next/static
fi
Lỗi phổ biến và Khắc phục sự cố
Tôi đã gặp một số vấn đề trong lần thử đầu tiên, đặc biệt là các lỗi có tiền tố là node:. Tôi đã khắc phục chúng bằng cách sử dụng imbios/bun-node
thay cho oven/bun
làm ảnh cơ sở. Bởi vì chúng ta cần Node.js dự phòng cho các tính năng chưa được triển khai của Bun.
Kết luận
Bằng cách làm theo hướng dẫn này, bạn sẽ có một ứng dụng Next.js được triển khai, mô phỏng quy trình triển khai Vercel, với Bun và Docker. Hãy thoải mái tinh chỉnh và tối ưu hóa thiết lập theo nhu cầu của dự án.
Tiếp theo là gì?
Hãy chia sẻ hướng dẫn này nếu bạn thấy nó hữu ích và để lại bình luận nếu bạn có bất kỳ câu hỏi hoặc cải tiến nào. Hãy theo dõi để biết thêm!