The Ultimate Self-Hosted NAS Management System π
Arcanas is a powerful, modern, and lightning-fast NAS management system designed for the enthusiast. Built with a robust Go backend (standard library only) and a sleek SvelteKit 5 frontend, it delivers a premium experience for managing your storage empire.
- π‘οΈ Storage Pools - Advanced management for MergerFS, LVM, and direct device mounts
- πΌ RAID Mastery - Create, manage, and monitor MD RAID arrays (0, 1, 5, 6, 10)
- πΏ Disk Management - Format disks, manage partitions, view SMART data
- π Device Mounting - Mount/unmount devices for switching between storage pools and iSCSI
- π NFS Exports - Configure and manage NFS shares with client access rules
- π€ Samba/SMB - Set up Windows-compatible file sharing
- π― Path Editing - Edit export paths on existing shares without delete/recreate
- πΎ iSCSI Targets - Professional-grade iSCSI target management with LIO/targetcli
- π LUN Management - Create and manage LUNs with block or fileio backstores
- π ACL Configuration - Manage initiator IQNs and access control lists
- β‘ Real-time Monitoring - Live CPU, memory, network, and disk I/O metrics
- π SMART Data - Drive health monitoring with test execution
- π₯οΈ System Info - View processes, logs, and system resources
- π₯ User Management - Manage users and service account permissions
- π Single Binary - Zero external runtime dependencies, embedded frontend
- β‘ Hot-Reload Dev - Blazing fast iteration with Air and Vite 6
- π¨ Modern UI - Svelte 5 with SvelteKit, Tailwind CSS, dark mode support
# 1. Clone the repository
git clone https://github.com/decryptedchaos/arcanas.git
cd arcanas
# 2. Install frontend dependencies
cd frontend && npm install
# 3. Start backend with hot-reload (from project root)
cd ..
./dev.sh
# 4. Or start frontend separately
cd frontend && npm run dev # Frontend on :5173
cd ../backend && go run cmd/server/main.go # Backend on :4000Access the dashboard:
- Frontend: http://localhost:5173 (dev) or http://localhost:4000 (prod)
- API: http://localhost:4000/api
curl -fsSL https://raw.githubusercontent.com/decryptedchaos/arcanas/master/install.sh | sudo bashcurl -fsSL https://raw.githubusercontent.com/decryptedchaos/arcanas/master/install.sh | sudo bash -s -- --version v1.0.0The installer will:
- Download the latest release for your platform (amd64/arm64)
- Install system dependencies (Samba, NFS, MergerFS, LVM, mdadm, targetcli)
- Create the
arcanasservice user and data directories - Set up systemd service with auto-start
- Configure sudoers for privileged operations
- Start the service
Access Arcanas:
Frontend: http://your-server-ip:4000
API: http://your-server-ip:4000/api
Service Management:
sudo systemctl start arcanas # Start the service
sudo systemctl stop arcanas # Stop the service
sudo systemctl restart arcanas # Restart the service
sudo systemctl status arcanas # Check service status
sudo journalctl -u arcanas -f # View logsarcanas/
βββ π§ backend/ # Go backend (standard library only)
β βββ cmd/server/ # Main entry point
β βββ internal/
β β βββ handlers/ # HTTP request handlers
β β βββ system/ # System command execution
β β βββ models/ # Data structures
β β βββ routes/ # API routing
β β βββ utils/ # Helper functions
β βββ static/ # Embedded frontend (generated)
βββ π¨ frontend/ # SvelteKit 5 frontend
β βββ src/lib/ # Components, API client, stores
β βββ src/routes/ # Pages (storage, scsi, nfs, samba, etc.)
β βββ static/ # Static assets
βββ π build.sh # Production build script
βββ π dev.sh # Development hot-reload script
βββ π deploy.sh # Remote deployment script
New Architecture (Direct Mount):
- MD RAID devices mount directly at
/srv/{poolname} - No MergerFS wrapper for single-device pools
- Better performance and simpler management
Legacy Support:
- Existing
/mnt/arcanas-disk-*mounts still work - Automatically detected and shown as "legacy" type pools
MergerFS:
- Used only for aggregating multiple raw disks (JBOD)
- Physical disks (sda, sdb) β MergerFS β
/srv/{poolname}
API_PORT- Server port (default:4000)DEV_MODE- Enable continuous frontend rebuild (default:false)
- Storage Pools -
/srv/{poolname}/ - Legacy Mounts -
/mnt/arcanas-disk-{device}/ - iSCSI Storage -
/var/lib/arcanas/iscsi/
- Linux (tested on Arch, Ubuntu, Debian)
- Go 1.24+ (for development)
- Node.js 20+ (for frontend development)
- Sudo access for privileged operations
./build.sh # Builds frontend, embeds in Go binary
# Output: ./arcanas (single binary)cd frontend
npm run build # Outputs to build/cd backend
go run cmd/server/main.goDEV_MODE=true go run cmd/server/main.gocd frontend
npm run dev # Start Vite dev server on :5173
npm run build # Build for production
npm run lint # Prettier + ESLint check./deploy.sh root@192.168.1.140 # Deploy to remote server- Sudoers Configuration - Privileged commands executed via passwordless sudo
- Path Validation - All paths validated to prevent traversal attacks
- Input Sanitization - User inputs sanitized before system command execution
- Service Isolation - Runs as dedicated
arcanasuser
This project is licensed under the Mozilla Public License 2.0. See LICENSE for details.
Contributions are welcome! The project uses MPL 2.0 which allows for:
- Proprietary use of modified files (you keep your modifications private)
- Copyleft on original files (modifications to MPL-licensed files must remain MPL)
Please ensure all Go files include the MPL license header.
See CHANGELOG.md for version history and changes.