Опубликовано

Полное руководство по развертыванию автономного приложения Next.js с помощью Bun и Docker

Авторы

Зачем развертывать Next.js с Bun и Docker?

Когда Bun достиг стабильной версии 1, а Vercel начал поддерживать его в качестве менеджера пакетов (хотя все еще полагаясь на Node для времени выполнения), меня это заинтересовало. Как можно смоделировать процесс развертывания Vercel локально? В частности, как развернуть автономное приложение Next.js с помощью Bun и Docker? Данное руководство призвано ответить на эти вопросы.

Предварительные условия

  • Базовое понимание 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 --from=builder  /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:. Я исправил их, используя imbios/bun-node вместо oven/bun в качестве базового образа. Потому что нам нужен откат на Node.js для функций, которые еще не реализованы в Bun.

Заключение

Следуя этому руководству, вы должны развернуть приложение Next.js, имитируя процесс развертывания Vercel, с помощью Bun и Docker. Не стесняйтесь настраивать и оптимизировать настройку в соответствии с потребностями вашего проекта.

Что дальше?

Поделитесь этим руководством, если вы нашли его полезным, и оставьте комментарий, если у вас есть какие-либо вопросы или предложения по улучшению. Оставайтесь на связи для получения новых материалов!