mirror of
https://github.com/harivansh-afk/betterNAS.git
synced 2026-04-15 05:02:07 +00:00
web repo
This commit is contained in:
parent
f6069a024a
commit
43ef276976
7 changed files with 508 additions and 708 deletions
120
README.md
120
README.md
|
|
@ -1,114 +1,6 @@
|
|||
# betterNAS
|
||||
|
||||
betterNAS is a self-hostable WebDAV stack for mounting NAS exports in Finder.
|
||||
|
||||
The default product shape is:
|
||||
|
||||
- `node-service` serves the real files from the NAS over WebDAV
|
||||
- `control-server` owns auth, nodes, exports, grants, and mount profile issuance
|
||||
- `web control plane` lets the user manage the NAS and get mount instructions
|
||||
- `macOS client` starts as native Finder WebDAV mounting, with a thin helper later
|
||||
|
||||
For now, the whole stack should be able to run on the user's NAS device.
|
||||
|
||||
## Current repo shape
|
||||
|
||||
- `apps/node-agent`
|
||||
- NAS-side Go runtime and WebDAV server
|
||||
- `apps/control-plane`
|
||||
- Go backend for auth, registry, and mount profile issuance
|
||||
- `apps/web`
|
||||
- Next.js web control plane
|
||||
- `apps/nextcloud-app`
|
||||
- optional Nextcloud adapter, not the product center
|
||||
- `packages/contracts`
|
||||
- canonical shared contracts
|
||||
- `infra/docker`
|
||||
- self-hosted local stack
|
||||
|
||||
The main planning docs are:
|
||||
|
||||
- [docs/architecture.md](./docs/architecture.md)
|
||||
- [skeleton.md](./skeleton.md)
|
||||
- [docs/05-build-plan.md](./docs/05-build-plan.md)
|
||||
|
||||
## Default runtime model
|
||||
|
||||
```text
|
||||
self-hosted betterNAS on the user's NAS
|
||||
|
||||
+------------------------------+
|
||||
| web control plane |
|
||||
| Next.js UI |
|
||||
+--------------+---------------+
|
||||
|
|
||||
v
|
||||
+------------------------------+
|
||||
| control-server |
|
||||
| auth / nodes / exports |
|
||||
| grants / mount profiles |
|
||||
+--------------+---------------+
|
||||
|
|
||||
v
|
||||
+------------------------------+
|
||||
| node-service |
|
||||
| WebDAV + export runtime |
|
||||
| real NAS bytes |
|
||||
+------------------------------+
|
||||
|
||||
user Mac
|
||||
|
|
||||
+--> browser -> web control plane
|
||||
|
|
||||
+--> Finder -> WebDAV mount URL from control-server
|
||||
```
|
||||
|
||||
## Verify
|
||||
|
||||
Static verification:
|
||||
|
||||
```bash
|
||||
pnpm verify
|
||||
```
|
||||
|
||||
Bootstrap clone-local runtime settings:
|
||||
|
||||
```bash
|
||||
pnpm agent:bootstrap
|
||||
```
|
||||
|
||||
Bring the self-hosted stack up, verify it, and tear it down:
|
||||
|
||||
```bash
|
||||
pnpm stack:up
|
||||
pnpm stack:verify
|
||||
pnpm stack:down --volumes
|
||||
```
|
||||
|
||||
Run the full loop:
|
||||
|
||||
```bash
|
||||
pnpm agent:verify
|
||||
```
|
||||
|
||||
## Current end-to-end slice
|
||||
|
||||
The first proven slice is:
|
||||
|
||||
1. boot the stack with `pnpm stack:up`
|
||||
2. verify it with `pnpm stack:verify`
|
||||
3. get the WebDAV mount profile from the control plane
|
||||
4. mount it in Finder with the issued credentials
|
||||
|
||||
If the stack is running on a remote machine, tunnel the WebDAV port first, then
|
||||
use Finder `Connect to Server` with the tunneled URL.
|
||||
|
||||
## Product boundary
|
||||
|
||||
The default betterNAS product is self-hosted and WebDAV-first.
|
||||
|
||||
Nextcloud remains optional and secondary:
|
||||
|
||||
- useful later for browser/mobile/share surfaces
|
||||
- not required for the core mount flow
|
||||
- not the system of record
|
||||
betterNAS is a hosted control plane with a user-run node agent.
|
||||
The control plane owns user auth, node enrollment, heartbeats, export state, and mount issuance.
|
||||
The node agent runs on the machine that owns the files and serves them over WebDAV.
|
||||
The web app reads from the control plane and shows nodes, exports, and mount details.
|
||||
Finder mounts the export from the node's public WebDAV URL using the same betterNAS username and password.
|
||||
File traffic goes directly between the client and the node, not through the control plane.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue