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.

Version 3.6.0 · 2.0 MB · placed 08 Sep 2026, 20:07 UTC

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

  1. 01Users and directories

    Service users, /opt, /etc, /var/lib and the log paths.

  2. 02Base packages, time, Node

    System packages, Chrony, the Node version the backend needs.

  3. 03nginx

    From nginx.org, pinned to a fixed version.

  4. 04PHP-FPM and the panel pool

    Its own socket and its own session directory for the interface.

  5. 05Panel

    Backend for Node, interface in the C pattern for PHP-FPM.

  6. 06MariaDB and migration

    Database, user, schema brought to the current state.

  7. 07phpMyAdmin

    Under the server’s own address, locked down.

  8. 08Mail system

    Postfix, Dovecot, OpenDKIM, Roundcube, fully wired together.

  9. 09Certbot, Docker, Composer, Laravel

    The tools the panel needs later on.

  10. 10Management access

    Self-signed TLS on port 8443, login at /controller/auth/login.

  11. 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.

Back to the overview