All apps Β· 0 apps
My-Cloud
Docker app from evilgenius' Repository
Overview
Readme
View on GitHubβοΈ My Cloud
A lightweight, self-hosted file sharing platform in the spirit of Nextcloud / ownCloud β but with zero database setup. Built for Unraid and other home servers, aimed at people who don't have a ton of files and don't want to babysit MySQL or Postgres.
Everything is stored as plain files:
- Your files stay as ordinary files on disk (
/data/users/<username>/files) β browse them with any other tool, back them up with rsync, nothing is locked inside a database blob. - App state (users, share links, settings) is a handful of small JSON files in
/config.
Features
- π Multi-user accounts β admin-managed users with bcrypt-hashed passwords, per-user storage quotas, and isolated home folders
- π Fast web file browser β grid & list views, breadcrumbs, multi-select (Ctrl/Shift-click), rename, move, copy, new folders
- β¬οΈ Drag & drop uploads β multiple files and whole folders, with a live progress bar; large files upload in resumable chunks that survive a dropped connection; quota enforced server-side
- π Optional two-factor (TOTP) β authenticator-app codes with recovery codes, plus revocable app passwords for WebDAV
- π Multi-item share links β share a whole selection of files/folders behind one link
- π Previews β images, video and audio (with seeking), PDFs, and text/code files
- βοΈ Built-in text editor β edit notes, configs, and markdown right in the browser
- π Public share links β share any file or folder with a link; optional password, optional expiry, and optional "drop box" mode letting visitors upload into a shared folder
- π Trash bin β deletes go to trash first, with restore and configurable auto-purge
- π Search β instant filename search across your whole home folder
- π¦ Zip downloads β download any folder or multi-selection as a zip, streamed on the fly
- πΌοΈ Thumbnails β fast server-generated, disk-cached image thumbnails so photo folders load instantly
- π WebDAV β mount your files as a network drive in Finder, Windows Explorer, mobile apps, or rclone (
/dav/, sign in with your account) - π± Responsive UI + installable PWA β works nicely on phones with automatic light/dark theme, and installs as an app ("Add to Home Screen")
- π§³ First-run setup β open the web UI once and create your admin account; that's it
Quick start (Unraid)
Copy
templates/my-cloud.xmlinto/boot/config/plugins/dockerMan/templates-user/β save it asmy-My-Cloud.xml(Unraid strips themy-filename prefix to label user templates in the Add Container dropdown). Or install from Community Applications once published.wget -O /boot/config/plugins/dockerMan/templates-user/my-My-Cloud.xml \ https://raw.githubusercontent.com/evilgenius79/My-Cloud/main/templates/my-cloud.xmlMap:
/configβ/mnt/user/appdata/my-cloud(settings, users, shares)/dataβ/mnt/user/my-cloud(where user files live)- Port
8686β any free host port
Start the container, open
http://your-server:8686, and create the first admin account.
Quick start (Docker / docker-compose)
git clone https://github.com/evilgenius79/My-Cloud.git
cd My-Cloud
docker compose up -d --build
# open http://localhost:8686
Quick start (bare Node.js)
Requires Node 18+.
npm install
npm run dev # stores state in ./dev-config and ./dev-data
# open http://localhost:8686
Configuration
| Environment variable | Default | Purpose |
| Environment variable | Default | Purpose |
|---|---|---|
MYCLOUD_CONFIG_DIR |
/config |
Settings, users, shares, session secret |
MYCLOUD_DATA_DIR |
/data |
User files (users/<name>/files) |
MYCLOUD_PORT |
8686 |
HTTP port |
PUID / PGID |
99/100 |
User/group that owns created files (Unraid nobody:users) |
UMASK |
022 |
Permission mask for created files |
MYCLOUD_TRUST_PROXY |
private | Which proxies to trust for client IP. Defaults to loopback/private ranges; set to a hop count (e.g. 1) only if you know your proxy chain. Never set to true on an internet-exposed install β it lets clients spoof their IP and defeat the login rate-limiter. |
MYCLOUD_FORCE_SECURE_COOKIE |
off | Set to 1 to force the Secure cookie flag when TLS is terminated at a proxy that doesn't send X-Forwarded-Proto. |
The container runs as a non-root user (PUID:PGID) and fixes ownership of /config and /data on first start. Runtime settings (site name, default quota, trash retention) are editable from the Admin page in the UI.
How data is laid out
/config
settings.json # site settings
users.json # accounts (passwords bcrypt-hashed)
shares.json # public share links
secret.key # session-signing secret (keep private)
/data
users/
alice/
files/ # alice's files β plain files, nothing special
trash/ # deleted items + small .meta.json sidecars
Backing up My Cloud = backing up those two folders. Restoring = putting them back. There is no database to dump, migrate, or repair.
Security notes
- Passwords are stored bcrypt-hashed; sessions are HMAC-signed
HttpOnlycookies, revoked on password change. - Login attempts are rate-limited per IP and per username (so an IP-rotating spray against one account is still throttled); the whole public share surface is rate-limited too.
- All file paths are validated server-side against directory traversal, and download paths reject symlinks that resolve outside your area.
- Storage quotas are enforced on uploads (including anonymous drop-box shares), copies, and restores; trash counts toward quota.
- Uploaded HTML/SVG is served sandboxed (
Content-Security-Policy: sandbox,X-Content-Type-Options: nosniff) so it can't script against the app. - The container runs as a non-root user; images are published with build provenance and an SBOM.
- Use HTTPS if you expose this to the internet β put it behind a reverse proxy (Nginx Proxy Manager, SWAG, Traefik, Caddy) with a TLS certificate, and make sure it forwards
X-Forwarded-Proto(or setMYCLOUD_FORCE_SECURE_COOKIE=1). Cookies areSameSite=Lax/HttpOnlybut only as safe as the transport.
Roadmap ideas
- WebDAV endpoint for desktop sync clients
- Server-generated thumbnails for large photo folders
- Share links for multiple selections
- Activity log
PRs welcome.
License
MIT
Install My-Cloud on Unraid in a few clicks.
Find My-Cloud 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
Related apps
Explore more like this
Explore allDetails
ghcr.io/evilgenius79/my-cloud:latestRuntime arguments
- Web UI
http://[IP]:[PORT:8686]/- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Port for the web interface
- Target
- 8686
- Default
- 8686
- Value
- 8686
App settings, users and share links (small JSON files)
- Target
- /config
- Default
- /mnt/user/appdata/my-cloud
- Value
- /mnt/user/appdata/my-cloud
Where user files are stored (users/username/files)
- Target
- /data
- Default
- /mnt/user/my-cloud
- Value
- /mnt/user/my-cloud
User ID that owns created files (Unraid default: 99 = nobody)
- Default
- 99
- Value
- 99
Group ID that owns created files (Unraid default: 100 = users)
- Default
- 100
- Value
- 100
Permission umask for created files
- Default
- 022
- Value
- 022