- Publié le
Guide complet pour déployer des applications Next.js autonomes avec Bun et Docker
- Auteurs
- Nom
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
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 /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 !