Your Personal Cloud — Lightweight, Secure, Self-Hosted.
A modern file management system built for Armbian & single-board computers.
| Feature | Description |
|---|---|
| 📤 Chunked & Resumable Uploads | Handles large files with automatic 2 MB chunking, parallel transfer, and resume-on-failure |
| 🔍 Auto Storage Discovery | Automatically detects /media, /mnt, and custom mount points on Linux systems |
| 🛡️ Security First | Path traversal prevention, Helmet headers, CORS, and rate limiting out of the box |
| 🎨 Glassmorphism UI | Premium dark-theme dashboard — zero frameworks, pure vanilla HTML / CSS / JS |
| 📱 Responsive Design | Works seamlessly from desktop to mobile with adaptive grid & list views |
| ⚡ SBC Optimized | Minimal memory footprint — runs smoothly on Raspberry Pi, Orange Pi, and similar boards |
| 🔗 Shareable Links | Generate direct download links for any file with one click |
| 📦 One-Command Deploy | Automated systemd service setup via deploy-armbian.sh |
cloudnest/
├── public/ # Frontend SPA
│ ├── css/
│ │ ├── main.css # Design system & tokens
│ │ └── components.css # Component styles
│ ├── js/
│ │ ├── api.js # API client layer
│ │ ├── app.js # Main application controller
│ │ └── components/ # UI modules
│ │ ├── fileGrid.js
│ │ ├── contextMenu.js
│ │ ├── previewModal.js
│ │ ├── storageSidebar.js
│ │ └── uploadManager.js
│ └── index.html
├── server/
│ ├── index.js # Express entry point
│ ├── config.js # Central configuration
│ ├── db/ # SQLite database layer
│ ├── middleware/ # Security middleware
│ ├── routes/ # API route handlers
│ │ ├── files.js # File operations (CRUD)
│ │ ├── storage.js # Storage device discovery
│ │ └── upload.js # Chunked upload endpoint
│ ├── services/ # Business logic
│ │ ├── fileService.js
│ │ ├── chunkService.js
│ │ └── storageService.js
│ └── utils/
│ └── portFinder.js
├── deploy-armbian.sh # One-click deployment script
└── package.json
- Node.js v18 or higher
- npm (bundled with Node.js)
git clone https://github.com/jnckcode/cloudnest.git
cd cloudnest
npm install# Production
npm start
# Development (hot reload)
npm run devNavigate to http://localhost:3000 in your browser.
On Windows, CloudNest automatically creates a
mock_storage/directory with sample mount points for local testing.
Deploy CloudNest as a background systemd service with a single command.
Node.js (v18+) and npm must already be installed — either system-wide or via a version manager (nvm, fnm, n, etc.).
git clone https://github.com/jnckcode/cloudnest.git
cd cloudnest
sudo chmod +x deploy-armbian.sh
sudo ./deploy-armbian.shIf you clone the repo straight into /opt/cloudnest, the script will skip the copy step automatically:
sudo git clone https://github.com/jnckcode/cloudnest.git /opt/cloudnest
cd /opt/cloudnest
sudo chmod +x deploy-armbian.sh
sudo ./deploy-armbian.shWhen Node.js is managed by nvm, pass your PATH through to root:
sudo -E env "PATH=$PATH" ./deploy-armbian.shWhat the script does:
- Validates that
nodeandnpmare available in PATH - Installs system dependencies (
sqlite3,build-essential) - Copies project to
/opt/cloudnest(skipped if already there) - Installs production npm dependencies
- Creates storage directory at
/var/cloudnest/storage - Registers and enables a
systemdservice on port3000
# Manage the service
sudo systemctl status cloudnest
sudo systemctl restart cloudnest
sudo journalctl -u cloudnest -f # Live logsTo completely and cleanly remove CloudNest (service, app files, node modules, database, env, and all storage data without leftover traces):
sudo chmod +x uninstall-armbian.sh
sudo ./uninstall-armbian.shYou can also run
sudo ./uninstall-armbian.sh -yfor non-interactive execution.
CloudNest is configured via environment variables:
| Variable | Default | Description |
|---|---|---|
PORT |
3000 |
Server listen port |
NODE_ENV |
— | Set to production for optimized mode |
CLOUDNEST_STORAGE_ROOT |
/var/cloudnest/storage |
Root path for file storage on Linux |
Node.js |
Express |
better-sqlite3 |
HTML5 |
CSS3 |
JavaScript |
Distributed under the MIT License. See LICENSE for details.
Built with ☁️ by jnckcode