Docker
Every release publishes the image, so you don't need to build anything. The package is public, so pulling it doesn't require a login.
Installation
- Docker Compose
- Docker CLI
services:
reaper:
image: ghcr.io/scythe-labs/reaper:latest
container_name: reaper
restart: unless-stopped
ports:
- "8420:8420"
volumes:
- reaper-data:/data
environment:
REAPER_DESTRUCTIVE_ACTIONS_ENABLED: "false"
REAPER_LOG_LEVEL: INFO
# PUID: "1000"
# PGID: "1000"
# REAPER_TIMEZONE: "America/New_York"
volumes:
reaper-data:
Then:
docker compose up -d # serves on http://localhost:8420
docker run -d \
--name reaper \
--restart unless-stopped \
-p 8420:8420 \
-v reaper-data:/data \
-e REAPER_DESTRUCTIVE_ACTIONS_ENABLED=false \
-e REAPER_LOG_LEVEL=INFO \
ghcr.io/scythe-labs/reaper:latest
Reaper then serves on http://localhost:8420.
The volume
Reaper uses one path, /data, to hold its own database. Your media stays where it is.
A named volume works without any setup and stays put even when you update or recreate things, so the examples above use one.
If you want to see and copy your files, bind-mount a host directory instead with ./data:/data. This is what you'll want on a NAS. It makes backing up the three files a plain file copy instead of a trip through docker volume. Reaper's own Settings, Backup works either way.
You don't need chown either way. The container starts as root to take ownership of the folder, then drops to an unprivileged user before it opens the database. Set PUID and PGID to choose that user. If you want to skip the root phase entirely, pin user: "1000:1000" and create the folder owned by 1000 yourself.
Windows
When you use Docker on Windows, it runs Linux containers inside a small VM using Docker Desktop on the WSL 2 backend. You can follow Microsoft's WSL install guide to turn WSL on.
Common settings
| Variable | Default | What it does |
|---|---|---|
REAPER_DESTRUCTIVE_ACTIONS_ENABLED | false | Whether a brand new install comes up able to delete. Seeds the first run only. |
REAPER_LOG_LEVEL | INFO | Set DEBUG when you are chasing something. Seeds the first run only; Settings, Logs owns it afterwards. |
REAPER_LOG_JSON | false | One JSON object per line, for a log collector. |
PUID / PGID | 1000 | Which user the app runs as. Unraid wants 99 / 100. |
REAPER_TIMEZONE | host's zone | First-run default only. Settings, General owns it afterwards. |
REAPER_PORT | 8420 | The port inside the container. Moving it moves the healthcheck too. |
REAPER_SECRET_KEY | generated | See the encryption key. |
If you want to publish Reaper on a different host port, you don't need a variable. Just change the left side of 8420:8420 and leave the right side alone.
The full list is in Configuration.
Which tag
| Tag | Follows |
|---|---|
:latest | the newest release. Use this. |
:dev | the dev branch, refreshed on every change, for testing what is coming. |
These two are the only tags to put in a compose file.
Put ghcr.io/scythe-labs/reaper:dev in your compose file to run the dev channel. Dev builds change often, so use Releases if you want a steadier channel.
Updating
- Docker Compose
- Docker CLI
docker compose pull
docker compose up -d
docker stop reaper
docker rm reaper
docker pull ghcr.io/scythe-labs/reaper:latest
# then run the same command you installed with
Migrations run every time you start the app, before it accepts a connection.
Building from source
Uncomment build: in docker-compose.yml and run:
docker compose up -d --build
Next
Follow the First run steps in order. The first account that signs in claims the install, so make sure you know who's doing it.