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
Install EasyUploader on Unraid in a few clicks.
Find EasyUploader in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
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