Service stack (backend): - webserver.ts rewritten: apache2/php-fpm routes replacing nginx; per-account Apache log endpoint; PHP-FPM reload per version; apache2ctl configtest/reload - accounts.ts: added PUT /:id/shell to toggle /bin/bash vs /usr/sbin/nologin, runs usermod -s and writes audit log New UI features (nixserver): - ShellAccess page: grant/revoke SSH access per account via AccountPicker - ApacheLogs page: live log viewer (access/error) per account; replaces stub - NginxLogs: re-exports ApacheLogs (NixPanel uses Apache, not NGINX) - WebServer page: shows apache2, php8.2-fpm, php8.3-fpm status with reload buttons; config test; Apache log viewer Bug fixes: - Accounts.tsx: Lucide icon size prop type widened (string|number); removed unused Users import; dropped duplicate NGINX log card - Removed soon badge from ShellAccess and ApacheLogs entries Project: - CHANGELOG.md created with full history from 0.2.x through 0.4.0 - All packages bumped from 0.3.2 to 0.4.0
7.5 KiB
7.5 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.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.