- Nai-publish noong
Kumpletong Gabay sa Pag-deploy ng Isang Standalone Next.js Application Gamit ang Bun at Docker
- Mga May-akda
- Pangalan
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
Bakit Dapat Mong I-deploy ang Next.js Gamit ang Bun at Docker?
Nang maabot ng Bun ang matatag nitong bersyon 1 at sinimulan ng Vercel na suportahan ito bilang isang package manager (bagama't umaasa pa rin sa Node para sa runtime), na-intriga ako. Paano mo maa-simulate ang proseso ng pag-deploy ng Vercel sa lokal? Partikular, paano mo mai-deploy ang isang standalone na Next.js app gamit ang Bun at Docker? Ang gabay na ito ay naglalayong sagutin ang mga tanong na ito.
Mga Kinakailangan
Pangunahing kaalaman sa Docker, Next.js, at Bun
Na-install na Node.js
Na-install na Bun package manager
Hakbang-hakbang na Gabay
Hakbang 1: Pag-setup ng Dockerfile
Narito ang buong dockerfile
na kakailanganin mo.
FROM imbios/bun-node:18-slim AS deps
ARG DEBIAN_FRONTEND=noninteractive
# Ginagamit ko ang Asia/Jakarta bilang aking time zone, maaari mo itong palitan sa iyong time zone
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
# I-install ang mga dependencies batay sa gustong package manager
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile
# I-build ang app
FROM deps AS builder
WORKDIR /app
COPY . .
RUN bun run build
# Production image, kopyahin ang lahat ng mga file at patakbuhin ang next
FROM node:18-slim AS runner
WORKDIR /app
ARG CONFIG_FILE
COPY $CONFIG_FILE /app/.env
ENV NODE_ENV production
# I-uncomment ang sumusunod na linya kung gusto mong huwag paganahin ang telemetry habang tumatakbo.
# ENV NEXT_TELEMETRY_DISABLED 1
COPY /app/.next/standalone ./
EXPOSE 3001
ENV PORT 3001
CMD ["node", "server.js"]
Hakbang 2: Pasadyang Shell Script
Gumawa ng isang pasadyang shell script ./build.sh.
#!/bin/bash
set -e
# Patakbuhin ang Next.js build gamit ang mga ipinasa na argumento
next build "$@"
# Kopyahin ang mga file kung hindi sa isang CI environment
if [ -z "$CI" ]; then
cp -r ./public ./.next/standalone/public
cp -r ./.next/static ./.next/standalone/.next/static
fi
Karaniwang Mga Error at Pag-troubleshoot
Nakaranas ako ng ilang mga problema sa aking unang pagtatangka, lalo na ang mga error na may prefix na node:. Naayos ko ang mga ito sa pamamagitan ng paggamit ng imbios/bun-node
sa halip na oven/bun
bilang base image. Dahil kailangan namin ng Node.js fallback para sa mga hindi pa naipatutupad na tampok ng Bun.
Konklusyon
Sa pamamagitan ng pagsunod sa gabay na ito, dapat kang magkaroon ng isang Next.js app na na-deploy, na ginagaya ang proseso ng pag-deploy ng Vercel, gamit ang Bun at Docker. Huwag mag-atubiling ayusin at i-optimize ang setup ayon sa mga pangangailangan ng iyong proyekto.
Ano ang Susunod?
Ibahagi ang gabay na ito kung nakita mong kapaki-pakinabang at mag-iwan ng komento kung mayroon kang anumang mga katanungan o mga pagpapabuti. Manatiling nakatutok para sa higit pa!