All apps · 0 apps
EasyUploader
Docker app from DevlinDelFuego's Repository
Overview
Readme
View on GitHubEasy Uploader
A self-hosted file and photo sharing app for Unraid. Create password-protected share links — guests visit the URL, enter the password, and upload files directly to your server.
Features
- Password-protected share links with custom URL slugs
- Optional expiry dates per share
- Guests see their own upload history via a 10-day persistent cookie
- Required name and optional comment on every upload
- Admin panel — manage shares, browse all files with thumbnails, delete files
- Bulk ZIP download — select files from the All Files page and download as a single archive
- Settings page — configure blocked file extensions and MIME types from the UI
- Drag-and-drop upload page, mobile friendly
- Single Docker container, two mapped volumes
Quick Start
services:
easy-uploader:
image: devlindelfuego/easy-uploader:latest
ports:
- "3000:3000"
volumes:
- /mnt/user/appdata/easy-uploader/data:/app/data
- /mnt/user/Photos/uploads:/app/uploads
environment:
- ADMIN_USERNAME=admin
- ADMIN_PASSWORD=your-strong-password
- SESSION_SECRET=your-long-random-secret
- MAX_FILE_SIZE_MB=500
- NODE_ENV=production
- COOKIE_SECURE=false
- TRUST_PROXY=false
- PUID=99
- PGID=100
restart: unless-stopped
Visit http://[server-ip]:3000/admin after starting.
Unraid
Community Applications — search for Easy Uploader and install.
Manual template — go to Docker → Add Container and paste:
https://raw.githubusercontent.com/DevlinDelFuego/Easy-Uploader/main/easy-uploader.xml
Volume layout
Each share gets its own subfolder under the uploads path:
/mnt/user/Photos/uploads/
├── mothersday/
└── fathersday/
Map the uploads root to wherever you want files on your array.
Reverse Proxy
Set COOKIE_SECURE=true and TRUST_PROXY=true when running behind any reverse proxy (Nginx Proxy Manager, SWAG, Traefik, Caddy, etc.) so session cookies are marked secure and client IPs are forwarded correctly.
Cloudflare
If using a Cloudflare Tunnel or proxied DNS:
- Set
TRUST_PROXY=trueandCOOKIE_SECURE=true - Set
CLOUDFLARE_BEACON=trueif you use Cloudflare Web Analytics (allows the analytics script in the Content Security Policy) - If your reverse proxy already sends its own
Strict-Transport-Securityheader, setHSTS_MAX_AGE=0to avoid duplicate HSTS headers
Settings
The admin Settings page (/admin/settings) lets you configure which file types guests are allowed to upload without restarting the container:
- Blocked extensions — one per line (e.g.
.exe,.php) - Blocked MIME types — one per line (e.g.
application/x-msdownload)
Changes take effect immediately. A Reset to Defaults button restores the original blocklist.
Environment Variables
| Variable | Default | Required | Description |
|---|---|---|---|
ADMIN_USERNAME |
admin |
No | Admin panel username |
ADMIN_PASSWORD |
— | Yes | Admin panel password |
SESSION_SECRET |
— | Yes | Long random string for signing cookies |
PORT |
3000 |
No | Port the app listens on |
MAX_FILE_SIZE_MB |
500 |
No | Max upload size per file in MB |
NODE_ENV |
production |
No | Keep as production in deployment |
COOKIE_SECURE |
false |
No | Set to true when behind an HTTPS reverse proxy |
TRUST_PROXY |
false |
No | Set to true when behind any reverse proxy |
HSTS_MAX_AGE |
31536000 |
No | Seconds browsers enforce HTTPS; set to 0 to disable |
CLOUDFLARE_BEACON |
false |
No | Set to true to allow Cloudflare Analytics in the CSP |
DB_PATH |
./data/app.db |
No | Path to the SQLite database file |
UPLOADS_PATH |
./uploads |
No | Path where uploaded files are stored |
PUID |
99 |
No | UID the process runs as (99 = nobody on Unraid) |
PGID |
100 |
No | GID the process runs as (100 = users on Unraid) |
Building from Source
git clone https://github.com/DevlinDelFuego/Easy-Uploader.git
cd Easy-Uploader
npm install
npm run dev
Categories
Download Statistics
Related apps
Explore more like this
Explore allLinks
Details
devlindelfuego/easy-uploader:latestRuntime arguments
- Web UI
http://[IP]:[PORT:3000]/admin- Network
bridge- Privileged
- false
Template configuration
Port for the Easy Uploader web interface.
- Target
- 3000
- Default
- 3000
- Value
- 3000
Where uploaded files are stored on your server. Map this to the share or folder where you want files to land.
- Target
- /app/uploads
- Default
- /mnt/user/appdata/easy-uploader/uploads
- Value
- /mnt/user/appdata/easy-uploader/uploads
Where the database file is stored. Keep this on persistent storage.
- Target
- /app/data
- Default
- /mnt/user/appdata/easy-uploader/data
- Value
- /mnt/user/appdata/easy-uploader/data
Username for the admin panel.
- Target
- ADMIN_USERNAME
- Default
- admin
- Value
- admin
Password for the admin panel. Required.
- Target
- ADMIN_PASSWORD
A long random string used to sign session cookies. Generate one at: https://generate-secret.vercel.app/64
- Target
- SESSION_SECRET
Maximum size per uploaded file, in megabytes.
- Target
- MAX_FILE_SIZE_MB
- Default
- 500
- Value
- 500
User ID the container runs as. Use 99 for nobody (Unraid default).
- Default
- 99
- Value
- 99
Group ID the container runs as. Use 100 for users (Unraid default).
- Default
- 100
- Value
- 100
Node.js environment. Keep as production.
- Default
- production
- Value
- production
Set to true only if you are accessing the app over HTTPS via a reverse proxy. Leave false for plain HTTP.
- Default
- false
- Value
- false
Set to true only if running behind a reverse proxy (e.g. Nginx Proxy Manager, Swag). Leave false for direct access.
- Default
- false
- Value
- false