[{"data":1,"prerenderedAt":211},["ShallowReactive",2],{"seo-verification":3,"blog-deployer-avec-traefik-ma-fr":6,"promo-bar-likely":210},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-deployer-avec-traefik-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":26,"featuredImage":28,"bgImage":29,"posterImage":30,"relatedSolution":28,"intro":31,"sections":32,"ctaTitle":154,"ctaBody":155,"ctaButton":156,"ctaUrl":157,"relatedPosts":158},38,"deployer-avec-traefik",{"fr":10,"en":12,"ar":13,"es":14},"deploy-your-applications-with-traefik-on-a-vps","انشر-تطبيقاتك-باستخدام-traefik-على-خادم-vps","desplegar-con-traefik","Déployer vos applications avec Traefik sur un VPS","Déployez Traefik en reverse proxy sur votre VPS : routage automatique des conteneurs Docker, certificats SSL Let's Encrypt et load balancing.",11,3,false,"2026-05-13T00:00:00+00:00","2026-11-08T01:13:13+00:00",{"id":18,"name":23,"slug":24,"color":25,"icon":24},"Déploiement","deploiement","bg-success\u002F10 text-success",[27],{"id":18,"name":23,"slug":24,"color":25,"icon":24},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fdeployer-avec-traefik-poster.svg","Traefik est un reverse proxy et load balancer cloud-native qui découvre vos conteneurs Docker automatiquement et leur attribue routes et certificats SSL sans rechargement manuel. Déployé sur votre VPS, il devient la porte d'entrée unique de toutes vos applications, avec une configuration déclarative par labels Docker. Ce guide installe la branche v3 (v3.7 au moment de l'écriture), avec HTTPS Let's Encrypt, dashboard protégé, HTTP\u002F3, middlewares de production et les pièges à connaître si vous venez de Traefik v2.",[33,37,49,52,77,80,88,91,94,97,106,140,143,151],{"type":34,"title":35,"body":36},"h2","Pourquoi placer Traefik en frontal de votre VPS ?","Quand vous faites tourner plusieurs applications conteneurisées sur un même VPS, gérer manuellement les virtual hosts Nginx et renouveler chaque certificat devient vite ingérable. Traefik résout ce problème en lisant directement les labels de vos conteneurs Docker : vous déclarez une route au moment du `docker run` ou dans votre `docker-compose.yml`, et Traefik la configure à chaud, génère le certificat Let's Encrypt et l'expose en HTTPS. Aucun fichier de conf à éditer, aucun reload : tout est dynamique.\n\nNginx reste un excellent serveur HTTP, mais sa configuration est statique : chaque nouveau service demande un vhost, un `nginx -s reload` et un outil ACME à part (certbot et sa tâche de renouvellement). Traefik a été pensé pour une topologie qui change sans cesse, ce qui est exactement le cas d'un VPS où l'on ajoute, met à jour et retire des conteneurs chaque semaine. La branche v3, publiée en avril 2024, a stabilisé HTTP\u002F3 et l'export de traces en OpenTelemetry, et durci la syntaxe des règles de routage.",{"type":38,"title":39,"items":40},"ul","Ce que Traefik apporte concrètement sur un VPS",[41,42,43,44,45,46,47,48],"Découverte automatique des conteneurs Docker via le provider Docker (les routes apparaissent sans redémarrage)","Certificats SSL Let's Encrypt générés et renouvelés automatiquement (challenges HTTP-01, TLS-ALPN-01 ou DNS-01), renouvelés par défaut 30 jours avant leur expiration","Routage par domaine, par chemin ou par en-tête, géré entièrement via les labels Docker","Dashboard web intégré pour visualiser routers, services et middlewares en temps réel","Middlewares prêts à l'emploi : redirection HTTPS, basic auth, rate limiting, headers de sécurité, compression","Load balancing automatique quand vous scalez un service à plusieurs réplicas","HTTP\u002F3 (QUIC) activable sur un entrypoint en une option","D'autres providers que Docker (Swarm, Kubernetes, Nomad, fichiers) si votre infrastructure grandit",{"type":34,"title":50,"body":51},"Prérequis","Traefik lui-même est très léger : 1 vCPU et 1 Go de RAM suffisent largement pour le proxy seul, le surcoût venant de vos applications derrière. Prévoyez un VPS sous Debian 12 ou Ubuntu 22.04\u002F24.04 avec Docker Engine et le plugin Docker Compose v2 installés (la commande `docker compose`, sans tiret), un nom de domaine dont les enregistrements A\u002FAAAA pointent vers l'IP du VPS **avant** le premier démarrage (sans quoi Let's Encrypt ne peut pas valider le domaine), et les ports 80 et 443 ouverts en entrée dans votre pare-feu (UFW), en TCP, plus 443 en UDP si vous activez HTTP\u002F3. Gardez une adresse e-mail valide pour le compte ACME. Pour les certificats wildcard, il vous faudra aussi un accès API à votre fournisseur DNS.",{"type":53,"title":54,"steps":55},"steps","Déployer Traefik avec Docker Compose",[56,59,62,65,68,71,74],{"title":57,"body":58},"Créer le réseau et l'arborescence","Créez un réseau Docker partagé que Traefik et vos applications utiliseront, puis un dossier dédié contenant le fichier `acme.json` (le stockage des certificats et de leurs clés privées) :\n\n```bash\ndocker network create proxy\nmkdir -p \u002Fopt\u002Ftraefik && cd \u002Fopt\u002Ftraefik\ntouch acme.json && chmod 600 acme.json\n```\n\nCréez le fichier **avant** le premier démarrage : si le chemin monté n'existe pas, Docker crée un dossier à sa place et Traefik ne peut plus y écrire. Les droits 600 sont exigés : Traefik refuse un fichier lisible par d'autres utilisateurs.",{"title":60,"body":61},"Configurer les entrypoints et le résolveur ACME","Placez ce fichier dans `\u002Fopt\u002Ftraefik\u002Fdocker-compose.yml`. Il déclare deux entrypoints (`web` sur :80, `websecure` sur :443), un certificateResolver Let's Encrypt validé par le challenge HTTP, la découverte des conteneurs par le socket Docker monté en lecture seule, et le dashboard :\n\n```yaml\nservices:\n  traefik:\n    image: traefik:v3.7\n    container_name: traefik\n    restart: unless-stopped\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n      - \"443:443\u002Fudp\"\n    command:\n      - \"--providers.docker=true\"\n      - \"--providers.docker.exposedbydefault=false\"\n      - \"--providers.docker.network=proxy\"\n      - \"--entrypoints.web.address=:80\"\n      - \"--entrypoints.web.http.redirections.entrypoint.to=websecure\"\n      - \"--entrypoints.web.http.redirections.entrypoint.scheme=https\"\n      - \"--entrypoints.websecure.address=:443\"\n      - \"--entrypoints.websecure.http3=true\"\n      - \"--certificatesresolvers.letsencrypt.acme.email=admin@example.com\"\n      - \"--certificatesresolvers.letsencrypt.acme.storage=\u002Facme.json\"\n      - \"--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web\"\n      - \"--api.dashboard=true\"\n    volumes:\n      - \"\u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro\"\n      - \".\u002Facme.json:\u002Facme.json\"\n    networks:\n      - proxy\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.dashboard.rule=Host(`traefik.example.com`)\"\n      - \"traefik.http.routers.dashboard.entrypoints=websecure\"\n      - \"traefik.http.routers.dashboard.tls.certresolver=letsencrypt\"\n      - \"traefik.http.routers.dashboard.service=api@internal\"\n      - \"traefik.http.routers.dashboard.middlewares=dashboard-auth\"\n      - \"traefik.http.middlewares.dashboard-auth.basicauth.users=admin:$$2y$$05$$REMPLACER_PAR_LE_HASH\"\n\nnetworks:\n  proxy:\n    external: true\n```\n\nL'option `exposedbydefault=false` est essentielle : sans elle, chaque conteneur du VPS serait publié, y compris votre base de données. Épinglez la branche (`v3.7`) plutôt que `latest`, et suivez les releases avant de changer de version mineure.",{"title":63,"body":64},"Forcer la redirection HTTP vers HTTPS","La redirection se déclare directement sur l'entrypoint `web`, avec les deux options `--entrypoints.web.http.redirections.entrypoint.to=websecure` et `...entrypoint.scheme=https` déjà présentes dans le fichier ci-dessus. C'est plus simple et plus sûr qu'un router « catch-all » avec middleware : tout trafic en clair est basculé en HTTPS par une redirection permanente, sans label à répéter sur chaque service, et le challenge HTTP de Let's Encrypt continue de passer sur le port 80.",{"title":66,"body":67},"Sécuriser le dashboard","Le dashboard est exposé sur `traefik.example.com`, derrière le middleware `basicauth` nommé `dashboard-auth`. Générez un hash bcrypt (paquet `apache2-utils` sous Debian\u002FUbuntu) en doublant les `$`, comme l'exige une valeur de label dans un fichier Compose :\n\n```bash\napt install -y apache2-utils\nhtpasswd -nB admin | sed -e 's\u002F\\$\u002F\\$\\$\u002Fg'\n```\n\nCollez le résultat à la place de `admin:$$2y$$05$$REMPLACER_PAR_LE_HASH`. Un hash collé avec des `$` simples est interprété par Compose comme des variables et casse l'authentification. Ne laissez jamais le flag `--api.insecure=true` en production : il publie le dashboard sans authentification.",{"title":69,"body":70},"Lancer Traefik","Démarrez la stack et suivez les logs :\n\n```bash\ncd \u002Fopt\u002Ftraefik\ndocker compose up -d\ndocker compose logs -f traefik\n```\n\nVous devez voir le provider Docker démarrer, puis le router `dashboard` s'attacher, sans erreur ACME. Pendant vos essais, ajoutez temporairement `--certificatesresolvers.letsencrypt.acme.caserver=https:\u002F\u002Facme-staging-v02.api.letsencrypt.org\u002Fdirectory` : le serveur staging de Let's Encrypt délivre des certificats non reconnus par les navigateurs, mais vous protège du rate limit de production si une configuration échoue en boucle. Retirez l'option et videz `acme.json` avant le passage en production.",{"title":72,"body":73},"Connecter une application","Chaque application vit dans son propre `docker-compose.yml`, rattachée au réseau `proxy` et décrite par ses labels :\n\n```yaml\nservices:\n  app:\n    image: ghcr.io\u002Fexample\u002Fapp:1.0.0\n    restart: unless-stopped\n    networks:\n      - proxy\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.app.rule=Host(`app.example.com`)\"\n      - \"traefik.http.routers.app.entrypoints=websecure\"\n      - \"traefik.http.routers.app.tls.certresolver=letsencrypt\"\n      - \"traefik.http.services.app.loadbalancer.server.port=3000\"\n\nnetworks:\n  proxy:\n    external: true\n```\n\nAu `docker compose up -d`, Traefik détecte le conteneur, obtient le certificat et active la route en quelques secondes, sans toucher à sa propre configuration. Le label `loadbalancer.server.port` indique le port interne de l'application ; il devient indispensable dès que l'image en expose plusieurs. Le nom du router (`app` ici) doit être unique sur tout le VPS.",{"title":75,"body":76},"Vérifier le certificat et la redirection","Contrôlez depuis une machine extérieure au VPS :\n\n```bash\ncurl -I http:\u002F\u002Fapp.example.com\ncurl -I https:\u002F\u002Fapp.example.com\ndig +short app.example.com\n```\n\nLa première requête doit renvoyer une redirection permanente vers `https:\u002F\u002F`, la deuxième un `200` (ou le code de votre application) servi avec un certificat Let's Encrypt valide, et `dig` doit afficher l'IP du VPS. Le dashboard liste aussi chaque router avec son résolveur de certificat. Un port 80 qui refuse la connexion pointe presque toujours vers le pare-feu.",{"type":34,"title":78,"body":79},"Middlewares utiles en production","Un middleware Traefik se déclare par label, une seule fois, puis s'attache à un ou plusieurs routers par `traefik.http.routers.\u003Crouter>.middlewares=\u003Cnom1>,\u003Cnom2>`. Vous les définissez donc sur le service concerné, sans toucher à la configuration centrale de Traefik. Voici ceux qui servent sur presque tous les VPS.",{"type":38,"title":81,"items":82},"Cinq middlewares à connaître",[83,84,85,86,87],"**BasicAuth sur un outil d'administration** (Adminer, Flower…) : `traefik.http.middlewares.adminauth.basicauth.users=admin:$$2y$$05$$...`, puis `traefik.http.routers.monadmin.middlewares=adminauth`. Même règle de `$` doublés que pour le dashboard.","**Rate limit** devant une API ou un formulaire : `traefik.http.middlewares.ratelimit.ratelimit.average=100`, `...ratelimit.period=1s` et `...ratelimit.burst=200` autorisent 100 requêtes par seconde en moyenne, avec des rafales jusqu'à 200. Sans `average`, la limite est désactivée.","**Headers de sécurité** : le middleware `headers` pose HSTS (`stsSeconds=31536000`, `stsIncludeSubdomains=true`), `X-Frame-Options: DENY` (`frameDeny=true`) et `X-Content-Type-Options: nosniff` (`contentTypeNosniff=true`), sans fichier de configuration séparé.","**Redirection www vers le domaine nu** : `redirectregex` avec `regex=^https:\u002F\u002Fwww\\.(.+)`, `replacement=https:\u002F\u002F$${1}` et `permanent=true`. Pensez à déclarer les deux hôtes dans la règle du router pour que le certificat couvre `www`.","**Compression** : `traefik.http.middlewares.compress.compress=true` active gzip, Brotli et Zstandard selon ce qu'accepte le navigateur, sans réglage côté application.",{"type":89,"body":90},"tip","Pour obtenir un certificat wildcard (`*.example.com`) et éviter d'exposer chaque sous-domaine, passez du `httpChallenge` au `dnsChallenge` : c'est le seul challenge qui délivre un wildcard. Avec Cloudflare, déclarez `--certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare` et passez à Traefik la variable `CF_DNS_API_TOKEN`, un jeton API limité aux permissions Zone \u002F DNS \u002F Edit et Zone \u002F Zone \u002F Read. L'ancien couple `CF_API_EMAIL` + `CF_API_KEY` fonctionne aussi, mais il exige la clé API globale, qui ouvre tout le compte : préférez le jeton. Traefik prouve alors la propriété du domaine par un enregistrement TXT, ce qui fonctionne même pour des services non exposés publiquement.",{"type":34,"title":92,"body":93},"Activer HTTP\u002F3 (QUIC)","Le fichier Compose ci-dessus l'active déjà : `--entrypoints.websecure.http3=true` sur l'entrypoint TLS, et la publication du port `443:443\u002Fudp`. Traefik écoute alors en UDP sur le même port que l'entrypoint TCP ; une connexion commence toujours en TCP, puis le navigateur bascule en QUIC au voyage suivant. Deux conditions : seuls les routers en TLS sont servis en HTTP\u002F3, et le pare-feu doit laisser passer le port 443 en UDP (`ufw allow 443\u002Fudp`). Si vous publiez un autre port UDP que celui de l'entrypoint, l'option `http3.advertisedPort` annonce le bon. Pour vérifier, utilisez un `curl` compilé avec HTTP\u002F3 : `curl --http3 -I https:\u002F\u002Fapp.example.com`.",{"type":34,"title":95,"body":96},"Venir de Traefik v2 : ce qui casse","La v3 garde la configuration de routage v2 compatible, mais elle change la syntaxe par défaut des règles et refuse de démarrer sur plusieurs options retirées. Pour migrer sans tout réécrire d'un coup, ajoutez `--core.defaultRuleSyntax=v2` dans la configuration d'installation : vos anciennes règles continuent de fonctionner, vous passez les routers un par un à la syntaxe v3, puis vous retirez l'option. Les logs de Traefik signalent chaque option dépréciée encore utilisée : lisez-les après le premier démarrage. Les changements qui piègent le plus souvent :",{"type":38,"title":98,"items":99},"Changements cassants de la v3",[100,101,102,103,104,105],"**Swarm** : l'option `swarmMode` du provider Docker n'existe plus et bloque le démarrage. Docker Swarm a désormais son propre provider (`--providers.swarm`).","**Règles de routage** : `Headers` et `HeadersRegexp` deviennent `Header` et `HeaderRegexp`, `HostHeader` disparaît au profit de `Host`, et la plupart des matchers n'acceptent plus qu'une valeur.","**Chemins** : `Path` et `PathPrefix` ne lisent plus d'expression régulière ni de placeholder comme `{id}` ; une telle route ne correspond plus à rien. Passez à `PathRegexp`, qui suit la syntaxe regexp de Go, comme `HostRegexp`.","**Middlewares renommés ou allégés** : `IPWhiteList` devient `IPAllowList` (mêmes options) ; le middleware `headers` perd `sslRedirect`, `sslTemporaryRedirect`, `sslHost`, `sslForceHost` et `featurePolicy`.","**Content-Type** : Traefik ne devine plus le type d'une réponse que le backend n'a pas typée ; ajoutez le middleware `ContentType` si une application en dépend.","**Providers et observabilité retirés** : Marathon, Rancher v1, Traefik Pilot et les métriques InfluxDB v1 empêchent le démarrage ; le tracing passe uniquement par OpenTelemetry (plus d'export direct vers Jaeger, Zipkin ou Datadog).",{"type":107,"title":108,"headers":109,"rows":114},"comparison","Traefik v3, Nginx ou Caddy devant vos conteneurs",[110,111,112,113],"Critère","Traefik v3","Nginx","Caddy 2",[115,120,125,130,135],[116,117,118,119],"Configuration","Labels Docker, YAML ou TOML, prise en compte à chaud","Fichiers vhost statiques, `nginx -s reload` à chaque changement","Caddyfile ou API JSON, rechargement sans coupure",[121,122,123,124],"HTTPS automatique","Intégré (ACME : HTTP-01, TLS-ALPN-01, DNS-01)","Outil externe (certbot) et tâche de renouvellement","Intégré et actif par défaut",[126,127,128,129],"Découverte des conteneurs","Native, par le socket Docker","Absente : outil tiers ou édition manuelle","Via le module communautaire caddy-docker-proxy",[131,132,133,134],"HTTP\u002F3","Stable depuis la v3.0 (avril 2024), une option par entrypoint","Expérimental depuis nginx 1.25.0 (mai 2023), configuration dédiée","Actif par défaut depuis Caddy 2.6 (septembre 2022)",[136,137,138,139],"Prise en main","Moyenne : routers, services et middlewares à assimiler","Connue de tous, mais HTTPS + Docker demandent de l'outillage","La plus rapide pour quelques sites",{"type":34,"title":141,"body":142},"Dépannage : les erreurs les plus fréquentes","La plupart des incidents Traefik viennent de quatre sources : le DNS ou le pare-feu qui empêchent la validation Let's Encrypt, le fichier `acme.json`, un réseau Docker manquant et des labels mal écrits. Les symptômes et leurs corrections :",{"type":38,"title":144,"items":145},"Symptômes et corrections",[146,147,148,149,150],"**Certificat non obtenu, erreur ACME `unauthorized` ou `403` dans les logs** : Let's Encrypt n'atteint pas votre domaine. Vérifiez depuis l'extérieur que le port 80 répond (`curl -I http:\u002F\u002Fapp.example.com`) et que le DNS pointe sur le VPS (`dig +short app.example.com`). Derrière un CDN en mode proxy, préférez le `dnsChallenge`.","**`permissions 644 for \u002Facme.json are too open, please use 600`** : le résolveur refuse le fichier. Corrigez avec `chmod 600 \u002Fopt\u002Ftraefik\u002Facme.json` puis redémarrez Traefik ; ce contrôle protège les clés privées qui y sont stockées.","**Route visible dans le dashboard mais `502 Bad Gateway`** : le conteneur n'est pas sur le réseau `proxy`, ou le port interne est faux. Vérifiez avec `docker inspect \u003Cconteneur>` (section `Networks`), ajoutez le réseau ou le label `loadbalancer.server.port`, puis recréez le conteneur. Sur un conteneur relié à plusieurs réseaux, le label `traefik.docker.network=proxy` lève l'ambiguïté.","**Labels ignorés, route absente du dashboard** : il manque `traefik.enable=true` (obligatoire avec `exposedbydefault=false`), ou deux services déclarent le même nom de router. Les logs de Traefik signalent alors le conflit.","**BasicAuth qui refuse un bon mot de passe** : les `$` du hash ne sont pas doublés dans le `docker-compose.yml`. Dans un fichier Compose, chaque `$` devient `$$` ; dans un fichier de configuration dynamique YAML ou TOML, le hash se colle tel quel.",{"type":34,"title":152,"body":153},"Prochaine étape : durcir la stack","Traefik règle le routage et le TLS, mais une stack prête pour la production demande davantage : healthchecks, politique de redémarrage, rotation des logs, secrets hors du fichier Compose, sauvegarde des volumes (dont `acme.json`). Notre \u003Ca href=\"\u002Fblog\u002Fdocker-compose-production-checklist\">check-list Docker Compose en production\u003C\u002Fa> reprend ces points un par un. Et si vous hésitez encore sur l'outil, le \u003Ca href=\"\u002Fblog\u002Fchoisir-reverse-proxy-vps-caddy-traefik-nginx\">comparatif Caddy, Traefik et Nginx Proxy Manager\u003C\u002Fa> aide à trancher selon le nombre de services et le besoin de découverte automatique.","Lancez Traefik en quelques minutes sur un VPS Cloud ServOrbit","Commandez un VPS Cloud avec Docker préinstallé et déployez votre stack Traefik à partir du template Déploiement. Vos applications sont routées en HTTPS automatiquement.","Voir les VPS Cloud","\u002Fvps-cloud",[159,178,194],{"id":160,"slug":161,"slugs":162,"title":166,"excerpt":167,"readTime":168,"views":169,"isPinned":19,"noindex":19,"publishedAt":170,"updatedAt":171,"category":172,"categories":173,"featuredImage":28,"bgImage":29,"posterImage":175,"relatedSolution":176},33,"deployer-avec-caprover",{"fr":161,"en":163,"ar":164,"es":165},"deploy-your-applications-with-caprover-on-a-vps","انشر-تطبيقاتك-باستخدام-caprover-على-خادم-vps","desplegar-aplicaciones-con-caprover-en-un-vps","Déployer vos applications avec CapRover sur un VPS","Guide complet CapRover : installation, captain-definition, CI\u002FCD GitHub Actions, cluster multi-nœuds, sauvegardes et dépannage.",10,2,"2026-05-18T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":18,"name":23,"slug":24,"color":25,"icon":24},[174],{"id":18,"name":23,"slug":24,"color":25,"icon":24},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-caprover-poster.svg",{"categorySlug":24,"appSlug":177},"caprover",{"id":179,"slug":180,"slugs":181,"title":185,"excerpt":186,"readTime":17,"views":187,"isPinned":19,"noindex":19,"publishedAt":188,"updatedAt":189,"category":190,"categories":191,"featuredImage":28,"bgImage":29,"posterImage":193,"relatedSolution":28},34,"deployer-avec-dokku",{"fr":180,"en":182,"ar":183,"es":184},"deploy-your-applications-with-dokku-on-a-vps","انشر-تطبيقاتك-باستخدام-dokku-على-خادم-vps","desplegar-aplicaciones-con-dokku-en-un-vps","Déployer vos applications avec Dokku sur un VPS","Guide complet Dokku v0.35 : installation, buildpacks, variables d'env, rollback, plugins postgres\u002Fredis\u002Fletsencrypt et dépannage des erreurs courantes.",1,"2026-05-17T00:00:00+00:00","2026-10-18T21:57:59+00:00",{"id":18,"name":23,"slug":24,"color":25,"icon":24},[192],{"id":18,"name":23,"slug":24,"color":25,"icon":24},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-dokku-poster.svg",{"id":195,"slug":196,"slugs":197,"title":201,"excerpt":202,"readTime":168,"views":187,"isPinned":19,"noindex":19,"publishedAt":203,"updatedAt":171,"category":204,"categories":205,"featuredImage":28,"bgImage":29,"posterImage":207,"relatedSolution":208},35,"deployer-avec-portainer",{"fr":196,"en":198,"ar":199,"es":200},"deploy-your-applications-with-portainer-on-a-vps","انشر-تطبيقاتك-باستخدام-portainer-على-خادم-vps","desplegar-aplicaciones-con-portainer-en-un-vps","Déployer vos applications avec Portainer sur un VPS","Pilotez Docker visuellement avec Portainer sur votre VPS : conteneurs, stacks, volumes et réseaux gérés depuis une interface web claire.","2026-05-16T00:00:00+00:00",{"id":18,"name":23,"slug":24,"color":25,"icon":24},[206],{"id":18,"name":23,"slug":24,"color":25,"icon":24},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-portainer-poster.svg",{"categorySlug":24,"appSlug":209},"portainer",true,1794270693606]