Skip to content

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.

  • 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.

Install Docker Engine and the Compose plugin, then check that Docker is running:

Terminal window
docker info
docker compose version

Use Compose 2.24 or newer. The server image includes FFmpeg; the Compose stack supplies PostgreSQL and Redis.

Run these commands in a directory where silo does not already exist. Stop if a command fails.

Terminal window
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 .env

The latest image is built from main, so these files match it.

Generate two different values:

Terminal window
openssl rand -hex 24
openssl rand -base64 48

Open .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.

In .env, set the host path containing your media and an unused path for Silo’s own data:

MEDIA_ROOT=/srv/media
MEDIA_CONTAINER_ROOT=/mnt/media
SILO_DATA_ROOT=/opt/silo

Replace /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.

From the new silo directory:

Terminal window
docker compose config --quiet
docker compose up -d
docker compose ps

The 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:

Terminal window
curl --fail http://localhost:8090/api/v1/ready

A 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.

  1. Create the admin account with your username, email, and password. Create your first profile if asked.
  2. Give the server a name. Leave playback settings at their defaults for the first test.
  3. 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.
  4. 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.
  5. 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.

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.

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.

Your first setup is complete when playback works. Choose only what you need next:

Your next taskGuide
Invite someoneAccounts and invitations
Add another libraryLibraries
Correct a title or posterMetadata and artwork
Pick up new files automaticallyAutoscan
Reduce CPU load during playbackTranscoding
Use Silo away from homeSecure external access
Investigate a failureServer 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.