Running Elasticsearch on a Synology DS925+ NAS
/ 3 min read
Table of Contents
I finally got Elasticsearch + Kibana running on my Synology DS925+ (got a beefy one with 32GB of RAM), but not the way I originally expected. I started with Container Manager on DSM, hit a hard wall, then moved the whole stack into a VM. This post is the short, honest version of what worked, what didn’t, and why.
The blocker: DSM kernel + seccomp
Elasticsearch 8/9 expects Linux seccomp support (CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER). Synology’s DSM kernel doesn’t ship with that enabled, so ES dies early with:
seccomp unavailable: CONFIG_SECCOMP not compiled into kernelElasticsearch 7.x still lets you disable the system call filter, but 8+ doesn’t. That’s why Docker on DSM isn’t a viable path for ES 9.x.
Decision: run ES inside a VM that has a standard Linux kernel.
VM plan
I used Synology Virtual Machine Manager and installed Ubuntu Server 22.04 LTS. The VM is a single host for both Elasticsearch and Kibana (Docker inside the VM).
Recommended VM settings (what I used):
- 4 vCPU
- 12–16 GB RAM
- 10 TB virtual disk (I want a lot of headroom for Bluesky firehose + smart home data)
- Bridged network (so it gets a normal LAN IP)
- Graphics = VGA (the installer was invisible until I switched this)
The VGA tweak was the biggest “gotcha” — the installer wouldn’t render until I changed the graphics adapter.
Ubuntu install highlights
- Attach the Ubuntu ISO (server edition) and boot from CD/DVD.
- Enable OpenSSH server during install.
- Use DHCP for network.
- Use the full disk with LVM (default guided install).
Use the 10 TB disk properly (LVM)
The installer created / as ~100 GB and left the rest as free LVM space. That’s perfect: I mounted the remaining space at /srv/docker and pointed Docker there.
sudo lvcreate -l 100%FREE -n docker ubuntu-vgsudo mkfs.ext4 /dev/ubuntu-vg/dockersudo mkdir -p /srv/docker
sudo blkid /dev/ubuntu-vg/docker# add to /etc/fstab# UUID=<uuid> /srv/docker ext4 defaults 0 2sudo nano /etc/fstab
sudo mount -adf -h /srv/dockerThen configure Docker to store everything on that volume:
sudo mkdir -p /etc/dockercat <<'EOF' | sudo tee /etc/docker/daemon.json{ "data-root": "/srv/docker"}EOF
sudo systemctl restart dockerDocker + Elasticsearch 9.3 + Kibana
Inside the VM:
sudo sysctl -w vm.max_map_count=262144echo "vm.max_map_count=262144" | sudo tee /etc/sysctl.d/99-elasticsearch.confsudo sysctl --systemThen I copied my docker-compose.yml and .env into /srv/docker/elasticsearch and started the stack:
cd /srv/docker/elasticsearch
docker compose pulldocker compose up -dOne more fix: Elasticsearch couldn’t lock the data directory until I fixed permissions:
sudo mkdir -p /srv/docker/elasticsearch/elasticsearch/datasudo chown -R 1000:1000 /srv/docker/elasticsearch/elasticsearchAfter that, ES came up cleanly. Kibana needed a one‑time password set for kibana_system:
cd /srv/docker/elasticsearchsource .env
curl -X POST "http://localhost:9200/_security/user/kibana_system/_password" \ -H "Content-Type: application/json" \ -u elastic:$ELASTIC_PASSWORD \ -d '{"password": "'"$KIBANA_PASSWORD"'"}'
docker compose restart kibanaAccess
Kibana is reachable at:
http://<vm-ip>:5601Login with elastic + the password from .env.
What I learned
- DSM isn’t the problem; the kernel is. ES 9.x is fine on a modern kernel — just not on DSM’s.
- VGA graphics was the key to getting the installer to show.
- LVM is your friend for large disks — keep
/small and put Docker data on a big volume. - Permissions matter for the ES data path (
1000:1000).
Most of this workflow was built with help from pi-coding-agent. Having the chat history + troubleshooting flow turned into a proper setup doc saved me a lot of time.
Next steps
- Add a DHCP reservation for the VM IP so Kibana stays at a stable URL.
- Consider snapshots in VMM before big ES upgrades.
- Add a reverse proxy if I want HTTPS and a nicer hostname.
If you’re trying to run Elasticsearch on a Synology NAS, the VM route is the cleanest option right now. It’s a little extra setup, but it’s stable and keeps you on supported ES versions.