[{"data":1,"prerenderedAt":222},["ShallowReactive",2],{"seo-verification":3,"blog-heberger-directus-vps-ma-fr":6,"promo-bar-likely":221},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-heberger-directus-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":36,"sections":37,"ctaTitle":162,"ctaBody":163,"ctaButton":164,"ctaUrl":165,"relatedPosts":166},63,"heberger-directus-vps",{"fr":10,"en":12,"ar":13,"es":14},"hosting-directus-on-a-vps","استضافة-directus-على-خادم-vps","alojar-directus-en-un-vps","Héberger Directus sur un VPS","Hébergez Directus sur votre VPS : headless CMS et data platform open source au-dessus de votre base SQL. Guide Docker, Postgres, reverse proxy et SSL.",11,0,false,"2026-04-18T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},6,"Bases de données","bases-de-donnees","bg-teal-500\u002F10 text-teal-400","database",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-directus-vps-poster.svg",{"categorySlug":34,"appSlug":35},"cms","directus","Directus transforme n'importe quelle base SQL en API REST et GraphQL instantanée, avec une interface d'administration sans code par-dessus. C'est un headless CMS et une data platform complète, parfaite à auto-héberger sur un VPS pour piloter le contenu de vos sites et applications. Voici comment le déployer avec PostgreSQL, Docker et un certificat SSL.",[38,42,52,55,77,80,83,86,95,113,116,144,147,157,159],{"type":39,"title":40,"body":41},"h2","Pourquoi auto-héberger Directus sur un VPS","Directus se branche sur votre base de données existante (PostgreSQL, MySQL, SQLite, MariaDB) sans imposer son propre schéma : il introspecte vos tables et génère API et interface d'admin par-dessus. En l'auto-hébergeant sur un VPS, vous évitez les tarifs au siège de l'offre Cloud officielle et vous gardez vos contenus, vos médias et votre base SQL sur votre propre infrastructure. C'est un choix structurant pour les agences qui livrent plusieurs sites : un seul Directus peut servir d'arrière-boutique à plusieurs front-ends (Nuxt, Next, mobile). Le contrôle de la base, des extensions et des webhooks vous permet d'intégrer Directus dans n'importe quel pipeline de données sans dépendre d'un fournisseur tiers, sans qu'aucun service tiers ne s'intercale entre vos front-ends et vos données.",{"type":43,"title":44,"items":45},"ul","Les bénéfices concrets du self-hosting de Directus",[46,47,48,49,50,51],"API REST et GraphQL générées automatiquement à partir de votre schéma SQL, sans écrire de code.","Interface d'admin no-code pour modéliser le contenu, gérer les rôles et les permissions granulaires.","Compatible avec une base SQL existante : vous pouvez l'exposer sans la migrer ni la dénaturer.","Gestion des médias, transformations d'images à la volée et stockage local ou S3 au choix.","Flows et webhooks intégrés pour automatiser des traitements (notifications, synchronisations).","Mutualisation : un seul VPS Directus peut alimenter plusieurs sites et applications front-end.",{"type":39,"title":53,"body":54},"Prérequis matériels et logiciels","Directus est une application Node.js qui s'appuie sur une base de données externe. Comptez au minimum 2 Go de RAM pour faire tourner confortablement Directus et PostgreSQL sur le même VPS ; 4 Go sont recommandés en production avec des transformations d'images et plusieurs administrateurs simultanés. Un à deux vCPU suffisent pour démarrer. Prévoyez un cache Redis (optionnel mais conseillé pour les sessions et le rate limiting) et un volume de 30 à 60 Go SSD selon votre bibliothèque de médias. Vous aurez besoin de Docker et Docker Compose, d'un domaine pointant vers le VPS, et d'une clé secrète robuste pour `SECRET` et le hash des tokens. Postgres reste la base recommandée pour les fonctionnalités avancées.",{"type":56,"title":57,"steps":58},"steps","Déployer Directus étape par étape",[59,62,65,68,71,74],{"title":60,"body":61},"Provisionner le VPS et Docker","Après connexion SSH, installez Docker et Docker Compose. Créez un enregistrement DNS A pour `cms.mondomaine.com` vers l'IP du VPS. Ouvrez uniquement les ports 80 et 443 dans le pare-feu (`ufw allow 80,443\u002Ftcp`).",{"title":63,"body":64},"Définir la stack dans docker-compose.yml","Déclarez trois services : `database` (image `postgres:16` avec un volume persistant), `cache` (`redis`), et `directus` (`directus\u002Fdirectus`). Reliez Directus à Postgres via les variables `DB_CLIENT=pg`, `DB_HOST=database`, `DB_DATABASE`, `DB_USER`, `DB_PASSWORD`.",{"title":66,"body":67},"Configurer les variables d'environnement","Renseignez `KEY` et `SECRET` avec des chaînes aléatoires (`openssl rand -hex 32`), définissez `ADMIN_EMAIL` et `ADMIN_PASSWORD` pour le premier compte, et `PUBLIC_URL=https:\u002F\u002Fcms.mondomaine.com` pour que les liens et les uploads soient corrects.",{"title":69,"body":70},"Démarrer et initialiser la base","Lancez `docker compose up -d`. Au premier démarrage, Directus crée automatiquement les tables système et le compte admin. Suivez l'initialisation avec `docker compose logs -f directus`.",{"title":72,"body":73},"Brancher le reverse proxy et le TLS","Placez Caddy ou Traefik devant Directus pour gérer Let's Encrypt. Avec Traefik, ajoutez les labels de routage sur le service `directus` et le certresolver ACME. Vérifiez que `PUBLIC_URL` correspond exactement au domaine HTTPS pour éviter les soucis de CORS et d'uploads.",{"title":75,"body":76},"Sécuriser et sauvegarder","Restreignez les origines CORS aux domaines de vos front-ends, désactivez l'inscription publique si inutile, puis planifiez un `pg_dump` quotidien plus une copie du dossier `uploads` vers un stockage distant.",{"type":78,"body":79},"tip","Pour servir les images de manière performante, activez le stockage des médias sur un bucket compatible S3 plutôt que sur le disque local, et réglez `ASSETS_CACHE_TTL` : cette variable fixe la durée de cache côté navigateur (valeur `max-age` de l'en-tête `Cache-Control`, 30 jours par défaut), elle ne met pas les transformations en cache côté serveur. Placez un CDN devant Directus pour décharger le VPS des requêtes de médias. Bornez ensuite les transformations à la volée : `ASSETS_TRANSFORM_MAX_OPERATIONS` limite le nombre d'opérations par requête (5 par défaut, hors préréglages enregistrés), `ASSETS_TRANSFORM_IMAGE_MAX_DIMENSION` la taille en pixels (6000 par défaut) et `ASSETS_TRANSFORM_MAX_CONCURRENT` le nombre de transformations simultanées (25 par défaut).",{"type":39,"title":81,"body":82},"Servir les fichiers depuis S3 : ce que cela change pour la mémoire","Quand le stockage des médias pointe vers un bucket compatible S3, Directus ne renvoie pas le visiteur vers le bucket : la requête `\u002Fassets\u002FID_FICHIER` passe par le processus Node, qui lit l'objet chez le fournisseur et le retransmet au client en flux. Le pilote se configure par variables : `STORAGE_LOCATIONS=s3`, puis `STORAGE_S3_DRIVER=s3`, `STORAGE_S3_KEY`, `STORAGE_S3_SECRET`, `STORAGE_S3_BUCKET`, `STORAGE_S3_REGION` et, pour un stockage compatible comme MinIO, `STORAGE_S3_ENDPOINT` avec `STORAGE_S3_FORCE_PATH_STYLE=true`. Conséquence pratique : la mémoire du conteneur dépend du nombre de téléchargements simultanés et de la vitesse de chaque client, pas seulement de la taille de la base. C'est sur ce chemin que des utilisateurs signalent une consommation qui ne redescend pas, surtout avec des vidéos ou des fichiers volumineux.",{"type":39,"title":84,"body":85},"Dépannage : la mémoire grimpe jusqu'à l'arrêt du conteneur","Le symptôme est décrit dans le ticket 26206 du dépôt directus\u002Fdirectus, ouvert en novembre 2025 sur une instance Docker auto-hébergée en 11.13.2 avec PostgreSQL 16 : la mémoire du pod augmente régulièrement jusqu'à la limite fixée, puis le pod est tué et redémarre. La pente est plus faible la nuit et le week-end, ce qui désigne le trafic de fichiers plutôt qu'une fuite à vide. À la date de rédaction (fin octobre 2026), le ticket est toujours ouvert, classé Bug, Performance et AWS S3. Aucun membre de l'équipe Directus n'y a confirmé de cause : tout ce qui suit relève d'hypothèses de participants, pas d'un diagnostic de la maintenance.",{"type":43,"title":87,"items":88},"Ce que rapportent les participants du ticket",[89,90,91,92,93,94],"**Fichiers lourds** — le problème est reproduit avec un script de charge k6 sur des vidéos de 36 à 86 Mo, et sur douze fichiers d'environ 500 Mo ; la requête passe par `\u002Fassets`.","**Plusieurs stockages** — AWS S3 et MinIO sont cités, ainsi qu'un autre service compatible S3 chez un hébergeur d'applications.","**Croissance lente avec des images** — un participant passe d'environ 200 Mo après redéploiement à 1 Go en quelques jours ; un autre voit des pods grimper de 1,3 Go à plus de 2 Go en près de deux semaines.","**Hypothèse des flux non fermés** — un correctif nettoie les flux quand un client se déconnecte en cours de téléchargement ; un contributeur le situe dans la 11.17.2, et un participant constate une amélioration sans disparition de la croissance.","**Hypothèse de la somme de contrôle** — en octobre 2026, un participant attribue le problème à la validation de somme de contrôle des réponses du SDK AWS S3 : le flux de validation (`ChecksumStream`, paquet `@smithy\u002Futil-stream`) ignorerait la contre-pression. Son banc d'essai : limite de 1 Gio, objet de 150 Mo ; un client lent fait passer la mémoire externe de 8 à 160 Mo, trois clients provoquent l'arrêt en 15 secondes, et les fichiers envoyés en multipart ne déclenchent pas le cas. Il précise que cela n'explique pas la croissance lente sur plusieurs jours sans gros téléchargements.","**Retour sur la version 12** — un autre participant indique que la montée en version 12 a réglé le problème chez lui, alors que le ticket reste ouvert.",{"type":56,"title":96,"steps":97},"Diagnostiquer sans deviner",[98,101,104,107,110],{"title":99,"body":100},"Confirmer l'arrêt par manque de mémoire","Cherchez la trace du noyau avec `dmesg -T | grep -i \"out of memory\"`, suivez `docker events --filter event=oom` ou lisez le champ `OOMKilled` de `docker inspect`. Un arrêt de ce type ne laisse aucun message d'erreur Directus : le conteneur redémarre simplement.",{"title":102,"body":103},"Fixer une limite mémoire explicite","Dans le fichier Compose, donnez au service `directus` une limite (`mem_limit` ou `deploy.resources.limits.memory`) inférieure à la RAM libre du VPS, avec `restart: unless-stopped`. Sans limite, le noyau de l'hôte choisit lui-même quel processus tuer, parfois PostgreSQL plutôt que Directus.",{"title":105,"body":106},"Mesurer la courbe","Enregistrez `docker stats --no-stream` toutes les minutes dans un fichier, avec le nombre de requêtes `\u002Fassets` en cours. Notez la valeur après redémarrage, le plateau, et si la courbe suit le trafic ou monte à vide. Une limite de tas Node (`--max-old-space-size`) ne borne pas la mémoire hors tas, celle des tampons, qui est la zone visée par l'hypothèse de la somme de contrôle.",{"title":108,"body":109},"Reproduire avec un client lent","Sur un environnement de test, jamais en production, téléchargez un gros fichier avec `curl --limit-rate 200k -o \u002Fdev\u002Fnull https:\u002F\u002Fcms.mondomaine.com\u002Fassets\u002FID_FICHIER` depuis plusieurs terminaux et observez `docker stats`. Un script k6 fait la même chose de façon plus reproductible.",{"title":111,"body":112},"Capturer deux profils de tas","Ajoutez `NODE_OPTIONS=--heap-prof --heap-prof-dir=\u002Fdirectus\u002Fprofiles` à l'environnement du service, avec un dossier monté en volume. Node n'écrit le profil qu'à la sortie propre du processus : arrêtez le conteneur avec `docker compose stop directus` une première fois juste après le démarrage (référence), puis une seconde fois quand la mémoire a gonflé. Un arrêt par manque de mémoire tue le processus sans écrire de profil.",{"type":39,"title":114,"body":115},"Contournements rapportés, aucun confirmé par l'équipe Directus","Aucune de ces pistes n'a reçu de validation officielle dans le ticket. Essayez-les sur un environnement de préproduction, mesurez avant et après, et ne les présentez pas comme des correctifs.",{"type":117,"title":118,"headers":119,"rows":123},"comparison","Pistes rapportées pour le problème de mémoire",[120,121,122],"Piste","Origine du retour","Statut et réserves",[124,128,132,136,140],[125,126,127],"`AWS_RESPONSE_CHECKSUM_VALIDATION=WHEN_REQUIRED`","Un participant, en octobre 2026, avec un banc d'essai","Non confirmé par l'équipe. D'après la documentation AWS, la validation des sommes de contrôle de téléchargement n'a plus lieu que si l'appelant l'active explicitement : vous perdez cette vérification d'intégrité.",[129,130,131],"Monter en version 12","Un participant dit que cela a réglé le problème ; un autre avance un correctif à partir de la 12.3.1","Non confirmé. Les notes de la 12.3.1 indiquent seulement des dépendances de pilotes de stockage mises à jour. Changement de version majeure : lire les notes et sauvegarder avant.",[133,134,135],"Version 11.17.2 ou plus récente","Un contributeur la recommande pour le nettoyage des flux de clients déconnectés","Le correctif est fusionné et ferme un autre ticket (26991) ; sur le ticket 26206, un participant décrit une amélioration mais une croissance qui persiste.",[137,138,139],"Redéploiement planifié par cron","Un participant, à titre provisoire","Masque le symptôme sans rien corriger, et coupe les téléchargements en cours.",[141,142,143],"Limite mémoire et redémarrage automatique","Recommandation d'exploitation de ce guide","Contient les dégâts : le conteneur redémarre proprement au lieu d'entraîner l'hôte. Ne traite pas la cause.",{"type":39,"title":145,"body":146},"Que collecter pour un rapport de bogue utile","L'équipe a demandé des profils de tas : sans eux, le ticket ne peut pas avancer. Avant de commenter ou d'ouvrir un nouveau ticket, rassemblez les éléments ci-dessous.",{"type":43,"title":148,"items":149},"Le dossier à joindre",[150,151,152,153,154,155,156],"**Version exacte** — le tag de l'image Directus (pas `latest`) et la date du dernier redémarrage.","**Stockage** — pilote, fournisseur (AWS, MinIO, autre) et région, sans la clé ni le secret, plus la valeur de `AWS_RESPONSE_CHECKSUM_VALIDATION` si elle est définie.","**Limites** — mémoire du conteneur, RAM de l'hôte et politique de redémarrage.","**Charge** — nombre et taille des fichiers servis, téléchargements simultanés, présence d'un CDN ou d'un proxy devant Directus, clients lents ou déconnectés.","**Courbe mémoire** — mémoire totale du conteneur (pas seulement du processus) sur plusieurs jours, avec le trafic `\u002Fassets` en regard.","**Deux profils de tas** — référence et état gonflé. Le contributeur qui les demande précise qu'ils ne contiennent que des traces de pile et des tailles d'allocation échantillonnées, pas le contenu des fichiers ni les secrets.","**Mode d'envoi des fichiers** — téléversés d'un bloc ou en multipart, puisqu'un participant affirme que ces derniers ne déclenchent pas le cas.",{"type":78,"body":158},"Avant de monter en version 12, lisez les notes de la 12.3.0 : elle corrige des connexions de stockage qui fuyaient quand une requête d'asset était annulée ou qu'une transformation échouait, mais elle change aussi le comportement de `exists()`, qui lève désormais une erreur au lieu de renvoyer faux. Avec S3, un objet absent peut alors produire une réponse 403 plutôt que 404 si les identifiants ne permettent pas de lister le bucket : accordez `s3:ListBucket`. Sauvegardez la base et les fichiers, puis testez la montée sur une copie avant de toucher à la production.",{"type":39,"title":160,"body":161},"Déployer Directus en un clic sur ServOrbit","Directus est disponible directement depuis le marketplace ServOrbit. Sélectionnez l'application lors de la commande de votre VPS : Docker est préinstallé, le conteneur Directus démarre automatiquement, et vos identifiants administrateur (`admin@example.com` + mot de passe généré) sont affichés dans votre espace client. Vous accédez à l'interface d'administration via un tunnel SSH ou en rattachant un domaine depuis votre tableau de bord — sans installer Docker ni éditer de fichier Compose à la main.","Déployez Directus sur VPS en un clic","Commandez un VPS ServOrbit avec Directus préinstallé : Docker configuré, conteneur démarré, identifiants administrateur générés et affichés dans votre espace client. Aucune configuration manuelle.","Voir Directus sur le Marketplace","\u002Fapplications\u002Fcms\u002Fdirectus",[167,186,203],{"id":168,"slug":169,"slugs":170,"title":174,"excerpt":175,"readTime":176,"views":177,"isPinned":19,"noindex":19,"publishedAt":178,"updatedAt":179,"category":180,"categories":181,"featuredImage":30,"bgImage":31,"posterImage":183,"relatedSolution":184},56,"heberger-postgresql-vps",{"fr":169,"en":171,"ar":172,"es":173},"postgresql-on-a-vps-a-reliable-and-controlled-database","postgresql-على-خادم-vps-قاعدة-بيانات-موثوقة-ومتحكم-بها","alojar-postgresql-en-un-vps","PostgreSQL sur VPS : base fiable et contrôlée","Hébergez PostgreSQL sur VPS : configuration prod, sauvegardes pgBackRest, haute disponibilité streaming, comparatif RDS\u002FSupabase\u002FNeon et dépannage OOM.",9,1,"2026-04-25T00:00:00+00:00","2026-10-21T15:21:37+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[182],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-postgresql-vps-poster.svg",{"categorySlug":25,"appSlug":185},"postgresql-stack",{"id":187,"slug":188,"slugs":189,"title":193,"excerpt":194,"readTime":176,"views":18,"isPinned":19,"noindex":19,"publishedAt":195,"updatedAt":196,"category":197,"categories":198,"featuredImage":30,"bgImage":31,"posterImage":200,"relatedSolution":201},57,"heberger-mysql-vps",{"fr":188,"en":190,"ar":191,"es":192},"hosting-mysql-on-a-vps","استضافة-mysql-على-خادم-vps","alojar-mysql-en-un-vps","Héberger MySQL sur un VPS : guide complet","Installez MySQL 8.4 LTS sur un VPS : prérequis, sécurisation, performances InnoDB, accès distant sécurisé, sauvegardes automatisées et dépannage.","2026-04-24T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[199],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-mysql-vps-poster.svg",{"categorySlug":25,"appSlug":202},"mysql-stack",{"id":204,"slug":205,"slugs":206,"title":210,"excerpt":211,"readTime":212,"views":18,"isPinned":19,"noindex":19,"publishedAt":213,"updatedAt":214,"category":215,"categories":216,"featuredImage":30,"bgImage":31,"posterImage":218,"relatedSolution":219},58,"heberger-redis-vps",{"fr":205,"en":207,"ar":208,"es":209},"hosting-redis-on-a-vps","استضافة-redis-على-خادم-vps","alojar-redis-en-un-vps","Héberger Redis sur un VPS : guide complet","Déployez Redis sur votre VPS Cloud : prérequis RAM\u002FCPU, sécurité (ACL, TLS), persistance RDB\u002FAOF, dépannage et haute disponibilité.",10,"2026-04-23T00:00:00+00:00","2026-09-08T21:59:59+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[217],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-redis-vps-poster.svg",{"categorySlug":25,"appSlug":220},"redis-stack",true,1794270714467]