ControlDeskPanel · Ubuntu 26.04 · nginx
First installation on a fresh server.
One run brings up the complete stack: nginx, PHP-FPM, MariaDB, Node, the mail system, Docker, the panel itself and the protection layer.
The call
One line on the fresh server
The bootstrap verifies the checksum, unpacks and asks before it starts. It runs on the machine it is called on, nowhere else.
curl -fsSL https://installer.ctpf.network/cdp/ubuntu26/nginx/one-click-installer | sudo bash
Already running
Update an existing server
One line on a server that already runs ControlDeskPanel. It renews the panel — interface, backend, templates, service — and asks once before it starts. Databases, mailboxes, certificates, the host name and the firewall rules stay as they are, and nginx, PHP, MariaDB, Roundcube and phpMyAdmin are not touched: those belong to the system update inside the panel.
curl -fsSL https://installer.ctpf.network/cdp/ubuntu26/nginx/one-click-updater | sudo bash
Before anything is changed, the interface and the backend are copied aside with a timestamp. Nothing is ever deleted.
By hand
If you want to read the package first
curl -O https://installer.ctpf.network/cdp/ubuntu26/nginx/releases/cdp-autoinstaller-3.6.0.tgz curl -O https://installer.ctpf.network/cdp/ubuntu26/nginx/releases/cdp-autoinstaller-3.6.0.tgz.sha256 sha256sum -c cdp-autoinstaller-3.6.0.tgz.sha256 tar xzf cdp-autoinstaller-3.6.0.tgz cd cdp-autoinstaller-3.6.0 sudo ./install.sh
SHA-256ba4320b6279fac10928f74ad87a5f6fc791479cd6319de4452b98d55b43eaa82
Requirements
What the server has to bring
- Ubuntu 26.04Codename resolute. The installer checks this and stops on any other system.
- 4 CPU coresFewer are not enough to build the components.
- 6 GB of memoryThe lower bound, checked before the first step.
- 40 GB of diskFor the system, the packages and the database.
- A clean serverPorts 80, 443, 3306, 8443 and 9443 have to be free.
- An SSH sessionThe call asks before it starts; without a terminal it stops.
The sequence
What happens in one run
- 01Users and directories
Service users, /opt, /etc, /var/lib and the log paths.
- 02Base packages, time, Node
System packages, Chrony, the Node version the backend needs.
- 03nginx
From nginx.org, pinned to a fixed version.
- 04PHP-FPM and the panel pool
Its own socket and its own session directory for the interface.
- 05Panel
Backend for Node, interface in the C pattern for PHP-FPM.
- 06MariaDB and migration
Database, user, schema brought to the current state.
- 07phpMyAdmin
Under the server’s own address, locked down.
- 08Mail system
Postfix, Dovecot, OpenDKIM, Roundcube, fully wired together.
- 09Certbot, Docker, Composer, Laravel
The tools the panel needs later on.
- 10Management access
Self-signed TLS on port 8443, login at /controller/auth/login.
- 11Protection layer and acceptance
CDPGuard, the services, and finally the check over the whole stack.
The access to the panel is printed at the end of the run. Hostname and certificate are set afterwards in the panel, not in the installer.
Changelog
Every change is written down with its reason: CHANGELOG.md. The version that sits here is named in VERSION.