Skip to content

Docker

Terminal window
docker run -d \
--name rustyfile \
-p 8080:80 \
-v /your/files:/data \
-v rustyfile-config:/config \
rustyfile/rustyfile
Mount PointPurposeRecommendation
/dataFilesystem root to browseBind mount to your files
/configDatabase, cache (thumbs, HLS, uploads)Named volume for persistence

Override any configuration via environment:

Terminal window
docker run -d \
-p 3000:80 \
-e RUSTYFILE_LOG_FORMAT=json \
-e RUSTYFILE_JWT_EXPIRY_HOURS=8 \
-v /your/files:/data \
-v rustyfile-config:/config \
rustyfile/rustyfile
docker-compose.yml
services:
rustyfile:
image: rustyfile/rustyfile
container_name: rustyfile
ports:
- "8080:80"
volumes:
- /your/files:/data
- rustyfile-config:/config
environment:
- RUSTYFILE_LOG_FORMAT=json
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
volumes:
rustyfile-config:

The image includes a built-in health check:

GET /api/health → {"status": "ok", "db": "connected"}

Checked every 30 seconds with a 5-second timeout.

  • Base: Alpine 3.21
  • Size: ~15-20 MB
  • User: Runs as non-root
  • FFmpeg: Included in the image for HLS transcoding support.
Terminal window
docker build -t rustyfile .

Or with the Makefile:

Terminal window
make docker