Production
Here an example of how to setup Meilisearch into production on Debian server.
Install Meilisearch
Install Meilisearch with curl
curl -L https://install.meilisearch.com | sh
Launch Meilisearch
./meilisearch
Move it to /usr/bin
sudo mv ./meilisearch /usr/bin/meilisearch
Set permissions
sudo chown root:root /usr/bin/meilisearch
sudo chmod +x /usr/bin/meilisearch
Create Meilisearch user
sudo useradd -d /var/lib/meilisearch -b /bin/false -m -r meilisearch
Add current user to meilisearch
group
sudo usermod -a -G meilisearch $USER
Create configuration
Create configuration file
curl https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml > ~/meilisearch.toml
Move it to /etc/meilisearch.toml
sudo mv ~/meilisearch.toml /etc/meilisearch.toml
Edit it
sudo vim /etc/meilisearch.toml
You can generate a 16 bytes key with openssl
for YOUR_MASTER_KEY_VALUE
openssl rand -hex 16
Replace YOUR_MASTER_KEY_VALUE
with your key
# This file shows configuration of Meilisearch.
# All variables are defined here: https://www.meilisearch.com/docs/learn/configuration/instance_options#environment-variables
db_path = "/var/lib/meilisearch/data" # default "./data.ms"
env = "production" # default "development"
http_addr = "localhost:7700"
master_key = "YOUR_MASTER_KEY_VALUE"
no_analytics = true # default false
http_payload_size_limit = "100 MB"
log_level = "INFO"
# max_indexing_memory = "2 GiB"
# max_indexing_threads = 4
#############
### DUMPS ###
#############
dump_dir = "/var/lib/meilisearch/dumps" # default "dumps/"
# import_dump = "./path/to/my/file.dump"
ignore_missing_dump = false
ignore_dump_if_db_exists = false
#################
### SNAPSHOTS ###
#################
schedule_snapshot = false
snapshot_dir = "/var/lib/meilisearch/snapshots" # default "snapshots/"
# import_snapshot = "./path/to/my/snapshot"
ignore_missing_snapshot = false
ignore_snapshot_if_db_exists = false
###########
### SSL ###
###########
# ssl_auth_path = "./path/to/root"
# ssl_cert_path = "./path/to/certfile"
# ssl_key_path = "./path/to/private-key"
# ssl_ocsp_path = "./path/to/ocsp-file"
ssl_require_auth = false
ssl_resumption = false
ssl_tickets = false
#############################
### Experimental features ###
#############################
experimental_enable_metrics = false
experimental_reduce_indexing_memory_usage = false
Set permissions
sudo mkdir /var/lib/meilisearch/data /var/lib/meilisearch/dumps /var/lib/meilisearch/snapshots
sudo chown -R meilisearch:meilisearch /var/lib/meilisearch
sudo chmod 755 /var/lib/meilisearch
Create service
You can create a service locally but it's often on production server.
Create service
sudo vim /etc/systemd/system/meilisearch.service
Add this config to service, here with password YOUR_MASTER_KEY_VALUE
[Unit]
Description=Meilisearch
After=systemd-user-sessions.service
[Service]
Type=simple
WorkingDirectory=/var/lib/meilisearch
ExecStart=/usr/bin/meilisearch --config-file-path /etc/meilisearch.toml --env production --master-key YOUR_MASTER_KEY_VALUE
User=meilisearch
Group=meilisearch
[Install]
WantedBy=multi-user.target
Enable it
sudo systemctl enable meilisearch
sudo systemctl start meilisearch
Check status
sudo systemctl status meilisearch
Create domain
For Meilisearch you need to have endpoint, so you have to create VHost for it
sudo vim /etc/nginx/sites-available/meilisearch.example.com.conf
/etc/nginx/sites-available/meilisearch.example.com.conf
server {
listen 80;
listen [::]:80;
server_name meilisearch.example.com;
location / {
proxy_pass http://127.0.0.1:7700;
}
access_log /var/log/nginx/meilisearch.access.log;
error_log /var/log/nginx/meilisearch.error.log;
}
Execute certbot
to add HTTPS and your endpoint is available on http://meilisearch.example.com.