Publié le

Guide complet pour déployer des applications Next.js autonomes avec Bun et Docker

Auteurs

Pourquoi déployer Next.js avec Bun et Docker ?

Lorsque Bun a atteint sa version stable 1 et que Vercel a commencé à le prendre en charge en tant que gestionnaire de paquets (tout en s'appuyant toujours sur Node pour l'exécution), j'ai été intrigué. Comment pouvait-on simuler le processus de déploiement Vercel localement ? Plus précisément, comment déployer une application Next.js autonome avec Bun et Docker ? Ce guide vise à répondre à ces questions.

Prérequis

  • Compréhension de base de Docker, Next.js et Bun

  • Node.js installé

  • Gestionnaire de paquets Bun installé

Guide étape par étape

Étape 1 : Configuration du Dockerfile

Voici le dockerfile complet dont vous aurez besoin.

FROM imbios/bun-node:18-slim AS deps
ARG DEBIAN_FRONTEND=noninteractive

# J'utilise Asia/Jakarta comme fuseau horaire, vous pouvez le modifier en fonction de votre fuseau horaire
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

# Installer les dépendances en fonction du gestionnaire de paquets préféré
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile

# Construire l'application
FROM deps AS builder
WORKDIR /app
COPY . .

RUN bun run build


# Image de production, copier tous les fichiers et exécuter next
FROM node:18-slim AS runner
WORKDIR /app

ARG CONFIG_FILE
COPY $CONFIG_FILE /app/.env
ENV NODE_ENV production
# Décommenter la ligne suivante si vous souhaitez désactiver la télémétrie pendant l'exécution.
# ENV NEXT_TELEMETRY_DISABLED 1

COPY --from=builder  /app/.next/standalone ./

EXPOSE 3001

ENV PORT 3001

CMD ["node", "server.js"]

Étape 2 : Script shell personnalisé

Créez un script shell personnalisé ./build.sh.

#!/bin/bash
set -e

# Exécuter la construction de Next.js avec les arguments passés
next build "$@"

# Copier les fichiers uniquement si ce n'est pas dans un environnement CI
if [ -z "$CI" ]; then
  cp -r ./public ./.next/standalone/public
  cp -r ./.next/static ./.next/standalone/.next/static
fi

Erreurs courantes et dépannage

J'ai rencontré des problèmes lors de ma première tentative, en particulier des erreurs précédées de node:. Je les ai corrigées en utilisant imbios/bun-node au lieu de oven/bun comme image de base. Parce que nous avons besoin de Node.js de secours pour les fonctionnalités non encore implémentées de Bun.

Conclusion

En suivant ce guide, vous devriez avoir une application Next.js déployée, imitant le processus de déploiement Vercel, avec Bun et Docker. N'hésitez pas à modifier et à optimiser la configuration en fonction des besoins de votre projet.

Suite ?

Partagez ce guide si vous l'avez trouvé utile et laissez un commentaire si vous avez des questions ou des améliorations. Restez à l'écoute pour plus d'informations !