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.
| Fonction | Auto-hébergé avec next start | Sur Canner |
|---|---|---|
| Rendu serveur, Route Handlers, Server Actions † | Pris en charge. Next.js indique qu’un serveur Node.js prend en charge toutes les fonctions | Un 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/static | Facultatif. 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’allocateur | Fonctionne. 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.js | S’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 tampon | Passe tel quel; rien à configurer |
| Décalage de versions entre déploiements † † | Définir deploymentId; un écart force un rechargement complet | Pas 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 surnext 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 copiepublicet.next/static, reprend aussi les dossiers d’exécution courants commetemplates,localesetmessages, 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 compilationnext startcomplè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.jsOptimisation 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_modulesvers 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/cacheest 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 aveccanner.allowedBuildScriptsdanspackage.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 Vercel | Ce qu’elle fait | Hors 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 Enterprise | Dé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 Vercel | Un 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 mondial | Canner 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.
À lire aussi
- GuideVariables d’environnement Next.js undefined en production
- GuideVite : import.meta.env undefined en production
- GuideÉchec de compilation : lire le journal et corriger
- GuideJavaScript heap out of memory à la compilation
- GuideOù exécuter les migrations lors d’un déploiement
- GuideDéploiement sans interruption et sondes d’état
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é.