Guide de déploiement

Déployer une application SvelteKit sur un VPS

Déployer sur un VPS Cloud →

Développement7 min de lecture

Déployer une application SvelteKit sur un VPS

SvelteKit produit des applications full-stack performantes, mais la plupart des tutos supposent un déploiement serverless. Sur un VPS, l'adaptateur Node vous donne un vrai serveur long-running, sans cold start ni limite d'exécution. Voici comment le déployer proprement avec Docker et un reverse proxy.

Pourquoi self-héberger SvelteKit sur un VPS

SvelteKit s'adapte à de nombreuses cibles via ses adaptateurs (Vercel, Netlify, Cloudflare…), mais l'adaptateur officiel @sveltejs/adapter-node produit un serveur Node autonome, parfait pour un VPS. Au lieu de découper votre application en fonctions serverless soumises à des cold starts et à des limites de durée d'exécution, vous obtenez un processus persistant qui garde ses connexions à la base de données ouvertes et répond sans latence de démarrage. Les actions de formulaire, les load côté serveur et les endpoints +server.ts tournent dans un seul runtime que vous maîtrisez. Sur un VPS, vous évitez aussi la facturation à l'invocation, fréquente sur les plateformes front, qui devient imprévisible dès que le trafic monte.

Bénéfices concrets

  • Serveur Node persistant via adapter-node : aucun cold start sur les routes serveur
  • Connexions base de données maintenues ouvertes dans un pool, sans reconnexion à chaque requête
  • Pas de facturation à l'invocation : coût stable même avec un trafic élevé et irrégulier
  • Actions de formulaire et endpoints +server.ts exécutés sans limite de durée imposée
  • WebSockets et SSE possibles, là où le serverless les interdit ou les complique
  • Variables d'environnement et secrets gérés directement, sans dashboard de plateforme tierce

Prérequis matériels et logiciels

Une application SvelteKit en mode Node consomme modérément : un VPS de 1 vCPU et 2 Go de RAM convient pour un site à trafic moyen, montez à 2 vCPU / 4 Go si vous co-localisez une base PostgreSQL et avez des load serveur lourds. Installez Node.js 20 LTS, et soit Docker, soit PM2 pour gérer le processus en daemon. Nginx servira de reverse proxy. Pointez votre domaine vers l'IP du VPS. Le build (build/ généré par adapter-node) reste léger, 5 à 10 Go de disque suffisent avec les node_modules.

Déploiement pas à pas

01

Installer et configurer l'adaptateur Node

Ajoutez @sveltejs/adapter-node et déclarez-le dans svelte.config.js (adapter: adapter()). C'est lui qui transforme votre app en serveur Node autonome plutôt qu'en bundle serverless.

02

Builder l'application

Lancez npm run build. SvelteKit génère un dossier build/ contenant index.js, le point d'entrée du serveur. Vous le testez localement avec node build ; il écoute par défaut sur le port 3000.

03

Conteneuriser ou daemoniser le processus

Avec Docker : un Dockerfile node:20-alpine qui copie build/ et package.json, installe les dépendances de prod (npm ci --omit=dev) et lance node build. Sans Docker : utilisez PM2 avec pm2 start build/index.js --name svelte-app pour le redémarrage automatique.

04

Injecter la configuration runtime

Passez PORT, ORIGIN (indispensable pour que SvelteKit valide les actions de formulaire) et vos secrets via l'environnement : ORIGIN=https://mondomaine.ma. Sans ORIGIN correct, les form actions échoueront en production avec une erreur CSRF.

05

Configurer Nginx en frontal

Créez un vhost avec proxy_pass http://127.0.0.1:3000; et les en-têtes proxy_set_header Host et X-Forwarded-Proto $scheme. Activez proxy_http_version 1.1 et les en-têtes Upgrade si vous utilisez des WebSockets.

06

Sécuriser avec Let's Encrypt

Exécutez certbot --nginx -d mondomaine.ma. Une fois le certificat installé, vérifiez que ORIGIN correspond bien à l'URL HTTPS finale, sinon les soumissions de formulaire seront rejetées.

Mettez en cache l'output des routes statiques avec l'en-tête Cache-Control dans vos fonctions load, et activez la précompression : adapter-node sert automatiquement les fichiers .gz et .br s'ils existent. Buildez avec la précompression en définissant precompress: true dans les options de l'adaptateur. Côté process management, préférez le mode cluster de PM2 (pm2 start build/index.js -i max) pour exploiter tous les cœurs du VPS sur une charge CPU élevée.

Déployez votre app SvelteKit sans cold start

Le VPS Cloud ServOrbit vous donne un environnement Node persistant avec ressources dédiées : l'idéal pour faire tourner adapter-node en continu et servir vos routes SvelteKit sans latence de démarrage.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou écrivez à notre équipe — support en anglais, français et arabe.