[{"data":1,"prerenderedAt":197},["ShallowReactive",2],{"seo-verification":3,"blog-heberger-appwrite-vps-ma-fr":6,"promo-bar-likely":196},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-heberger-appwrite-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":138,"ctaBody":139,"ctaButton":140,"ctaUrl":141,"relatedPosts":142},61,"heberger-appwrite-vps",{"fr":10,"en":12,"ar":13,"es":14},"hosting-appwrite-on-a-vps","استضافة-appwrite-على-خادم-vps","alojar-appwrite-en-un-vps","Héberger Appwrite sur un VPS : guide complet self-hosted","Déployez Appwrite sur votre VPS avec Docker : stack complète, Traefik SSL, sauvegardes, durcissement et comparatif Supabase.",10,1,false,"2026-04-20T00:00:00+00:00","2026-09-19T02:00:43+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-appwrite-vps-poster.svg",{"categorySlug":25,"appSlug":34},"appwrite","Appwrite est un backend-as-a-service open source pensé pour les développeurs web et mobiles : base documentaire, authentification, stockage de fichiers, fonctions serverless et messaging. L'auto-héberger sur un VPS vous offre un backend complet self-hosted, avec SDK multi-plateformes et sans facturation à l'usage. Ce guide couvre l'installation, la configuration de Traefik, le durcissement de production et les sauvegardes — de A à Z.",[37,41,53,56,59,81,84,87,131,135],{"type":38,"title":39,"body":40},"h2","Pourquoi auto-héberger Appwrite sur un VPS","Appwrite regroupe en une seule plateforme tout ce dont une application a besoin côté serveur : authentification avec plus de 30 méthodes OAuth, base de données documentaire avec permissions granulaires, stockage de fichiers avec transformation d'images, fonctions serverless dans plusieurs langages, et messaging. Sa version cloud facture par usage et par ressources ; en self-hostant sur un VPS, vous déployez l'ensemble via Docker et vous le pilotez depuis une console web élégante, sans plafond.\n\nC'est particulièrement adapté aux développeurs Flutter, React Native ou web qui veulent un backend prêt à l'emploi avec des SDK officiels, tout en gardant les données et la logique sur leur propre infrastructure. Vous contrôlez les fonctions, les clés API et les permissions, et vous évoluez à votre rythme — sans subir les quotas ou les hausses tarifaires d'un cloud public.",{"type":42,"title":43,"items":44},"ul","Les bénéfices concrets d'un Appwrite auto-hébergé",[45,46,47,48,49,50,51,52],"Backend tout-en-un : Auth, Databases, Storage, Functions et Messaging dans une console unique.","SDK officiels pour Flutter, React Native, Web, Android, iOS, Node, Python et plus.","Plus de 30 fournisseurs OAuth intégrés (Google, GitHub, Apple...) sans code.","Fonctions serverless self-hosted : exécutez votre logique métier sans service externe.","Permissions granulaires au niveau document et collection, gérées depuis la console.","Pas de facturation à l'exécution ni de quota d'utilisateurs : forfait VPS fixe.","Données hébergées sur votre infrastructure : conformité RGPD facilitée, aucune dépendance cloud tierce.","Realtime intégré : abonnez-vous aux changements de documents, de fichiers et d'état de session via WebSocket.",{"type":38,"title":54,"body":55},"Architecture interne : ce que Docker lance réellement","Avant d'installer, il est utile de savoir ce qu'Appwrite orchestre. L'installateur officiel génère un `docker-compose.yml` avec une vingtaine de services au minimum :\n\n- **appwrite** — le serveur API principal (PHP, expose le port 80\u002F443 via Traefik).\n- **appwrite-console** — la console web d'administration (React, servie par le même domaine sur `\u002F`).\n- **appwrite-realtime** — le service WebSocket pour les abonnements temps réel.\n- **appwrite-worker-*** — une série de workers pour les tâches asynchrones : envoi d'e-mails, webhooks sortants, nettoyage de fichiers temporaires, etc.\n- **appwrite-executor** — le runtime d'exécution des Functions serverless (Docker-in-Docker).\n- **mariadb** — la base relationnelle interne (utilisateurs, projets, règles de permission).\n- **redis** — le cache et la file de tâches (jobs workers, sessions, rate-limiting).\n- **traefik** — le reverse proxy intégré qui gère le routage HTTPS et les certificats Let's Encrypt.\n\nPour un VPS de développement, seul le nœud `core` est strictement nécessaire : API, Console, MariaDB, Redis et Traefik. Les workers et l'executor sont indispensables en production si vous utilisez les Functions, les webhooks ou l'envoi d'e-mails. **Comptez 4 Go de RAM minimum pour cette stack complète** : MariaDB et les workers d'arrière-plan se partagent la mémoire disponible, et chaque invocation de Function démarre son propre conteneur éphémère.",{"type":38,"title":57,"body":58},"Prérequis matériels et logiciels","Pour une instance de développement ou de test, 2 vCPU et 4 Go de RAM avec 40 Go de SSD suffisent. Pour de la production avec des fonctions serverless actives et plusieurs apps clientes, visez 4 vCPU, 8 Go de RAM et 80 Go de SSD — chaque invocation de Function démarre son propre conteneur éphémère, ce qui pèse sur le disque et le CPU.\n\nCôté logiciel : Ubuntu 22.04 ou 24.04 LTS, Docker CE et Docker Compose v2 (Appwrite gère son propre Traefik pour le routage et le SSL), et un nom de domaine pointant vers l'IP du VPS — par exemple `api.monapp.com`. Les ports 80 et 443 doivent être libres et ouverts dans `ufw` pour que Traefik obtienne les certificats Let's Encrypt via le challenge ACME.\n\n**Un point sur le stockage.** Les Functions génèrent des images Docker intermédiaires qui s'accumulent sur le SSD. Sans purge régulière, une instance qui tourne plusieurs mois peut saturer son disque. Prévoyez une tâche `docker system prune --volumes -f` planifiée en cron hebdomadaire, et surveillez l'espace libre avec `df -h`.",{"type":60,"title":61,"steps":62},"steps","Déployer Appwrite self-hosted avec Docker",[63,66,69,72,75,78],{"title":64,"body":65},"Préparer le VPS et ouvrir les ports","Installez Docker CE et Docker Compose v2, puis ouvrez les ports nécessaires :\n\n```bash\nufw allow 80\u002Ftcp\nufw allow 443\u002Ftcp\nufw enable\n```\n\nFaites pointer votre domaine (ex. `api.monapp.com`) vers l'IP du VPS via un enregistrement A. Attendez la propagation DNS avant de lancer l'installateur — Traefik a besoin que le domaine résolve réellement pour passer le challenge ACME.",{"title":67,"body":68},"Lancer l'installateur interactif officiel","Exécutez l'installateur en une ligne :\n\n```bash\ndocker run -it --rm \\\n  --volume \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock \\\n  --volume \"$(pwd)\"\u002Fappwrite:\u002Fusr\u002Fsrc\u002Fcode\u002Fappwrite:rw \\\n  --entrypoint=\"install\" \\\n  appwrite\u002Fappwrite\n```\n\nL'assistant vous demande le domaine principal, le port HTTP (80), le port HTTPS (443), un e-mail pour Let's Encrypt et quelques options. Il génère un `docker-compose.yml` et un fichier `.env` avec les secrets générés aléatoirement. **Ne touchez pas à ces secrets à la main** — changez-les uniquement via les variables d'environnement du `.env`.",{"title":70,"body":71},"Vérifier la configuration du domaine et du SSL","Après le démarrage (`docker compose up -d`), attendez 30 à 60 secondes que Traefik émette le certificat. Vérifiez :\n\n```bash\ncurl -I https:\u002F\u002Fapi.monapp.com\u002Fv1\u002Fhealth\n```\n\nLa réponse doit être `HTTP\u002F2 200` avec un `content-type: application\u002Fjson`. Si Traefik n'a pas encore de certificat, vous obtenez une erreur TLS — c'est normal pendant les premières secondes. En cas de blocage prolongé, vérifiez que les ports 80\u002F443 ne sont pas filtrés par un pare-feu amont et que le domaine résout vers la bonne IP (`dig api.monapp.com`).",{"title":73,"body":74},"Créer le compte administrateur et le premier projet","Ouvrez `https:\u002F\u002Fapi.monapp.com` dans votre navigateur. Appwrite vous invite à créer le compte administrateur racine lors du premier accès — ce compte est le seul à avoir accès aux réglages de la plateforme. Depuis la console, créez un projet, ajoutez une plateforme (Web, Flutter, Apple…) en déclarant le hostname autorisé, et récupérez l'ID de projet. Ces informations alimentent l'initialisation du SDK côté client :\n\n```bash\nnpm install appwrite\n```\n\n```bash\nimport { Client } from 'appwrite';\nconst client = new Client()\n  .setEndpoint('https:\u002F\u002Fapi.monapp.com\u002Fv1')\n  .setProject('\u003Cvotre-project-id>');\n```",{"title":76,"body":77},"Durcir la configuration de production","Ouvrez le fichier `.env` généré par l'installateur et ajustez les variables suivantes :\n\n- `_APP_OPTIONS_ABUSE=enabled` — active le rate-limiting intégré par IP.\n- `_APP_OPTIONS_FORCE_HTTPS=enabled` — redirige toutes les requêtes HTTP vers HTTPS.\n- `_APP_SMTP_HOST` \u002F `_APP_SMTP_PORT` \u002F `_APP_SMTP_SECURE` \u002F `_APP_SMTP_USERNAME` \u002F `_APP_SMTP_PASSWORD` — configurez votre relais SMTP pour les e-mails de vérification et de réinitialisation de mot de passe.\n- `_APP_CONSOLE_WHITELIST_ROOT=disabled` si vous souhaitez permettre l'inscription libre à la console (non recommandé en prod) ; laissez-le sur `enabled` et renseignez `_APP_CONSOLE_WHITELIST_EMAILS` avec les adresses autorisées.\n\nRedémarrez les services après modification : `docker compose up -d`.",{"title":79,"body":80},"Configurer les sauvegardes automatisées","Deux volumes Docker contiennent toutes les données persistantes d'Appwrite :\n\n- `appwrite-mariadb` — la base de données (utilisateurs, projets, documents, règles).\n- `appwrite-uploads` — les fichiers déposés par les apps clientes.\n\nPlanifiez un dump quotidien :\n\n```bash\ndocker exec appwrite-mariadb mysqldump \\\n  -u appwrite -p\"$MARIADB_ROOT_PASSWORD\" appwrite \\\n  > \u002Fbackups\u002Fappwrite-$(date +%Y%m%d).sql\n```\n\nArchivez aussi le volume `appwrite-uploads` (un `tar` des données ou un snapshot de volume selon votre infrastructure). **Sauvegardez également `_APP_OPENSSL_KEY_V1`** — Appwrite l'utilise pour chiffrer les fichiers et certaines données sensibles. Sans cette clé, une restauration de base rend les contenus chiffrés illisibles.",{"type":38,"title":82,"body":83},"Réseau et Traefik : ce qui se passe derrière le rideau","Traefik est le seul point d'entrée réseau d'Appwrite : il écoute sur les ports 80 et 443, gère les certificats Let's Encrypt, et route les requêtes vers le bon service interne. Cette intégration est transparente — vous n'avez pas de configuration Traefik à écrire, elle est générée par l'installateur.\n\nQuelques points importants si vous ajoutez un reverse proxy en amont (nginx, Cloudflare Tunnel…) :\n\n- **Ne doublez pas le TLS.** Si votre proxy amont termine déjà le SSL et transmet en HTTP à Appwrite, désactivez le challenge ACME en mettant `_APP_OPTIONS_FORCE_HTTPS=disabled` et `_APP_SYSTEM_SECURITY_EMAIL_ADDRESS=` à vide pour éviter que Traefik tente d'obtenir un certificat qu'il ne peut pas valider.\n- **Transmettez l'IP réelle.** Ajoutez `X-Forwarded-For` et `X-Real-IP` dans votre proxy amont, et activez le trust des headers dans Traefik (déjà configuré par défaut dans l'installateur Appwrite).\n- **Ports de la console.** La console web et l'API sont servies sous le même domaine : ne routez pas le port 9501 (Realtime interne) publiquement, il est géré par Traefik en interne.\n\nSi vous placez Appwrite derrière Cloudflare en mode proxifié, passez le mode SSL de la zone en **Full (strict)** — en mode Flexible, nginx redirige HTTP→HTTPS, ce qui crée une boucle de redirection infinie entre Cloudflare et Traefik.",{"type":38,"title":85,"body":86},"Dépannage des problèmes courants","**La console affiche « Could not connect to the Appwrite API ».**\nVérifiez que les variables `_APP_DOMAIN` et `_APP_DOMAIN_TARGET` dans `.env` correspondent exactement au domaine que vous utilisez. Un sous-domaine mal renseigné (avec ou sans `www`) empêche Traefik de router correctement. Relancez `docker compose up -d` après toute modification du `.env`.\n\n**Les e-mails de vérification n'arrivent pas.**\nAppwrite ne dispose pas de relais SMTP intégré — il faut configurer `_APP_SMTP_*` avec un service externe (Mailgun, Resend, votre propre serveur). Sans SMTP configuré, les e-mails sont mis en file et ignorés. Vérifiez les logs du worker `appwrite-worker-mails` : `docker compose logs appwrite-worker-mails --tail 50`.\n\n**Les Functions serverless s'exécutent en timeout.**\nChaque Function démarre son propre conteneur Docker. Sur un VPS à 2 Go de RAM, le démarrage à froid dépasse souvent les 10 secondes, ce qui déclenche le timeout par défaut. Augmentez `_APP_FUNCTIONS_TIMEOUT` dans `.env` et prévoyez au moins 4 Go de RAM pour un usage en production. Surveillez aussi l'espace disque — les images de runtime restent sur le SSD après exécution.\n\n**Le certificat SSL ne se génère pas.**\nTraefik a besoin que les ports 80 et 443 répondent depuis l'extérieur pour passer le challenge ACME. Si un pare-feu amont (règles de sécurité de votre fournisseur VPS) bloque ces ports, le challenge échoue silencieusement. Testez depuis une machine externe : `curl -I http:\u002F\u002Fapi.monapp.com` doit répondre (même en 302), pas expirer.\n\n**MariaDB démarre mais la console affiche des erreurs de base.**\nSi vous avez modifié manuellement le `.env` entre deux démarrages, vérifiez que `_APP_DB_HOST`, `_APP_DB_USER` et `_APP_DB_PASS` correspondent aux valeurs du conteneur MariaDB. Un redémarrage partiel (un seul service) sans `docker compose down` peut laisser des conteneurs orphelins avec d'anciennes variables en mémoire.",{"type":88,"title":89,"headers":90,"rows":94},"comparison","Appwrite vs Supabase : lequel self-hoster ?",[91,92,93],"Critère","Appwrite","Supabase",[95,99,103,107,111,115,119,123,127],[96,97,98],"Base de données","MariaDB, modèle documentaire","PostgreSQL natif, SQL complet",[100,101,102],"Approche","Orienté SDK et apps mobiles","Orienté SQL et apps relationnelles",[104,105,106],"Fonctions serverless","Natives, multi-langages intégrées","Edge Functions (Deno)",[108,109,110],"Installation","Installateur interactif officiel","Compose à configurer manuellement",[112,113,114],"SSL \u002F routage","Traefik intégré, automatique","Reverse proxy externe à ajouter",[116,117,118],"Recherche vectorielle \u002F IA","Non native","Native via pgvector",[120,121,122],"Realtime","WebSocket intégré, multi-ressources","Postgres CDC via Realtime",[124,125,126],"Idéal pour","Flutter, React Native, mobile-first","SQL avancé, RAG, relationnel",[128,129,130],"Console d'administration","Console riche et guidée","Studio centré sur les tables SQL",{"type":132,"title":133,"body":134},"tip","Mises à jour et maintenance continue","Pour mettre à jour Appwrite, relancez l'installateur avec la nouvelle version ou modifiez le tag d'image dans `docker-compose.yml` et exécutez `docker compose pull && docker compose up -d`. Appwrite applique les migrations de schéma automatiquement au démarrage du conteneur API — aucune commande manuelle n'est nécessaire.\n\nPlanifiez également une purge hebdomadaire des images Docker orphelines pour éviter la saturation du SSD :\n\n```bash\ndocker system prune --volumes -f\n```\n\nSauvegardez `_APP_OPENSSL_KEY_V1` dans un coffre séparé (gestionnaire de secrets, fichier chiffré hors du VPS). Sans cette clé, une restauration de base rend les fichiers chiffrés et certaines données sensibles définitivement illisibles — c'est le seul point de non-retour d'une installation Appwrite.",{"type":132,"title":136,"body":137},"Ce template fournit le cœur — les Functions viennent ensuite","L'installeur officiel d'Appwrite génère plus de 25 conteneurs, dont des workers d'arrière-plan et un runtime d'exécution pour les Functions serverless et les Sites. Pour garder une empreinte VPS réduite, ce template ne fournit que le cœur autosuffisant — le serveur d'API, MariaDB, Redis et Traefik — qui fait pleinement fonctionner Auth, Databases, Storage, Realtime et la Console. Les Functions serverless, les webhooks sortants et l'envoi d'e-mails en arrière-plan nécessitent les conteneurs worker et executor supplémentaires et ne sont pas activés ici. Lorsque votre projet en aura besoin, passez à la stack docker-compose officielle complète d'Appwrite et prévoyez au moins 4 Go de RAM. Pour les sauvegardes, planifiez des snapshots des volumes Docker `appwrite-mariadb` (données) et `appwrite-uploads` (fichiers).","Self-hostez votre backend Appwrite","Le VPS Cloud ServOrbit avec template Docker prêt à l'emploi et SSD accueille toute la stack Appwrite, fonctions serverless comprises, en HTTPS.","Déployer mon VPS Cloud","\u002Fvps-cloud",[143,161,179],{"id":144,"slug":145,"slugs":146,"title":150,"excerpt":151,"readTime":152,"views":18,"isPinned":19,"noindex":19,"publishedAt":153,"updatedAt":154,"category":155,"categories":156,"featuredImage":30,"bgImage":31,"posterImage":158,"relatedSolution":159},56,"heberger-postgresql-vps",{"fr":145,"en":147,"ar":148,"es":149},"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,"2026-04-25T00:00:00+00:00","2026-10-21T15:21:37+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[157],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-postgresql-vps-poster.svg",{"categorySlug":25,"appSlug":160},"postgresql-stack",{"id":162,"slug":163,"slugs":164,"title":168,"excerpt":169,"readTime":152,"views":170,"isPinned":19,"noindex":19,"publishedAt":171,"updatedAt":172,"category":173,"categories":174,"featuredImage":30,"bgImage":31,"posterImage":176,"relatedSolution":177},57,"heberger-mysql-vps",{"fr":163,"en":165,"ar":166,"es":167},"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.",0,"2026-04-24T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[175],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-mysql-vps-poster.svg",{"categorySlug":25,"appSlug":178},"mysql-stack",{"id":180,"slug":181,"slugs":182,"title":186,"excerpt":187,"readTime":17,"views":170,"isPinned":19,"noindex":19,"publishedAt":188,"updatedAt":189,"category":190,"categories":191,"featuredImage":30,"bgImage":31,"posterImage":193,"relatedSolution":194},58,"heberger-redis-vps",{"fr":181,"en":183,"ar":184,"es":185},"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é.","2026-04-23T00:00:00+00:00","2026-09-08T21:59:59+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[192],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-redis-vps-poster.svg",{"categorySlug":25,"appSlug":195},"redis-stack",true,1794270712056]