- Нашр шудааст дар
Дастури пурраи истифодаи Bau ва Docker барои насби барномаи Next.js-и мустақил
- Муаллифон
- Ном
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
Чаро Next.js-ро бо Bun ва Docker ҷойгир кунем?
Вақте ки Bun ба версияи устувори 1 расид ва Vercel онро ҳамчун менеҷери баста (гарчанде ки ҳанӯз барои иҷрои вазифа ба Node такя мекунад) дастгирӣ кард, ман ба ин мавзӯъ таваҷҷӯҳ пайдо кардам. Чӣ тавр шумо метавонед раванди ҷойгиршавӣ дар Vercel-ро ба таври маҳаллӣ тақлид кунед? Хусусан, чӣ тавр шумо метавонед барномаи мустақили Next.js-ро бо Bun ва Docker ҷойгир кунед? Ин дастур барои ҷавоб ба ин саволҳо равона шудааст.
Пеш аз оғоз
Дониши асосии Docker, Next.js ва Bun
Node.js насбшуда
Bun package manager насбшуда
Дастури қадам ба қадам
Қадами 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 build-ро бо аргументҳои гузашта иҷро кунед
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
ҳамчун тасвири асосӣ ҳал кардам. Зеро мо барои вазифаҳои ҳанӯз иҷро нашудаи Bun ба Node.js ниёз дорем.
Хулоса
Бо риояи ин дастур, шумо бояд барномаи Next.js-ро ҷойгир кунед, ки раванди ҷойгиршавӣ дар Vercel-ро бо Bun ва Docker тақлид мекунад. Озодона танзимотро мувофиқи эҳтиёҷоти лоиҳаи худ танзим ва беҳтар кунед.
Баъд чӣ?
Агар ин дастур ба шумо муфид буд, онро мубодила кунед ва агар ягон савол ё такмил доред, шарҳ гузоред. Барои маълумоти бештар пайгирӣ кунед!