[{"data":1,"prerenderedAt":214},["ShallowReactive",2],{"seo-verification":3,"blog-deployer-nuxt-vps-ma-fr":6,"promo-bar-likely":213},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-deployer-nuxt-vps-ma-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":35,"sections":36,"ctaTitle":155,"ctaBody":156,"ctaButton":157,"ctaUrl":158,"relatedPosts":159},47,"deployer-nuxt-vps",{"fr":10,"en":12,"ar":13,"es":14},"deploy-a-nuxt-application-on-a-vps","نشر-تطبيق-nuxt-على-vps","desplegar-nuxt-en-un-vps","Déployer une application Nuxt sur un VPS","Déployer Nuxt sur un VPS : Nitro, PM2, Nginx, SSL, modes de rendu, routeRules, variables d'environnement et dépannage en production.",12,1,false,"2026-05-04T00:00:00+00:00","2026-11-08T01:13:12+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},4,"Développement","developpement","bg-warning\u002F10 text-warning","dev",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fdeployer-nuxt-vps-poster.svg",{"categorySlug":25,"appSlug":34},"nuxt-stack","Nuxt et son moteur Nitro produisent un artefact Node.js autonome, parfaitement adapté à l'autohébergement sur VPS. Cette approche vous libère des quotas de fonctions cloud et vous donne le contrôle total sur le cache, les en-têtes HTTP et les stratégies de rendu page par page. Ce guide couvre l'installation complète : choix du mode de rendu, configuration du projet, build, variables d'environnement, supervision avec PM2, reverse proxy Nginx et HTTPS, journaux, jusqu'au dépannage des erreurs qui bloquent en production.",[37,41,53,82,85,88,113,116,119,142,145,148,152],{"type":38,"title":39,"body":40},"h2","Pourquoi self-héberger Nuxt sur un VPS ?","Avec Nitro, Nuxt génère un build portable (`preset: node-server`) qui démarre comme un simple serveur Node écoutant sur un port. Cette portabilité est idéale pour un VPS : vous bénéficiez du rendu côté serveur, des routes `server\u002Fapi` et du cache de route sans dépendre d'un runtime edge propriétaire.\n\nL'autohébergement supprime les quotas de fonctions et vous laisse régler la mise en cache, la compression et le nombre d'instances Node. Pour une application Vue 3 en production avec authentification, appels API serveur et SEO soigné, le VPS offre la stabilité d'un serveur persistant et un coût fixe, sans surprise de facturation à l'invocation.\n\nEncore faut-il un serveur qui accepte un processus Node.js permanent : la plupart des hébergements mutualisés ne le permettent pas, ce qui exclut d'emblée le SSR et les routes serveur. Sur un VPS, vous choisissez aussi la version de Node.js, le reverse proxy (Nginx ou Caddy) et la gestion des certificats TLS, sans plafond artificiel sur le CPU ou la mémoire.",{"type":42,"title":43,"items":44},"ul","Bénéfices concrets d'un Nuxt autohébergé",[45,46,47,48,49,50,51,52],"Routes serveur `server\u002Fapi` sans facturation par appel.","SSR et hydratation Vue 3 servis depuis un serveur Node persistant et stable.","Build Nitro portable (`node-server`) facile à conteneuriser et à reproduire.","Cache de route et règles `routeRules` (SSR, SSG, ISR, SWR) maîtrisés côté serveur.","Plusieurs apps Nuxt sur un même VPS derrière Nginx, chacune sur son port interne (3000, 3001…).","Variables d'environnement runtime (`runtimeConfig`) gérées en clair sur votre serveur.","Contrôle total sur les en-têtes HTTP (CSP, HSTS, cache-control) via le middleware Nitro.","Un site prégénéré par `nuxt generate`, servi par Nginx seul, sans processus Node.js permanent.",{"type":54,"title":55,"headers":56,"rows":61},"comparison","SSR, SSG, SPA ou hybride : quel mode de rendu choisir ?",[57,58,59,60],"Mode","Rendu","Processus Node.js","Idéal pour",[62,67,72,77],[63,64,65,66],"SSR (par défaut)","À la requête, côté serveur","Oui, supervisé par PM2","Application dynamique, SEO, contenu personnalisé",[68,69,70,71],"SSG (`nuxt generate`)","Au build, en HTML statique","Non, Nginx sert `.output\u002Fpublic`","Blog, vitrine, contenu peu changeant",[73,74,75,76],"SPA (`ssr: false` + `nuxt generate`)","Dans le navigateur","Non, Nginx suffit","Tableau de bord interne, application derrière authentification",[78,79,80,81],"Hybride (`routeRules`)","Par route : SSR, prérendu, SWR, ISR","Oui, serveur Nitro","Application mêlant pages statiques et routes API",{"type":38,"title":83,"body":84},"Prérequis matériels et logiciels","Comme pour tout framework moderne, le build Nuxt consomme de la mémoire : visez 2 Go de RAM minimum (le build peut être réalisé en CI si votre VPS est plus modeste). Au runtime, 1 vCPU et 1 Go suffisent pour le serveur Nitro sous charge légère ; montez à 2 vCPU \u002F 2 Go pour des applications avec de nombreuses routes `server\u002Fapi` simultanées, et à 2 vCPU \u002F 4 Go si plusieurs applications Nuxt partagent le VPS.\n\nCôté versions, partez de Nuxt 4 : Nuxt 3 a atteint sa fin de vie le 31 juillet 2026 et ne reçoit plus ni correctif ni patch de sécurité. Le déploiement décrit ici est le même pour les deux versions, puisque c'est Nitro qui produit le serveur. Installez une ligne LTS de Node.js encore maintenue, Node.js 24 ou 26 (Node.js 20 est en fin de vie depuis le 30 avril 2026), via `nvm` ou une image `node:24-alpine`, ainsi que PM2 pour la supervision de processus. `node-server` est le preset que Nitro applique par défaut à un build de production : le déclarer dans `nuxt.config.ts` le rend simplement explicite. Un domaine pointé vers votre VPS est requis pour le certificat TLS. Ubuntu 22.04 ou 24.04 LTS reste la base recommandée.",{"type":38,"title":86,"body":87},"Partir du template Nuxt Stack","Le template Nuxt Stack du Marketplace ServOrbit prépare un VPS Ubuntu 24.04 avec Node.js dans la ligne LTS courante du dépôt NodeSource, PM2 installé globalement, Nginx et PostgreSQL. Il vous dispense d'installer le runtime : les étapes ci-dessous commencent alors à la configuration du projet.\n\nC'est un environnement d'exécution, pas une application avec un écran de connexion : on y entre en SSH (`ssh root@\u003Cip-du-vps>`) pour déposer son code. Au premier accès, Nginx sert sa page par défaut sur le port 80 ; le virtual host de votre application, le certificat Let's Encrypt (Certbot n'est pas préinstallé) et votre code restent à mettre en place. PostgreSQL n'écoute qu'en local, avec l'authentification peer pour l'utilisateur système `postgres` (`sudo -u postgres psql`) : de quoi brancher une `DATABASE_URL` sur `127.0.0.1` sans exposer la base.",{"type":89,"title":90,"steps":91},"steps","Déployer Nuxt étape par étape",[92,95,98,101,104,107,110],{"title":93,"body":94},"Configurer le projet pour Node","Définissez le preset Nitro dans `nuxt.config.ts` :\n\n```ts\nexport default defineNuxtConfig({\n  nitro: { preset: 'node-server' }\n})\n```\n\nDéclarez vos secrets dans `runtimeConfig` côté serveur uniquement — jamais dans `runtimeConfig.public`. Sur le VPS, installez Node.js 24 LTS via `nvm install 24 && nvm use 24 && nvm alias default 24`, puis PM2 globalement : `npm install -g pm2`. Sur le template Nuxt Stack, Node.js et PM2 sont déjà en place.",{"title":96,"body":97},"Builder l'application","Clonez le dépôt et installez les dépendances :\n\n```bash\ngit clone https:\u002F\u002Fgit.votredomaine.com\u002Fvotre-org\u002Fvotre-app.git \u002Fsrv\u002Fnuxt-app\ncd \u002Fsrv\u002Fnuxt-app\nnpm ci\nnpm run build\n```\n\nNitro produit un dossier `.output` autonome contenant `server\u002Findex.mjs` et les assets statiques dans `.output\u002Fpublic`. Ce dossier est tout ce dont le VPS a besoin pour servir l'application en production — vous pouvez aussi l'assembler en CI et le transférer par rsync pour éviter le build sur le serveur.",{"title":99,"body":100},"Créer le fichier d'environnement","Créez `\u002Fsrv\u002Fnuxt-app\u002F.env` avec vos variables runtime. Toutes les variables préfixées `NUXT_` écrasent les clés correspondantes de `runtimeConfig` au démarrage :\n\n```bash\nNUXT_MY_SECRET_KEY=valeur-en-prod\nNITRO_HOST=127.0.0.1\nNITRO_PORT=3000\n```\n\nNe commitez jamais ce fichier. Assurez-vous qu'il appartient à l'utilisateur qui fait tourner PM2 et qu'il est lisible uniquement par cet utilisateur (`chmod 600`).\n\nAvec `NITRO_HOST=127.0.0.1`, Nitro n'écoute que sur la boucle locale : seul Nginx le joint, et le port 3000 n'est pas exposé sur Internet.",{"title":102,"body":103},"Lancer le serveur Nitro avec PM2","Démarrez l'application en mode cluster, en demandant à Node de charger le fichier d'environnement : Nuxt ne lit pas `.env` en production, et la ligne de commande de PM2 n'a pas d'option dédiée.\n\n```bash\npm2 start \u002Fsrv\u002Fnuxt-app\u002F.output\u002Fserver\u002Findex.mjs \\\n  --name nuxt-app -i max \\\n  --node-args=\"--env-file=\u002Fsrv\u002Fnuxt-app\u002F.env\"\npm2 save\npm2 startup\n```\n\n`-i max` lance une instance par vCPU ; c'est ce mode cluster qui rend possibles les rechargements sans coupure de la dernière étape. La commande `pm2 startup` affiche une ligne à copier-coller pour créer le service systemd. Exécutez-la avec les droits administrateur. Vérifiez que l'application est bien en ligne : `pm2 status` doit afficher l'état `online`.",{"title":105,"body":106},"Configurer Nginx en reverse proxy","Créez `\u002Fetc\u002Fnginx\u002Fsites-available\u002Fnuxt-app` :\n\n```nginx\nserver {\n    listen 80;\n    server_name votredomaine.com www.votredomaine.com;\n\n    # Assets hashés : cache long, servis directement\n    location \u002F_nuxt\u002F {\n        root \u002Fsrv\u002Fnuxt-app\u002F.output\u002Fpublic;\n        expires 1y;\n        add_header Cache-Control \"public, immutable\";\n    }\n\n    # Fichiers statiques publics\n    location \u002Ffavicon.ico {\n        root \u002Fsrv\u002Fnuxt-app\u002F.output\u002Fpublic;\n    }\n\n    # Tout le reste → Nitro\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_cache_bypass $http_upgrade;\n    }\n}\n```\n\nActivez le site et testez la configuration : `ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fnuxt-app \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F && nginx -t && systemctl reload nginx`.",{"title":108,"body":109},"Activer le HTTPS avec Let's Encrypt","Installez Certbot et le plugin Nginx, puis générez le certificat :\n\n```bash\napt install certbot python3-certbot-nginx\ncertbot --nginx -d votredomaine.com -d www.votredomaine.com\n```\n\nCertbot modifie automatiquement le bloc Nginx pour écouter sur le port 443 et forcer la redirection HTTP → HTTPS. Vérifiez que `X-Forwarded-Proto` est bien transmis à Nitro — sans cela, `useRequestHeaders()` côté serveur et les redirections basées sur le protocole peuvent se tromper. Le renouvellement automatique est géré par le timer systemd de Certbot, vérifiable avec `systemctl status certbot.timer`.",{"title":111,"body":112},"Mettre à jour sans interruption de service","Pour une mise à jour, le rechargement PM2 (pas le redémarrage) garantit la continuité. Regroupez les commandes dans un script `\u002Fsrv\u002Fnuxt-app\u002Fdeploy.sh`, que `set -e` arrête à la première erreur, avant tout rechargement :\n\n```bash\n#!\u002Fbin\u002Fbash\nset -e\ncd \u002Fsrv\u002Fnuxt-app\ngit pull origin main\nnpm ci\nnpm run build\npm2 reload nuxt-app\n```\n\nRendez-le exécutable (`chmod +x deploy.sh`) et appelez-le depuis votre pipeline CI\u002FCD par SSH. En mode cluster, PM2 remplace les instances une à une : la nouvelle version prend le relais avant que l'ancienne ne s'arrête. Pour un rollback, revenez sur le commit précédent, reconstruisez et rechargez. Si le build se fait en CI, transférez uniquement le dossier `.output` par rsync et rechargez sans reconstruire sur le serveur.",{"type":38,"title":114,"body":115},"Variables d'environnement : public, privé et rechargement","Nuxt range sa configuration d'exécution sur deux niveaux. Les clés placées sous `runtimeConfig.public` sont envoyées au navigateur et restent lisibles côté serveur : URL d'API publique, identifiant de mesure d'audience. Les autres clés de `runtimeConfig` ne quittent jamais le serveur : clés secrètes, accès à la base de données.\n\nAu démarrage, une variable d'environnement écrase la clé correspondante si elle suit la convention `NUXT_\u003CNOM>`, ou `NUXT_PUBLIC_\u003CNOM>` pour une clé publique : `NUXT_PUBLIC_API_BASE` remplace `runtimeConfig.public.apiBase`. Une valeur lue ailleurs, par exemple `process.env.AUTRE_VARIABLE` écrit dans `nuxt.config.ts`, n'est prise qu'au build et reste figée dans l'artefact.\n\nEn pratique, changer une URL d'API ou une clé ne demande donc pas de reconstruire : on modifie le `.env` sur le serveur puis on recharge PM2 (`pm2 reload nuxt-app`). Le même dossier `.output` peut ainsi servir la préproduction et la production avec deux fichiers d'environnement différents. Seule condition : faire charger ce fichier par le processus, puisque Nuxt ne lit plus `.env` une fois l'application construite — d'où l'option `--env-file` passée à Node lors du lancement avec PM2.",{"type":38,"title":117,"body":118},"Optimiser le rendu avec routeRules","L'une des forces de Nuxt sur VPS est la granularité des stratégies de rendu page par page, sans changer d'infrastructure. Dans `nuxt.config.ts`, les `routeRules` permettent de mélanger SSR, SSG, ISR et SWR sur un seul déploiement Nitro.\n\nLes pages statiques (blog, mentions légales, landing pages) peuvent être prégénérées au build avec `prerender: true` : Nitro les sert depuis le disque, sans Node. Les pages semi-dynamiques (listes de produits, tableaux de bord publics) profitent de `swr: 60` pour un cache d'une minute invalidé en arrière-plan. Le SSR complet reste réservé aux pages personnalisées qui dépendent de la session ou du profil utilisateur.\n\nCette approche réduit la charge sur Node sans nécessiter un CDN payant ou un layer de cache externe — votre Nginx met en cache ce que Nitro prégénère.",{"type":54,"title":120,"headers":121,"rows":125},"Nitro server vs Docker vs Vercel\u002FNetlify pour héberger Nuxt",[122,123,124],"Approche","Avantages","Contraintes",[126,130,134,138],[127,128,129],"Nitro `node-server` + PM2","Simple, léger, rechargement sans downtime, coût fixe VPS","Supervision à gérer, un seul serveur sans haute dispo native",[131,132,133],"Docker sur VPS","Isolation, reproductibilité, rollback par image, compose multi-apps","Image à bâtir et stocker, mémoire supplémentaire par conteneur",[135,136,137],"Vercel \u002F Netlify","Zéro configuration, edge CDN mondial, preview par PR","Quotas de fonctions, coût variable, pas de contrôle sur l'infra",[139,140,141],"Kamal (déploiement zero-downtime)","Orchestre Docker et kamal-proxy, déploiement en une commande (`kamal deploy`)","Outil Ruby (gem ou image Docker), config initiale plus longue, adapté aux équipes",{"type":38,"title":143,"body":144},"Journaux : lire, faire tourner, croiser avec Nginx","PM2 centralise les sorties de l'application : `pm2 logs nuxt-app` suit le flux en direct (sortie standard et erreurs), `pm2 logs nuxt-app --lines 100` affiche les dernières lignes. Les fichiers sont écrits dans `~\u002F.pm2\u002Flogs\u002F`, un `-out.log` et un `-error.log` par application, suffixés du numéro d'instance en mode cluster.\n\nCes fichiers ne tournent pas d'eux-mêmes. Le module pm2-logrotate les fait tourner au-delà de 10 Mo et en garde 30 par défaut ; adaptez ces seuils à la taille de votre disque :\n\n```bash\npm2 install pm2-logrotate\npm2 set pm2-logrotate:max_size 50M\npm2 set pm2-logrotate:retain 7\n```\n\nQuand le navigateur reçoit une 502 ou une 504, regardez d'abord du côté de Nginx : `\u002Fvar\u002Flog\u002Fnginx\u002Ferror.log` dit s'il n'a pas pu joindre `127.0.0.1:3000` (processus arrêté, mauvais port) ou si Nitro a mis trop de temps à répondre.",{"type":38,"title":146,"body":147},"Dépannage : erreurs courantes en production","**`Error: listen EADDRINUSE: address already in use :::3000`**\nUn processus tient déjà le port 3000. Identifiez-le avec `ss -tlnp | grep 3000` et arrêtez l'instance PM2 orpheline : `pm2 delete nuxt-app` suivi d'un redémarrage propre. Évitez de lancer plusieurs instances sans load balancer — configurez plutôt le `cluster_mode` de PM2.\n\n**`502 Bad Gateway` dans Nginx**\nNitro n'est pas démarré ou écoute sur le mauvais port. Vérifiez `pm2 status` et consultez les logs : `pm2 logs nuxt-app --lines 50`. Vérifiez aussi que la directive `proxy_pass` dans Nginx pointe bien sur `http:\u002F\u002F127.0.0.1:3000` (et non `localhost` qui peut résoudre en IPv6 si le process écoute uniquement en IPv4).\n\n**`useRuntimeConfig()` retourne undefined**\nLes variables `NUXT_*` ne sont lues qu'au démarrage du processus Nitro : après une modification du `.env`, rechargez avec `pm2 reload nuxt-app`. Vérifiez que le fichier est bien chargé par `--node-args=\"--env-file=…\"` et non exporté dans le shell courant, qui disparaît avec la session SSH. Si la valeur manque côté navigateur seulement, la clé doit être déclarée sous `runtimeConfig.public` et la variable préfixée `NUXT_PUBLIC_`.\n\n**Les routes `server\u002Fapi` répondent 404 en production**\nVérifiez que votre build inclut bien le dossier `server\u002F` dans `.output`. Un `nitro.preset` mal configuré (par exemple `static` au lieu de `node-server`) génère un site statique sans serveur. Reconstruisez avec `npm run build` après avoir vérifié `nuxt.config.ts`.\n\n**`X-Forwarded-Proto` ignoré, redirections en boucle**\nSi Nuxt redirige HTTP → HTTPS en boucle, c'est que le middleware de redirection voit `http` malgré le HTTPS côté client. Assurez-vous que Nginx transmet bien `proxy_set_header X-Forwarded-Proto $scheme` et que votre `nuxt.config.ts` ne force pas la redirection HTTPS en doublon avec Certbot.",{"type":149,"title":150,"body":151},"tip","Supervision et métriques avec PM2","Au-delà du simple `pm2 status`, PM2 expose un tableau de bord temps réel avec `pm2 monit` : CPU, mémoire, relances et logs des processus. Pour une application Nuxt sous charge, activez le mode cluster pour utiliser tous les vCPU disponibles :\n\n```bash\npm2 start .output\u002Fserver\u002Findex.mjs --name nuxt-app -i max\n```\n\nPM2 distribue automatiquement les requêtes entre les workers. Exportez ces métriques vers Prometheus et Grafana pour être alerté des redémarrages intempestifs — signe d'un bug ou d'une fuite mémoire à corriger avant qu'il n'affecte les utilisateurs.",{"type":149,"title":153,"body":154},"La documentation officielle","Pour la configuration avancée et les changements de version, référez-vous à la \u003Ca href=\"https:\u002F\u002Fnuxt.com\u002Fdocs\">documentation officielle de Nuxt\u003C\u002Fa> (routeRules, `runtimeConfig`, modules), à la \u003Ca href=\"https:\u002F\u002Fnitro.build\u002Fdeploy\u002Fruntimes\u002Fnode\">page Node.js de Nitro\u003C\u002Fa> pour les variables `NITRO_PORT` et `NITRO_HOST`, et à la \u003Ca href=\"https:\u002F\u002Fpm2.keymetrics.io\u002Fdocs\u002Fusage\u002Fcluster-mode\u002F\">documentation du mode cluster de PM2\u003C\u002Fa>. Ce guide couvre la mise en ligne sur VPS ; la documentation éditeur reste la référence pour les réglages fins.","Déployez votre Nuxt en toute autonomie","Le VPS Cloud ServOrbit fournit un template avec Node.js, PM2, Nginx et SSL automatique, idéal pour héberger vos applications Nuxt 3 avec SSR et routes serveur.","Déployer mon VPS Nuxt","\u002Fvps-cloud",[160,177,194],{"id":161,"slug":162,"slugs":163,"title":167,"excerpt":168,"readTime":23,"views":18,"isPinned":19,"noindex":19,"publishedAt":169,"updatedAt":170,"category":171,"categories":172,"featuredImage":30,"bgImage":31,"posterImage":174,"relatedSolution":175},5,"deployer-laravel-vps",{"fr":162,"en":164,"ar":165,"es":166},"deploying-laravel-on-a-vps-a-production-guide","نشر-laravel-على-خادم-vps-دليل-الإنتاج","desplegar-laravel-en-un-vps","Déployer Laravel sur un VPS : guide production","Passez Laravel en production sur VPS : PHP, workers, cache, base de données, reverse proxy et HTTPS proprement configurés.","2026-02-09T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[173],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fdeployer-laravel-vps-poster.svg",{"categorySlug":27,"appSlug":176},"laravel-stack",{"id":178,"slug":179,"slugs":180,"title":184,"excerpt":185,"readTime":186,"views":18,"isPinned":19,"noindex":19,"publishedAt":187,"updatedAt":21,"category":188,"categories":189,"featuredImage":30,"bgImage":31,"posterImage":191,"relatedSolution":192},43,"deployer-nodejs-vps",{"fr":179,"en":181,"ar":182,"es":183},"deploy-a-nodejs-application-on-a-vps","نشر-تطبيق-nodejs-على-vps","desplegar-una-aplicacion-nodejs-en-un-vps","Déployer une application Node.js sur un VPS","Déployez une application Node.js en production sur un VPS : PM2, reverse proxy Nginx, SSL Let's Encrypt et démarrage automatique au boot.",8,"2026-05-08T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[190],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fdeployer-nodejs-vps-poster.svg",{"categorySlug":25,"appSlug":193},"nodejs-stack",{"id":195,"slug":196,"slugs":197,"title":201,"excerpt":202,"readTime":203,"views":204,"isPinned":19,"noindex":19,"publishedAt":205,"updatedAt":206,"category":207,"categories":208,"featuredImage":30,"bgImage":31,"posterImage":210,"relatedSolution":211},44,"deployer-django-vps",{"fr":196,"en":198,"ar":199,"es":200},"deploy-a-django-application-on-a-vps","نشر-تطبيق-django-على-vps","desplegar-una-aplicacion-django-en-un-vps","Déployer une application Django sur un VPS","Déployez Django sur un VPS : Gunicorn, Nginx, PostgreSQL, Docker et SSL. Guide complet pour développeurs Python qui veulent self-héberger.",3,7,"2026-05-07T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[209],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fdeployer-django-vps-poster.svg",{"categorySlug":25,"appSlug":212},"django",true,1794270698151]