chore: bump version to 0.2.0-alpha, update CHANGELOG
This commit is contained in:
+73
-18
@@ -9,16 +9,74 @@ Versions follow [Semantic Versioning](https://semver.org/).
|
|||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
### Planned
|
### Planned
|
||||||
- NixServer (WHM) — full Rust backend
|
- DNS zone editor (CRUD records via PowerDNS API)
|
||||||
- NixClient (cPanel) — full Rust backend
|
- Email account management (Dovecot mailbox provisioning)
|
||||||
- DNS zone editor
|
- SSL certificate management (Let's Encrypt via Certbot)
|
||||||
- Email account management
|
|
||||||
- SSL certificate management via Let's Encrypt
|
|
||||||
- File manager
|
- File manager
|
||||||
- MySQL/MariaDB database manager
|
- MySQL/MariaDB database manager (per-account)
|
||||||
- WordPress one-click installer
|
- WordPress one-click installer
|
||||||
- Backup / restore system
|
- Backup / restore system
|
||||||
|
- Firewall rule editor (CSF/iptables)
|
||||||
- Multi-server support (Agency plan)
|
- Multi-server support (Agency plan)
|
||||||
|
- NixClient pages: domains, email, databases, FTP, security, stats
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## [0.2.0-alpha] — 2026-04-25
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- **Rust backend** — Cargo workspace with independently compiled + UPX-compressed section executables
|
||||||
|
- `nixpanel-common` — shared `SectionRequest` / `SectionResponse` IPC types
|
||||||
|
- `nixpanel-api` — main Axum HTTP server on port 4000
|
||||||
|
- `POST /api/auth/login` — Argon2id password verification, HS256 JWT (8-hour expiry)
|
||||||
|
- `GET /api/dashboard` — real account/domain/database/email counts + system stats
|
||||||
|
- `GET /api/services` — live service status via systemctl
|
||||||
|
- `POST /api/services/:name/:action` — start / stop / restart any managed service
|
||||||
|
- `GET /api/accounts` — list hosting accounts from MariaDB
|
||||||
|
- `POST /api/accounts` — create account (system user, home dir, DB record)
|
||||||
|
- Auto-runs DB schema migrations on first start
|
||||||
|
- Seeds admin user from `/opt/nixpanel/.admin_user` + `.admin_pass` on first run
|
||||||
|
- `nixpanel-services` — section binary; reads JSON from stdin, calls systemctl, writes JSON to stdout
|
||||||
|
- Actions: `list`, `start`, `stop`, `restart`, `reload`
|
||||||
|
- Reports PID and uptime per service
|
||||||
|
- `nixpanel-sysinfo` — section binary; reads `/proc/meminfo`, `/proc/stat`, `/proc/loadavg`, `df`
|
||||||
|
- Actions: `stats` (CPU, RAM, disk, load, hostname, IP, OS, kernel), `versions` (Apache, PHP, MariaDB)
|
||||||
|
- **Database schema** (`nixpanel-api/migrations/0001_initial.sql`)
|
||||||
|
- Tables: `users`, `accounts`, `domains`, `dns_records`, `account_databases`,
|
||||||
|
`email_accounts`, `ftp_accounts`, `ssl_certificates`, `backups`
|
||||||
|
- **Frontend API clients** (`nixserver/src/api.ts`, `nixclient/src/api.ts`)
|
||||||
|
- JWT stored in `localStorage`, included in all requests as `Authorization: Bearer`
|
||||||
|
- Auto-clears token and reloads on 401
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- **NixServer UI** — full redesign matching WHM visual style
|
||||||
|
- Dark navy / orange-accent theme
|
||||||
|
- Collapsible sidebar with grouped navigation sections
|
||||||
|
- Dashboard: live stat bar, server info bar, service manager table, quick-action icon grid
|
||||||
|
- List Accounts: real data table with search/filter
|
||||||
|
- Create Account: full form wired to API (creates system user, DB record)
|
||||||
|
- Login: real JWT auth; session persists across refresh via `localStorage`
|
||||||
|
- **NixClient UI** — full redesign matching cPanel visual style
|
||||||
|
- Blue-accent theme
|
||||||
|
- Feature icon grid grouped by category with live search
|
||||||
|
- Account sidebar with usage bars
|
||||||
|
- Login: real JWT auth
|
||||||
|
- **Installer** (`install.sh`)
|
||||||
|
- Rust build step now copies all `nixpanel-*` section binaries to `/opt/nixpanel/bin/`
|
||||||
|
- Installs UPX and compresses each binary after build
|
||||||
|
- Admin credentials auto-generated with `openssl rand` (no TTY prompts)
|
||||||
|
- Node.js 20 LTS installed as its own idempotent step (`nodejs.done`)
|
||||||
|
- NixClient build uses absolute path to avoid wrong-directory check
|
||||||
|
- npm output visible during build (removed `--silent`) for easier debugging
|
||||||
|
- **Vite configs** — added `/api` proxy to `localhost:4000` for local development
|
||||||
|
- **Minifier** — switched both UIs from `terser` (not installed) to `esbuild`
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Login inputs changed from `type="email"` to `type="text"` with "Username" label
|
||||||
|
- `sqlx::query!()` macros replaced with non-macro `query()` / `query_as()` / `query_scalar()`
|
||||||
|
so the binary compiles without a live database connection
|
||||||
|
- Removed `axum_extra` import that was never added to `Cargo.toml`
|
||||||
|
- Git clone always removes stale `$SRC_DIR` before cloning (fixes "couldn't find remote ref master" on re-run)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -28,22 +86,19 @@ Versions follow [Semantic Versioning](https://semver.org/).
|
|||||||
- **Installer** (`install.sh`) — fully automated Ubuntu 24.04 installer
|
- **Installer** (`install.sh`) — fully automated Ubuntu 24.04 installer
|
||||||
- Self-updating: always fetches the latest version from GitHub before running
|
- Self-updating: always fetches the latest version from GitHub before running
|
||||||
- Idempotent step tracking — re-runnable after failures without redoing completed steps
|
- Idempotent step tracking — re-runnable after failures without redoing completed steps
|
||||||
- Installs Apache 2, PHP 8.2 + 8.3 (via ondrej/php PPA), MariaDB, PowerDNS, Exim 4, Dovecot, SpamAssassin, Fail2ban, Certbot
|
- Installs Apache 2, PHP 8.2 + 8.3 (via ondrej/php PPA), MariaDB, PowerDNS,
|
||||||
|
Exim 4, Dovecot, SpamAssassin, Fail2ban, Certbot
|
||||||
- Configures Apache reverse proxy on ports 2083 (NixClient) and 2087 (NixServer)
|
- Configures Apache reverse proxy on ports 2083 (NixClient) and 2087 (NixServer)
|
||||||
- Prompts for admin credentials, hostname, and license key during install
|
- Generates admin credentials automatically; displays them in the completion banner
|
||||||
- License activation against `https://license.nixpanel.io` with grace period fallback
|
- License activation against `https://license.nixpanel.io`
|
||||||
|
- **NixServer** — WHM-style admin panel (React 18 + TypeScript + Tailwind + Vite, port 2087)
|
||||||
|
- **NixClient** — cPanel-style user panel (React 18 + TypeScript + Tailwind + Vite, port 2083)
|
||||||
- **Licensing** — license key validated against `https://license.nixpanel.io` during install
|
- **Licensing** — license key validated against `https://license.nixpanel.io` during install
|
||||||
- Plans: Free, Solo ($9.99/mo), Host ($29.99/mo), Agency ($79.99/mo)
|
- Plans: Free, Solo ($9.99/mo), Host ($29.99/mo), Agency ($79.99/mo)
|
||||||
- Server IP binding with grace period fallback
|
- **Infrastructure** — `.gitattributes` enforcing LF line endings
|
||||||
- **nixpanel.io** — customer portal at [nixpanel.io](https://nixpanel.io)
|
|
||||||
- Stripe subscriptions with monthly and annual billing
|
|
||||||
- Customer auth: register, login, email verification, password reset
|
|
||||||
- License management and IP change requests
|
|
||||||
|
|
||||||
### Infrastructure
|
|
||||||
- `.gitattributes` enforcing LF line endings for `.sh`, `.rs`, `.toml`, `.sql`, `.md` files
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
[Unreleased]: https://github.com/NixReaper/nixpanel/compare/v0.1.0-alpha...HEAD
|
[Unreleased]: https://github.com/NixReaper/nixpanel/compare/v0.2.0-alpha...HEAD
|
||||||
|
[0.2.0-alpha]: https://github.com/NixReaper/nixpanel/compare/v0.1.0-alpha...v0.2.0-alpha
|
||||||
[0.1.0-alpha]: https://github.com/NixReaper/nixpanel/releases/tag/v0.1.0-alpha
|
[0.1.0-alpha]: https://github.com/NixReaper/nixpanel/releases/tag/v0.1.0-alpha
|
||||||
|
|||||||
@@ -394,7 +394,7 @@ function ClientPanel() {
|
|||||||
|
|
||||||
{/* Footer */}
|
{/* Footer */}
|
||||||
<footer className="border-t border-[#2a3044] px-6 py-3 text-center text-[10px] text-gray-700">
|
<footer className="border-t border-[#2a3044] px-6 py-3 text-center text-[10px] text-gray-700">
|
||||||
NixPanel Client v0.1.0 · {domain} · Powered by NixServer
|
NixPanel Client v0.2.0-alpha · {domain} · Powered by NixServer
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
@@ -500,7 +500,7 @@ export default function App() {
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div className="border-t border-[#2a3044] px-6 py-3 bg-[#0f1520] text-[10px] text-gray-700 text-center">
|
<div className="border-t border-[#2a3044] px-6 py-3 bg-[#0f1520] text-[10px] text-gray-700 text-center">
|
||||||
NixPanel Client v0.1.0 · Manage your hosting account
|
NixPanel Client v0.2.0-alpha · Manage your hosting account
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nixpanel"
|
name = "nixpanel"
|
||||||
version = "0.1.0"
|
version = "0.2.0-alpha"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nixpanel-common"
|
name = "nixpanel-common"
|
||||||
version = "0.1.0"
|
version = "0.2.0-alpha"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nixpanel-services"
|
name = "nixpanel-services"
|
||||||
version = "0.1.0"
|
version = "0.2.0-alpha"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nixpanel-sysinfo"
|
name = "nixpanel-sysinfo"
|
||||||
version = "0.1.0"
|
version = "0.2.0-alpha"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
|
|||||||
@@ -622,7 +622,7 @@ function AdminPanel({ username, onLogout }: { username: string; onLogout: () =>
|
|||||||
<main className="flex-1 p-6 overflow-auto">{renderPage()}</main>
|
<main className="flex-1 p-6 overflow-auto">{renderPage()}</main>
|
||||||
|
|
||||||
<footer className="border-t border-[#2a3044] px-6 py-2 flex items-center justify-between text-[10px] text-gray-700">
|
<footer className="border-t border-[#2a3044] px-6 py-2 flex items-center justify-between text-[10px] text-gray-700">
|
||||||
<span>NixPanel WHM v0.1.0 · Ubuntu 24.04 LTS</span>
|
<span>NixPanel WHM v0.2.0-alpha · Ubuntu 24.04 LTS</span>
|
||||||
<span>© 2025 NixPanel</span>
|
<span>© 2025 NixPanel</span>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
@@ -699,7 +699,7 @@ export default function App() {
|
|||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p className="text-[10px] text-gray-700">NixPanel WHM v0.1.0 · Secured by Fail2ban</p>
|
<p className="text-[10px] text-gray-700">NixPanel WHM v0.2.0-alpha · Secured by Fail2ban</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Login form */}
|
{/* Login form */}
|
||||||
@@ -744,7 +744,7 @@ export default function App() {
|
|||||||
|
|
||||||
<div className="border-t border-[#2a3044] px-6 py-3 bg-[#0f1520] flex items-center justify-between text-[10px] text-gray-700">
|
<div className="border-t border-[#2a3044] px-6 py-3 bg-[#0f1520] flex items-center justify-between text-[10px] text-gray-700">
|
||||||
<span>Secured by Fail2ban</span>
|
<span>Secured by Fail2ban</span>
|
||||||
<span>NixPanel v0.1</span>
|
<span>NixPanel v0.2.0-alpha</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user