Fait partie de Hébergement par cadricielNext.js · Auto-hébergement

Déployer Next.js sans Vercel : ce que vous gardez, ce que vous perdez.

Vous gardez presque tout. Selon Next.js, next start sur n’importe quel hôte Node prend en charge toutes ses fonctions : rendu serveur, Server Actions, optimisation d’images, ISR et proxy (l’ancien middleware). Vous perdez les services de Vercel : Skew Protection, tableaux de bord d’analytique, exécution multirégion. Le cache et le décalage de versions deviennent votre affaire.

Faits vérifiés le

Fonction par fonction

La colonne du milieu reprend ce que Next.js dit d’un serveur next start auto-hébergé. La dernière colonne indique ce que Canner fait en plus, vérifié dans notre documentation Next.js et le code de la plateforme.

FonctionAuto-hébergé avec next startSur Canner
Rendu serveur, Route Handlers, Server Actions †Pris en charge. Next.js indique qu’un serveur Node.js prend en charge toutes les fonctionsUn seul processus next start de longue durée, à Montréal; websockets et réponses en continu se comportent comme en local
output: "standalone" †Un server.js minimal et les node_modules retracés; vous copiez vous-même public et .next/staticFacultatif. Si votre configuration l’active, Canner copie les deux dossiers et exécute node server.js
Optimisation next/image † †Fonctionne sans configuration avec next start; sous Linux glibc, sharp limite ses fils d’exécution à moins de changer d’allocateurFonctionne. Le cache d’images optimisées dans .next/cache survit aux déploiements
ISR, revalidatePath, revalidateTag †Fonctionne sur une instance avec disque persistant; plusieurs instances exigent un gestionnaire de cache partagéUn processus par projet : le cache sur disque par défaut suffit
Proxy (middleware.ts, renommé proxy.ts dans Next.js 16) † †Fonctionne avec next start; utilise par défaut l’environnement d’exécution Node.jsS’exécute dans le même processus, à Montréal, pas en périphérie
Réponses en continu, Suspense, after() †Pris en charge; tout mandataire placé devant ne doit pas mettre les réponses en mémoire tamponPasse tel quel; rien à configurer
Décalage de versions entre déploiements † †Définir deploymentId; un écart force un rechargement completPas automatique. Définissez deploymentId à partir de CANNER_DEPLOYMENT_ID, que Canner fournit à chaque compilation

† Les détails sur les concurrents proviennent des pages publiées par chaque fournisseur aux dates indiquées; les prix et forfaits changent, vérifiez auprès du fournisseur avant de décider. Rendu serveur, Route Handlers, Server Actions (2026-10-29) · `output: "standalone"` (2026-10-29) · Optimisation `next/image` (2026-10-29) · Optimisation `next/image` (2026-10-29) · ISR, `revalidatePath`, `revalidateTag` (2026-10-29) · Proxy (`middleware.ts`, renommé `proxy.ts` dans Next.js 16) (2026-10-29) · Proxy (`middleware.ts`, renommé `proxy.ts` dans Next.js 16) (2026-10-29) · Réponses en continu, Suspense, `after()` (2026-10-29) · Décalage de versions entre déploiements (2026-10-29) · Décalage de versions entre déploiements (2026-10-29)

next start ou output: standalone

next start exécute la sortie de compilation normale avec tous vos node_modules. C’est ce que fait npm start dans un projet neuf, et il n’a besoin de rien d’autre. C’est aussi l’option la plus tolérante : chaque fichier du dépôt est encore sur le disque à l’exécution.

output: "standalone" retrace les fichiers qu’importe chaque route et ne copie que ceux-là dans .next/standalone, avec un petit server.js pour les servir. L’option existe pour les images Docker, où des node_modules de 1 Go ralentissent chaque envoi. Le piège est dans la documentation de Next.js : server.js ne sert ni public ni .next/static à moins de les y copier. D’où tous ces déploiements standalone qui affichent une page sans CSS.

  • Les fichiers lus avec `fs` à l’exécution (gabarits de courriel, JSON de traduction, fichier de données) ne sont pas importés : le traçage peut les oublier. L’appli démarre, et une route répond 500. Utilisez outputFileTracingIncludes, ou restez sur next start.
  • Sur Canner, le mode standalone est inutile, comme le dit la documentation : la compilation par défaut est ce qu’attend next start. Si votre configuration l’active quand même, Canner copie public et .next/static, reprend aussi les dossiers d’exécution courants comme templates, locales et messages, puis appelle vos routes avant la fin du déploiement. Si l’une répond par une erreur 5xx, il remet ce déploiement sur la compilation next start complète.
// next.config.ts
const nextConfig = { output: "standalone" };
export default nextConfig;

// After `next build`, on a host that doesn't do this for you:
cp -r public .next/standalone/
cp -r .next/static .next/standalone/.next/
PORT=3000 HOSTNAME=0.0.0.0 node .next/standalone/server.js

Optimisation d’images et sharp

Hors de Vercel, /_next/image est servi par votre propre processus. Next.js redimensionne avec sharp, qui fournit des binaires précompilés que le gestionnaire de paquets choisit selon le système et le processeur à l’installation. Deux choses tournent mal en pratique :

  • sharp absent sur le serveur. Vous avez installé sous macOS et copié node_modules vers Linux, ou l’installation a sauté les dépendances optionnelles. Installez sur la plateforme cible, à partir du fichier de verrouillage, avec les dépendances optionnelles.
  • La mémoire qui grimpe sous la charge. La documentation de sharp indique que l’allocateur glibc par défaut convient mal au traitement d’images multifil de longue durée, et sharp limite lui-même sa concurrence quand il détecte glibc. Alpine (musl) n’est pas touché; sur une image Debian ou Ubuntu, vous pouvez précharger jemalloc.
  • Sur Canner, l’optimisation d’images fonctionne sans configuration et son cache dans .next/cache est conservé d’un déploiement à l’autre. Les scripts d’installation des paquets sont désactivés par défaut; si le journal de compilation montre qu’un script a été sauté et que le paquet échoue ensuite, autorisez-le avec canner.allowedBuildScripts dans package.json (déroulement d’une compilation).

L’ISR et le cache sur un seul processus de longue durée

En auto-hébergement, les pages ISR et le cache de données vivent là où Next.js les met par défaut : en mémoire (50 Mo) et sur le disque local de chaque serveur. Rien n’est partagé entre serveurs à moins de le configurer.

Avec un seul serveur, c’est tout ce qu’il faut, et c’est ce que Canner exécute : un processus par projet, donc revalidateTag sur ce processus invalide la seule copie qui existe. Les ennuis commencent avec plusieurs instances. Chacune a son cache, une revalidation sur l’une n’atteint pas les autres, et le guide d’auto-hébergement vous fait écrire un gestionnaire de cache appuyé sur un stockage partagé comme Redis. Canner n’a pas de Redis : si vous avez besoin de plusieurs instances, il vous faut un autre hébergeur.

Pour les sites pilotés par un CMS, Canner offre aussi une mise en cache des réponses par étiquette devant l’appli. Le webhook du CMS vide une étiquette, et le visiteur suivant obtient un rendu frais. Chaque déploiement de production réussi la vide aussi.

Ce qui reste chez Vercel

Ce sont des produits Vercel, pas des fonctions de Next.js : aucun autre hébergeur ne vous les donne tels quels.

Fonction VercelCe qu’elle faitHors de Vercel
Skew Protection †Garde les déploiements précédents joignables pour que les vieux onglets appellent la compilation qu’ils ont chargée. Forfaits Pro et EnterpriseDéfinir deploymentId pour forcer un rechargement en cas d’écart, et gérer côté client les Server Actions qui échouent
Speed Insights et Web Analytics †Signaux Web essentiels et données de visite dans le tableau de bord de VercelUn autre outil d’analytique, ou vos propres mesures avec useReportWebVitals
Vercel Functions dans plusieurs régions †Choix des régions d’exécution, dont Montréal (yul1) depuis janvier 2026, derrière un CDN mondialCanner fonctionne dans une seule région, Montréal, sans réseau périphérique pour le rendu

† Les détails sur les concurrents proviennent des pages publiées par chaque fournisseur aux dates indiquées; les prix et forfaits changent, vérifiez auprès du fournisseur avant de décider. Skew Protection (2026-10-29) · Speed Insights et Web Analytics (2026-10-29) · Vercel Functions dans plusieurs régions (2026-10-29)

Quand rester chez Vercel

  • Vos utilisateurs sont partout dans le monde et la latence compte. Vercel fait le rendu près d’eux. Canner a une seule région, Montréal, sans basculement.
  • Il vous faut plusieurs instances derrière un répartiteur de charge. Canner exécute un processus par projet. Passer à plusieurs instances exige un gestionnaire de cache partagé, la même clé de chiffrement et la même compilation partout.
  • Vous dépendez de la Skew Protection pour de longues sessions, comme un paiement ou un examen qui ne doit pas se recharger en cours de route.
  • Sinon, une appli Next.js avec une base de données Postgres fonctionne de la même façon sur un seul processus Node. Sur Canner, c’est un git push, avec la base de données et vos données au Québec; les tarifs détaillent ce que comprend chaque forfait.

Questions

Peut-on déployer Next.js sans Vercel?

Oui. Next.js fonctionne chez tout hébergeur capable d’exécuter Node.js avec next build et next start, et sa documentation de déploiement indique qu’un serveur Node.js prend en charge toutes les fonctions. Docker et l’exportation statique sont les autres options; l’exportation statique abandonne tout ce qui exige un serveur.

Faut-il output: standalone pour auto-héberger Next.js?

Non. L’option réduit une image Docker en ne copiant que les fichiers utilisés par vos routes. Un simple next start fonctionne chez tout hébergeur Node et risque moins d’oublier un fichier lu à l’exécution.

L’ISR fonctionne-t-il en auto-hébergement?

Oui, sur une seule instance avec disque persistant, ce qui est la configuration par défaut. Avec plusieurs instances, il faut un gestionnaire de cache sur un stockage partagé pour qu’une revalidation les atteigne toutes.

Vercel a-t-il une région canadienne?

Oui. Vercel a annoncé sa région de Montréal, yul1, le 20 janvier 2026, comme région d’exécution des Vercel Functions. Vercel reste une entreprise américaine.

Exécutez Next.js en un seul processus, à Montréal.

Poussez votre dépôt : Canner exécute next build et next start, et place une base Postgres à côté.