Cargo workspace with four crates:
- nixpanel-common: shared SectionRequest/SectionResponse types
- nixpanel-api: main Axum HTTP server (JWT auth, DB, routing)
- nixpanel-services: section binary for systemctl start/stop/restart
- nixpanel-sysinfo: section binary for CPU/RAM/disk/OS/version reads
nixpanel-api features:
- POST /api/auth/login — Argon2id verification, HS256 JWT
- GET /api/dashboard — real account counts + sysinfo + versions
- GET /api/services — live systemctl status via section binary
- POST /api/services/:name/:action — start/stop/restart
- GET /api/accounts — list from MariaDB
- POST /api/accounts — create account + system user
Section binaries are UPX-compressed after build.
DB schema auto-migrated on first start; admin user seeded from
/opt/nixpanel/.admin_user + .admin_pass files.
Frontend changes:
- nixserver/src/api.ts + App.tsx wired to real API (JWT stored in
localStorage, real data in dashboard/services/accounts)
- nixclient/src/api.ts added
- Both vite configs get /api proxy to localhost:4000 for dev
- install.sh updated to copy + compress all section binaries
- Replace interactive read prompts with auto-generated password
(openssl rand) so curl|bash installs work without a TTY
- Display username/password in the completion banner
- Fix NixClient package.json check to use absolute path $SRC_DIR
(was relative, broke after 'cd nixserver' changed cwd)
- Node.js now has its own step (nodejs.done) separate from the packages
step, so it always runs even when packages.done already exists
- Checks for Node 18+ and skips reinstall if already present
- Removed --silent and 2>/dev/null from npm commands so build errors
are visible instead of silently killing the installer
npm was never installed, causing the NixServer/NixClient builds to fail
immediately after 'Building NixServer...' with no visible error.
Added NodeSource setup_20.x before the ondrej/php PPA, then included
nodejs in the apt-get install list. NodeSource gives us npm 10+ and
Node 20 LTS rather than Ubuntu's stale node package.
The old .git/config in /opt/nixpanel/src had a fetch refspec pointing to
refs/heads/master (from before the branch rename). Re-running the installer
with that directory present caused 'git fetch' to fail with 'couldn't find
remote ref refs/heads/master'.
Fix: rm -rf the source dir before cloning whenever the source step hasn't
been marked done, so we always get a clean checkout with the correct branch.
The releases API returns 404 when no releases exist, causing the installer
to fall back to 'main'. However, the fallback clone was not explicitly
specifying a branch, which could cause issues if the repository's default
branch configuration is in an inconsistent state. Now the fallback clone
also explicitly uses --branch main to ensure consistent behavior.
- nixserver/: React 18 + TypeScript + Vite + Tailwind
- Login page + placeholder admin dashboard with card grid
- Blue accent color (#3b82f6)
- Full Tailwind + PostCSS + TypeScript setup
- nixclient/: identical structure, user-facing panel
- Green accent color (#10b981)
- Same build tooling as NixServer
- install.sh: new 'Building NixServer & NixClient UIs' step
- npm install + npm run build for each
- Outputs to /opt/nixpanel/nixserver/dist and /opt/nixpanel/nixclient/dist
- Both panels immediately accessible via Apache on 2087 and 2083
- Skips gracefully if source not present (early dev)
- README: add shields.io badges, fix stack (Rust, not Node.js),
add licensing plan table, improve structure throughout
- CHANGELOG: proper Keep a Changelog format, document v0.1.0-alpha
- LICENSE: expand source-available terms with clearer restrictions
- install.sh: strip licensing/website-api build steps (those run on
nixpanel.io/license.nixpanel.io, not on customer servers); add
license key prompt + activation against license.nixpanel.io; keep
only the panel DB; fix Apache to only expose ports 2083/2087
On Ubuntu 24.04, PHP 8.2 is not in the default apt repos.
The ondrej/php PPA must be added before package installation.
Previously this was a separate step that could be bypassed when
running a locally-cached (pre-fix) copy of install.sh.
Changes:
- Add self-update block: script fetches latest version from GitHub
and re-execs itself, so stale local copies are never used
- Remove standalone php_ppa step; PPA is now added unconditionally
inside the packages step (checks if already present to avoid
duplicate adds on re-runs)
- Idempotent: grep checks sources.list before calling
add-apt-repository