ITSkillsCenter
Développement Web

Déployer Meilisearch sur Hetzner avec Coolify : tutoriel complet 2026

6 دقائق للقراءة

📍 Article principal du cluster : Meilisearch 2026 : le guide complet. Ce tutoriel fait partie du cluster Meilisearch.

Quinze minutes pour passer d’un VPS vide à un Meilisearch de production accessible en HTTPS, prêt à indexer votre catalogue. Ce tutoriel détaille la procédure exacte sur Hetzner CX22 (4,51 €/mois) via Coolify v4, le PaaS open source qui transforme l’auto-hébergement en clic-souris. Méthode validée sur des installations à Dakar, Casablanca, Lagos et Tunis.

Prérequis

  • Un VPS Hetzner CX22 ou OVH VPS-1 sous Ubuntu 22.04 LTS / Debian 12.
  • Coolify v4 déjà installé (voir Guide Coolify).
  • Un nom de domaine avec enregistrement DNS A pointant vers le VPS (par exemple search.votre-entreprise.com).
  • Niveau attendu : intermédiaire.
  • Temps estimé : 15 à 25 minutes.

Étape 1 — Créer le DNS et propager

Dans votre panel DNS (Cloudflare, OVH, Gandi, Namecheap), créez un enregistrement A : search.votre-entreprise.com → IP de votre VPS. TTL 300 secondes (5 minutes) pour faciliter d’éventuels ajustements. Vérifiez la propagation : dig +short search.votre-entreprise.com. Si Cloudflare est devant, désactivez le proxy (orange cloud → gris) le temps de l’émission Let’s Encrypt.

Étape 2 — Lancer le service Meilisearch dans Coolify

Dans l’interface Coolify : Resources+ NewService. Recherchez « Meilisearch » dans le catalogue. Le template officiel Coolify déploie la dernière stable (v1.10 au moment de l’écriture) avec un volume persistant pré-configuré.

Nom du service : meilisearch-prod. Serveur : votre Hetzner CX22. Projet : Production (ou créez-le). Cliquez Continue.

Étape 3 — Configurer les variables d’environnement

Sur l’écran de configuration, définissez :

MEILI_ENV=production
MEILI_MASTER_KEY=générez-une-clé-de-32-caractères-minimum
MEILI_DB_PATH=/data/data.ms
MEILI_DUMP_DIR=/data/dumps
MEILI_HTTP_PAYLOAD_SIZE_LIMIT=100MB
MEILI_LOG_LEVEL=INFO
MEILI_NO_ANALYTICS=true

La MEILI_MASTER_KEY est la clé d’admin qui contrôle tout. Générez-la avec :

openssl rand -base64 48 | tr -d '/+=' | head -c 32

Notez-la dans votre coffre Vaultwarden (collection « Infrastructure ») immédiatement. Sans elle, vous perdez le contrôle administratif de l’instance.

Étape 4 — Domaine et HTTPS

Dans l’onglet Domains, saisissez https://search.votre-entreprise.com. Coolify configure son reverse proxy interne (Traefik 2.10) pour gérer le certificat Let’s Encrypt automatiquement. Activez Force HTTPS pour rediriger HTTP → HTTPS.

Le port interne est 7700 par défaut, Coolify le mappe automatiquement au 443 public. Aucune configuration réseau supplémentaire.

Étape 5 — Déployer et vérifier

Cliquez Deploy. Les logs en temps réel montrent : pulling getmeili/meilisearch:v1.10, creating volume, requesting Let’s Encrypt certificate, service healthy. Comptez 60 secondes au premier déploiement.

Test de fonctionnement :

curl https://search.votre-entreprise.com/health
# Retourne : {"status":"available"}

Avec votre master key :

curl -H "Authorization: Bearer VOTRE_MASTER_KEY" \
  https://search.votre-entreprise.com/version
# Retourne : {"pkgVersion":"1.10.0","commitSha":"...","commitDate":"..."}

Étape 6 — Créer une API key search-only

Le master key ne doit jamais être utilisé côté front-end. Créez une API key publique avec scope search :

curl -X POST 'https://search.votre-entreprise.com/keys' \
  -H 'Authorization: Bearer VOTRE_MASTER_KEY' \
  -H 'Content-Type: application/json' \
  --data '{
    "description": "Frontend search-only key",
    "actions": ["search"],
    "indexes": ["*"],
    "expiresAt": null,
    "name": "frontend-public"
  }'

La réponse contient "key": "..." — c’est cette clé que vous mettez dans votre code frontend Next.js, Astro ou Vue. Elle ne peut faire que des recherches en lecture, jamais modifier les index.

Étape 7 — Premier index et premier document

curl -X POST 'https://search.votre-entreprise.com/indexes' \
  -H 'Authorization: Bearer VOTRE_MASTER_KEY' \
  -H 'Content-Type: application/json' \
  --data '{ "uid": "products", "primaryKey": "id" }'

curl -X POST 'https://search.votre-entreprise.com/indexes/products/documents' \
  -H 'Authorization: Bearer VOTRE_MASTER_KEY' \
  -H 'Content-Type: application/json' \
  --data '[
    {"id":1,"title":"Pagne wax indigo Faso","price":12500,"category":"tissus"},
    {"id":2,"title":"Bazin riche Mali","price":18000,"category":"tissus"},
    {"id":3,"title":"Sac en cuir Touareg","price":35000,"category":"maroquinerie"}
  ]'

curl 'https://search.votre-entreprise.com/indexes/products/search' \
  -H 'Authorization: Bearer VOTRE_API_KEY_SEARCH' \
  -H 'Content-Type: application/json' \
  --data '{ "q": "pagne" }'

La réponse retourne le document 1 avec son score de pertinence. Si vous tapez « pagn » ou « pagnee », Meilisearch retourne aussi le document 1 grâce à la typo-tolérance native.

Étape 8 — Configurer les sauvegardes

Cron quotidien sur le VPS pour créer un dump et l’envoyer vers MinIO/B2 :

0 3 * * * curl -X POST -H 'Authorization: Bearer MASTER_KEY' \
  https://search.votre-entreprise.com/dumps && \
  rclone copy /var/lib/coolify/services/meilisearch-prod/data/dumps \
    b2-vaultwarden:meilisearch-backups/$(date +\%F)/

Erreurs fréquentes

Erreur Cause Solution
401 Unauthorized partout Header Authorization mal formé Vérifier Bearer + clé sans espaces parasites
413 Payload Too Large Document > 100 Mo Augmenter MEILI_HTTP_PAYLOAD_SIZE_LIMIT
Volume non persistant Coolify volume mal mappé Vérifier dans Storages que /data est mappé
Latence > 200 ms RAM saturée Passer au CCX13 (8 Go)
Master key visible dans GitHub Push sans .env ignoré Révoquer la clé, en générer une nouvelle, pusher .gitignore
CORS bloque le frontend Header Access-Control-Allow-Origin manquant Configurer Caddy/Traefik pour ajouter les CORS appropriés

Adaptation au contexte ouest-africain

Trois ajustements pour les PME africaines. Latence acceptable : 95 ms ping Hetzner Falkenstein depuis Dakar via le câble ACE est bonne pour la recherche e-commerce ; pour de l’autocomplete sur chaque caractère, débouncer côté frontend à 300 ms évite la saturation. Paiement Hetzner : carte Visa émise par CBAO, BICIS ou Société Générale CI fonctionne directement. Wave Business carte virtuelle aussi. Stockage : 25 Go SSD inclus dans le CX22 tiennent largement 5 millions de documents typiques (catalogue produits, articles).

Tutoriels frères du cluster

FAQ

Coolify ou docker-compose direct ? Coolify pour 95% des cas (gestion centralisée, HTTPS auto, redémarrages, monitoring). docker-compose direct si vous préférez tout contrôler manuellement et avez moins de 3 services.

Quelle taille pour 1 million de documents ? Hetzner CCX13 (15 €/mois, 8 Go RAM) tient confortablement 1 à 2 millions de documents avec recherches < 50 ms.

Comment monitorer la santé en continu ? Uptime Kuma sur l’endpoint /health toutes les 60 secondes, alerte Telegram ou Discord si réponse différente de {"status":"available"}.

Master key compromise — que faire ? Régénérer la MEILI_MASTER_KEY dans Coolify, redéployer (toutes les sessions sont invalidées), recréer les API keys dérivées, mettre à jour les secrets dans le frontend.

Peut-on migrer un dump entre versions ? Oui, Meilisearch supporte les dumps inter-versions depuis v1.0. Suivre le changelog pour les rares cas de breaking changes.

Pour aller plus loin

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité