WHM is a registered trademark of cPanel, L.L.C. Replace all occurrences: - Sidebar: 'Basic WebHost Manager® Setup' → 'Basic NixServer Setup' - Sidebar: 'WHM Marketplace' → 'NixServer Marketplace' - Sidebar: 'OpenAPI Documentation for WHM' → 'OpenAPI Documentation for NixServer' - nixserver/package.json: @nixpanel/whm → @nixpanel/nixserver - server/src/app.ts: whmDist variable → nixserverDist
12 KiB
12 KiB
NixPanel Changelog
All notable changes to NixPanel are documented here. Versioning follows Semantic Versioning: MAJOR.MINOR.PATCH. Pre-1.0 versions treat MINOR as feature releases and PATCH as bug fixes.
[0.4.6] — 2026-04-11
Changes
- Removed all WHM trademark references — "WHM" is a registered trademark of cPanel, L.L.C. All occurrences replaced with "NixServer":
- Sidebar menu item "Basic WebHost Manager® Setup" → "Basic NixServer Setup"
- Sidebar menu item "WHM Marketplace" → "NixServer Marketplace"
- Sidebar menu item "OpenAPI Documentation for WHM" → "OpenAPI Documentation for NixServer"
- Internal npm package name
@nixpanel/whm→@nixpanel/nixserver
[0.4.5] — 2026-04-11
Bug Fixes
- Sidebar version refresh not updating — clicking the refresh icon now clears the stale version immediately (shows spinner) and adds a
?_t=cache-bust parameter so the browser never serves a cached response. Same fix applied to the "Retry" button in the error state. uptimeandkillmissing from exec allowlist — causedGET /api/nixserver/system/infoto throw "Command not allowed", returning 500 and leaving Hostname/OS as…on the dashboard.- Version fetch auto-retry — when the version API fails (e.g. during service restart after upgrade), the sidebar now automatically retries every 5 s until it succeeds instead of permanently showing "Version unavailable".
New Features
- Day/Night mode toggle — sun/moon flip switch at the right end of the dashboard info bar. Light palette: page
#f0f4f8, cards#ffffff. Preference persisted tolocalStorage. All pages switch via seven[data-theme="light"]CSS overrides inindex.csswithout touching individual page files.
[0.4.4] — 2026-04-11
New Features
- Server info bar on Dashboard — cPanel/WHM-style info strip at the top of the NixPanel home page. Shows Username, Hostname, OS, NixPanel Version, Load Averages (live from WebSocket), and Server Monitoring alert count. Alerts are colour-coded: green "All Clear" when all managed services are running; amber "N Alerts" with a count of stopped/failed services.
[0.4.3] — 2026-04-11
New Features
- Version display in sidebar — the sidebar footer shows the currently installed version (e.g.
v0.4.3), fetched live from the API. A green checkmark indicates up to date; an amber alert indicates an update is available. - One-click panel upgrade — "Upgrade panel" button in the sidebar footer. When a newer version is available it highlights amber and shows the target version. Clicking requires a confirmation step before running. Calls
POST /api/nixserver/system/upgradewhich firesscripts/update.shin the background (git pull → npm install → prisma migrate → build frontends + server → restart service). The panel comes back online automatically after ~60 s. - Check for updates button — small refresh icon next to the version badge re-fetches version info on demand.
- Backend:
GET /api/nixserver/system/version— returnscurrentVersion(read from/opt/nixpanel/package.json),latestVersion(fetched from GitHub raw content with a 5 s timeout), andupdateAvailableboolean. - Backend:
POST /api/nixserver/system/upgrade— admin-only; responds immediately then spawnsscripts/update.shdetached so the HTTP response is flushed before the service restarts.
[0.4.2] — 2026-04-11
Changes
- NixServer sidebar redesigned — replaced the flat 14-item nav with a full WHM-style collapsible category sidebar (29 categories, ~210 menu items). Categories fold/unfold on click; the active route's category auto-expands on navigation. A live search box at the top of the sidebar filters items across all categories and auto-expands matching results. Sidebar can be hidden entirely via the topbar toggle. All existing routes are wired to their correct menu items; future feature items route to the closest related hub page.
[0.4.1] — 2026-04-11
Bug Fixes (Installer)
- SpamAssassin service name: On Ubuntu 24.04 the service unit is
spamd, notspamassassin. The oldsystemctl enable spamassassincaused the install to abort due toset -euo pipefail. - PowerDNS port 53 conflict:
systemd-resolvedstub listener now disabled in a dedicated step that runs before package installation. Previously it ran after apt had already tried (and failed) to restartpdnsduring post-install because port 53 was still held bysystemd-resolved. - Git clone into pre-existing directory: The directory structure step (
mkdir -p) creates$INSTALL_DIRbefore the clone step, causinggit cloneto fail with "destination path already exists". Fixed by cloning to a temp directory and copying contents into place (preserving any existingdata/andlogs/subdirectories). - Apache 403 on frontend assets: Frontend dist files were created with root-only permissions. Added a post-build step that sets 755/644 on all dist directories and files so Apache (
www-data) can read them. - Apache 500 on all API requests:
mod_proxy_httpwas not enabled. Without it,ProxyPass http://...directives silently fail and Apache returns 500 for every API call. Also enabledmod_proxy_wstunnel(required for thews://WebSocket reverse proxy).
[0.4.0] — 2026-04-11
New Features
- Shell Access Manager (
/accounts/shell-access): Admin can enable (/bin/bash) or disable (/usr/sbin/nologin) SSH shell access per hosting account. Reads current shell on account select; shows current state clearly before toggle. - Apache Log Viewer (
/accounts/apache-logs): Admin can view the last 200 lines ofaccess.logorerror.logfrom each account's home directory (~/logs/). Replaced the former "Coming Soon" stub. - Backend: Shell toggle route —
PUT /api/nixserver/accounts/:id/shell— validatesenabledboolean, runsusermod -s, updates DB, creates audit log entry. - Backend: Per-account Apache log route —
GET /api/nixserver/webserver/accounts/:username/logs/:type— validates username against[a-zA-Z0-9_-]+, tails~/logs/{access,error}.log.
Changes
- WebServer page fully rewritten to Apache-only: shows status for
apache2,php8.2-fpm,php8.3-fpm; per-service reload buttons; config test callsapache2ctl configtest; log viewer reads from/var/log/apache2/. - Backend
webserver.tsrewritten: removed all nginx references, added Apache (apache2ctl configtest/reload), PHP-FPM reload (systemctl reload php8.x-fpm),readdir-based vhost listing from/etc/apache2/sites-enabled/. - NginxLogs page (
/accounts/nginx-logs) now re-exportsApacheLogs— NixPanel uses Apache, not NGINX. - Accounts hub (
/accounts): removed the separate "Raw NGINX Log Download" card (duplicate of Apache Logs); removedsoonbadges from Shell Access and Apache Log Viewer; fixed Lucide iconsizeprop TypeScript incompatibility.
Bug Fixes
Accounts.tsx: Lucide iconComponentTypedeclaredsize?: numberbut Lucide passessize?: string | number— widened tosize?: number | string.Accounts.tsx: Removed unusedUsersimport (TS6133).webserver.ts(backend): Routes were still callingnginx -t,systemctl reload nginx, and reading from/etc/nginx/despite nginx being removed from the service stack in 0.3.x. Fixed to use Apache equivalents.
[0.3.2] — 2026-03-xx
Changes
- TypeScript compilation fixes across server, nixserver, nixclient.
auth/index.ts: FixedParameters<typeof prisma.refreshToken.create>resolving tounknownin Prisma 5 — replaced with explicit typed object using?? undefinedon optional relation fields.nixclient/cron.ts: Added explicit type annotation(j: { schedule, command, comment })tojobs.map()callback to resolve implicitany.nixserver/accounts.ts: Added explicit type annotation to over-quota filter lambda.mysql2added to server dependencies (^3.11.5).@types/node-cronadded to server devDependencies (^3.0.11).
[0.3.1] — 2026-03-xx
New Features
- Databases (
nixclient): Full MariaDB database management — create/delete databases, add/remove database users with privilege selection. Backend replaced shell-exec MySQL calls withmysql2parameterized queries and identifier allowlist to prevent injection. - Email (
nixclient): Rewrote email route — replaceddoveadmcalls withcore/mail.tsfunctions; addedPUT /:id/passwordroute; forwarder add/remove via Exim virtual_aliases. - SSL (
nixserver): Certbot switched from--webrootto--apacheplugin; usesgetCertPaths()fromcore/ssl.ts. - Domains (
nixclient): Connected subdomain, addon domain, and parked domain APIs. - Stats (
nixclient): Disk/bandwidth usage bars + feature usage counts.
Core Modules Added
core/apache.ts— Apache vhost generation, enable/disable/suspend, PHP-FPM pool management.core/dns.ts— Rewritten for PowerDNS bind backend; zone file management in/etc/pdns/zones/;pdns_controlintegration.core/mail.ts— Full Exim4 + Dovecot mailbox lifecycle (create, delete, password update, forwarders). Usesopenssl passwd -6 -stdinviaexecWithStdin().core/mariadb.ts— mysql2 connection pool; parameterized DDL for databases and users;validateIdentifier()allowlist.core/monitor.ts— Service health monitor for apache2, php-fpm, exim4, dovecot, pdns, mariadb, fail2ban; auto-restart with rolling window cap.core/ssl.ts—issueCertificate(),renewExpiring(),getCertPaths().core/stats.ts—collectDiskUsage()viadf -BM,resetMonthlyBandwidth().core/license.ts— Startup validation + 6-hour heartbeat to licensing server.core/exec.ts— AddedexecWithStdin()viachild_process.spawnfor stdin piping; added pdns, exim4, nixpanel paths to allowlist; removed nginx/bind/postfix.scheduler.ts— node-cron scheduler for monitor, SSL renewal, disk stats, license heartbeat, bandwidth reset.
Removed
core/nginx.ts— deleted; replaced bycore/apache.ts.
[0.3.0] — 2026-03-xx
Architecture: Service Stack Change
Complete server stack pivot based on cPanel reverse-engineering analysis (Ubuntu 24.04 install diff). Replaced incorrect services with cPanel-equivalent stack:
| Component | Before | After |
|---|---|---|
| Web server | nginx | Apache2 + mod_proxy_fcgi |
| PHP | php-fpm (generic) | PHP-FPM 8.2 + 8.3 per-account pools |
| DNS | BIND9 | PowerDNS + bind backend |
| Mail MTA | Postfix | Exim4 (exim4-daemon-heavy) |
| Mail IMAP/POP3 | — | Dovecot (imapd, pop3d, lmtpd) |
| Panel database | MariaDB | SQLite (panel-internal) |
| Firewall | UFW | iptables + netfilter-persistent |
| FTP | vsftpd | Deferred to post-v1 |
Config Changes (config.ts)
- Removed nginx paths; added
apacheSites,apacheEnabled,phpFpmPool82/83,pdnsZones,pdnsBindBackend,eximVirtualDomains,eximVirtualMailboxes,eximVirtualAliases,dovecotPasswd,letsencryptLive. - Added
mariadbconnection section (host, port, user, password). - Added
licensingsection (serverUrl, licenseKey). - Removed
features.terminalEnabled.
Prisma Schema (schema.prisma)
- Switched provider from
mysqltosqlite. - Removed all
@db.VarChar,@db.Text,@db.BigInttype annotations (SQLite incompatible). - Added
resellerId Int?+resellerrelation toAuditLog. - Added
auditLogs AuditLog[]toResellermodel. - Removed
TerminalSessionmodel. - Fixed account default shell:
/bin/false→/usr/sbin/nologin.
Installer (scripts/install.sh)
- Hard Ubuntu 24.04 check.
- Correct package list: apache2, pdns-server, pdns-backend-bind, exim4, exim4-daemon-heavy, dovecot-core/imapd/pop3d/lmtpd, php8.2-fpm, php8.3-fpm, mariadb-server, certbot python3-certbot-apache, iptables, iptables-persistent, sqlite3.
- Idempotent step tracking via
/var/lib/nixpanel/install/*.done. - Package pinning via
/etc/apt/preferences.d/nixpanel-pins(prevents apt from overriding managed packages). - Disables unattended-upgrades.
- Creates
nixpanelsystem user with nologin shell. - Configures PowerDNS bind backend; disables systemd-resolved stub.
- Configures Exim4 via debconf for internet site mode.
- Configures Dovecot with passwd-file auth.
- SQLite database at
/opt/nixpanel/data/nixpanel.db. - iptables rules with
netfilter-persistent save. - Certbot Apache deploy hook for auto-reload.
[0.2.x] — Prior
Initial development with incorrect service stack (nginx, BIND9, Postfix, MariaDB for panel data). Functional skeleton of API routes; no production-ready installer.