
Self-hosting Meilisearch the easy way
Yulei ChenMeilisearch is a lightning-fast, open-source search engine built for modern apps. It gives you typo-tolerant full-text search, filters, faceting, and instant results out of the box. Meilisearch Cloud exists, but pricing starts at $30/month for production use, and you're locked into their infrastructure.
Sliplane is a managed container platform that makes self-hosting painless. With one-click deployment, you can get Meilisearch up and running in minutes with no server setup, no reverse proxy config, and no infrastructure to maintain.
Prerequisites
Before deploying, ensure you have a Sliplane account (free trial available).
Quick start
Sliplane provides one-click deployment with presets.
- Click the deploy button above
- Select a project
- Select a server. If you just signed up you get a 48-hour free trial server
- Click Deploy!
About the preset
The one-click deploy above uses Sliplane's Meilisearch preset. Here's what's included:
- Official
getmeili/meilisearchDocker image - Pinned to version v1.42.1 for stability (check Docker Hub for newer versions)
- Persistent storage mounted to
/meili_dataso your indexes survive restarts - Production mode enabled (
MEILI_ENV=production) - Analytics disabled by default (
MEILI_NO_ANALYTICS=true) - A randomly generated master key for API authentication
Next steps
Once Meilisearch is running on Sliplane, access it using the domain Sliplane provided (e.g. meilisearch-xxxx.sliplane.app).
Authentication
Meilisearch uses API key-based authentication. In production mode, the master key is required to access the API. You can find it in the MEILI_MASTER_KEY environment variable in your Sliplane service settings.
The master key is used to generate two default API keys:
- Default Search API Key: for client-side search queries only
- Default Admin API Key: for indexing, settings, and all other operations
To retrieve these keys, call the keys endpoint with your master key:
curl -H "Authorization: Bearer YOUR_MASTER_KEY" \
https://meilisearch-xxxx.sliplane.app/keys
Use the Admin API Key for indexing and the Search API Key for frontend queries. Never expose your master key in client-side code.
Adding documents
To index your first documents, send a POST request with the Admin API Key:
curl -X POST "https://meilisearch-xxxx.sliplane.app/indexes/movies/documents" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_ADMIN_API_KEY" \
--data-binary '[
{ "id": 1, "title": "The Matrix", "genre": "sci-fi" },
{ "id": 2, "title": "Inception", "genre": "sci-fi" },
{ "id": 3, "title": "Parasite", "genre": "thriller" }
]'
Environment variables
Here are the key environment variables you can customize in your Sliplane service settings:
| Variable | Default | Description |
|---|---|---|
MEILI_MASTER_KEY | (generated) | Master key for API authentication |
MEILI_ENV | production | Set to development for detailed error messages |
MEILI_NO_ANALYTICS | true | Disable anonymous analytics |
MEILI_MAX_INDEXING_MEMORY | (auto) | Max RAM for indexing, e.g. 1 GiB |
MEILI_MAX_INDEXING_THREADS | (auto) | Max threads for indexing |
See the Meilisearch configuration docs for a full list of options.
Logging
Meilisearch logs to STDOUT by default, which works perfectly with Sliplane's built-in log viewer. You can adjust the log level with the MEILI_LOG_LEVEL environment variable. For more logging tips, check out our post on how to use Docker logs.
| Variable | Options |
|---|---|
MEILI_LOG_LEVEL | ERROR, WARN, INFO (default), DEBUG, TRACE |
Troubleshooting
If something isn't working as expected, set MEILI_LOG_LEVEL to DEBUG in your environment variables and redeploy. This gives you much more detail about what Meilisearch is doing under the hood.
You can also check the health endpoint at /health to confirm the service is running. A healthy instance returns {"status":"available"}.
Cost comparison
Of course you can also self-host Meilisearch with other cloud providers. Here is a pricing comparison for the most common ones:
| Provider | vCPU Cores | RAM | Disk | Estimated Monthly Cost | Notes |
|---|---|---|---|---|---|
| Sliplane | 2 | 2 GB | 40 GB | €9 | charge per server |
| Render | 1 | 2 GB | 40 GB | ~$35-$45 | VM Small |
| Fly.io | 2 | 2 GB | 40 GB | ~$20-$25 | VM + volume |
| Railway | 2 | 2 GB | 40 GB | ~$15-$66 | Usage-based |
FAQ
What can I use Meilisearch for?
Meilisearch is great for any app that needs fast, typo-tolerant search. Common use cases include e-commerce product search, documentation search, autocomplete, and content discovery. It handles filters, faceted search, and geo search out of the box.
How do I configure search ranking and relevancy?
Meilisearch lets you customize ranking rules, searchable attributes, and filterable attributes per index. You can configure these through the settings API. For example, you can prioritize certain fields or add custom ranking rules based on your data.
How do I update Meilisearch?
Change the image tag in your service settings (e.g. from v1.42.1 to a newer version) and redeploy. Check Docker Hub for the latest stable version. Meilisearch handles database migrations automatically on startup.
How does Meilisearch compare to Elasticsearch?
Meilisearch is designed for instant, front-facing search with minimal configuration. Elasticsearch is more powerful for complex analytics and log aggregation but comes with significantly more operational overhead. If you need simple, fast search for your app, Meilisearch is the better choice.
How much data can Meilisearch handle?
Meilisearch stores its index in memory-mapped files, so disk space is your main constraint. On the Sliplane starter plan with 40 GB disk, you can comfortably index millions of documents depending on document size. For very large datasets, consider upgrading to a server with more RAM and disk.