Install Silo Server
Silo is in active development before 1.0. These guides are updated frequently.
Set up a new server, add a small movie or series library, and play your first item in the browser. This walkthrough uses Docker Compose on Linux.
What you need
Section titled “What you need”- A Linux x86-64 or arm64 host with permission to run Docker containers.
- A folder of media files the host can read. Start with a few familiar files.
- Persistent disk space for the database, artwork, and temporary transcodes.
- A browser on the same network.
- Internet access on the host. Silo downloads its default metadata plugins on first start, and scans use them to find posters and descriptions.
You do not need a GPU to start, but converting video can put heavy load on the CPU. For hardware and storage choices, see Requirements and installation options.
1. Install Docker and Docker Compose
Section titled “1. Install Docker and Docker Compose”Install Docker Engine and the Compose plugin, then check that Docker is running:
docker infodocker compose versionUse Compose 2.24 or newer. The server image includes FFmpeg; the Compose stack supplies PostgreSQL and Redis.
2. Get the Compose file
Section titled “2. Get the Compose file”Run these commands in a directory where silo does not already exist. Stop if a command fails.
mkdir silo &&cd silo &&curl -fSL https://raw.githubusercontent.com/Silo-Server/silo-server/main/docker-compose.yml -o docker-compose.yml &&curl -fSL https://raw.githubusercontent.com/Silo-Server/silo-server/main/.env.example -o .env &&chmod 600 .envThe latest image is built from main, so these files match it.
Generate two different values:
openssl rand -hex 24openssl rand -base64 48Open .env in a text editor. Set POSTGRES_PASSWORD to the first result and SECRET_KEY to the second. Remove the # from those lines. Do not leave the example passwords in place or add duplicate entries.
Keep a secure copy of SECRET_KEY separate from your database backups. Silo needs the same key to read stored credentials after a restart or restore.
3. Set your media path
Section titled “3. Set your media path”In .env, set the host path containing your media and an unused path for Silo’s own data:
MEDIA_ROOT=/srv/mediaMEDIA_CONTAINER_ROOT=/mnt/mediaSILO_DATA_ROOT=/opt/siloReplace /srv/media with your real media directory. Use /opt/silo only if it is not already used by another installation. The data disk needs space for the database, artwork, and temporary transcodes, in addition to your media.
Keep /mnt/media as the container path. For example, /srv/media/movies on the host becomes /mnt/media/movies in Silo. The default mount is read-only, so Silo cannot alter your media through it.
4. Start Silo
Section titled “4. Start Silo”From the new silo directory:
docker compose config --quietdocker compose up -ddocker compose psThe first command should finish without an error. docker compose ps lists postgres, redis, and silo, each with a health status. Silo shows starting until its web server answers, then healthy. The database setup on first start can take a while, and Silo can show unhealthy until it finishes. Run docker compose logs -f silo to watch progress, and don’t restart it while it works.
When Silo is healthy, check that it is ready:
curl --fail http://localhost:8090/api/v1/readyA ready server returns {"status":"ok"}. For any other answer, see Check server health.
On each start, Silo installs the official TMDB, TVDB, and TheIntroDB plugins from the plugin catalog if they are missing. If the host had no internet access, restart Silo once it does.
Open http://localhost:8090 on the server, or http://SERVER-IP:8090 from another computer on your network. Replace SERVER-IP with the Docker host’s LAN address.
5. Finish setup in the browser
Section titled “5. Finish setup in the browser”- Create the admin account with your username, email, and password. Create your first profile if asked.
- Give the server a name. Leave playback settings at their defaults for the first test.
- At Storage, leave Automatic selected for a single-host install. With no S3 bucket, it uses local disk. If you want S3, set it up now: after the first scan, changing storage means a storage transition.
- At Libraries, enter a name, choose Movies or Series, and add the container path. For example, use
/mnt/media/movies. Select Add library, then continue. - Skip subtitle services, app integrations, and other optional features you do not need yet. Finish the wizard.
Open Admin > Libraries to check the scan. If it has not started, use that library’s Scan action. For missing posters or descriptions, check the library’s metadata providers using Add and manage libraries.
6. Play one item
Section titled “6. Play one item”Open your library in the web app, choose an item, and select Play. Check that sound works, seek forward, stop, and resume it.
Then connect your usual device using the same server address and repeat the playback check. Use your own account; invite other people with their own accounts later.
Before relying on the server
Section titled “Before relying on the server”Set up backups and note your data paths and any external storage. Give each person their own account: your admin password controls the server, not just what you can watch.
What to set up next
Section titled “What to set up next”Your first setup is complete when playback works. Choose only what you need next:
| Your next task | Guide |
|---|---|
| Invite someone | Accounts and invitations |
| Add another library | Libraries |
| Correct a title or poster | Metadata and artwork |
| Pick up new files automatically | Autoscan |
| Reduce CPU load during playback | Transcoding |
| Use Silo away from home | Secure external access |
| Investigate a failure | Server health |
Notifications, AI providers, and remote workers can wait until you need them.
The stack includes PostgreSQL with pgvector and tunes it automatically, so you
don’t need a postgresql.conf. Search uses PostgreSQL by default; add
Meilisearch only if you want a separate
search service.