EasyUploader

EasyUploader

Docker app from DevlinDelFuego's Repository

Overview

Easy Uploader is a self-hosted file and photo sharing app. Create named share links protected by passwords. Guests visit the link, enter the password, and upload files or photos directly to your server. Manage all shares and view every upload from the admin panel.

Easy 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=true and COOKIE_SECURE=true
  • Set CLOUDFLARE_BEACON=true if you use Cloudflare Web Analytics (allows the analytics script in the Content Security Policy)
  • If your reverse proxy already sends its own Strict-Transport-Security header, set HSTS_MAX_AGE=0 to 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.

Open the Apps tab on your Unraid server Search Community Apps for EasyUploader Review the template variables and paths Click Install

Download Statistics

1,617
Total Downloads

Related apps

Details

Repository
devlindelfuego/easy-uploader:latest
Last Updated2026-05-06
First Seen2026-04-26

Runtime arguments

Web UI
http://[IP]:[PORT:3000]/admin
Network
bridge
Privileged
false

Template configuration

Web UI PortPorttcp

Port for the Easy Uploader web interface.

Target
3000
Default
3000
Value
3000
Uploads PathPathrw

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
Data PathPathrw

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
Admin UsernameVariable

Username for the admin panel.

Target
ADMIN_USERNAME
Default
admin
Value
admin
Admin PasswordVariable

Password for the admin panel. Required.

Target
ADMIN_PASSWORD
Session SecretVariable

A long random string used to sign session cookies. Generate one at: https://generate-secret.vercel.app/64

Target
SESSION_SECRET
Max File Size (MB)Variable

Maximum size per uploaded file, in megabytes.

Target
MAX_FILE_SIZE_MB
Default
500
Value
500
PUIDVariable

User ID the container runs as. Use 99 for nobody (Unraid default).

Default
99
Value
99
PGIDVariable

Group ID the container runs as. Use 100 for users (Unraid default).

Default
100
Value
100
NODE_ENVVariable

Node.js environment. Keep as production.

Default
production
Value
production
COOKIE_SECUREVariable

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
TRUST_PROXYVariable

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