Install the control plane

The control plane is your own CDN admin console; one server is enough. Prepare a fresh server, copy the one-line install command from the licence portal and run it, set the administrator during the install, then sign in and add nodes and sites from the console.

System requirements

The control plane and nodes run on x86_64 only and need a freshly installed system. The installer runs preflight checks first: "failed" items must be fixed, "warning" items can be confirmed.

Minimum:

  • OS: Ubuntu 24.04 supported; Ubuntu 22.04 / 20.04, Debian 10–13 and Rocky / AlmaLinux / RHEL 8–10 compatible (version 10 needs x86-64-v3)
  • CPU: x86_64 with SSE4.2
  • At least 4 GB of memory
  • At least 10 GB of disk

Recommended:

  • 2 CPU cores and 8 GB of memory
  • 40 GB of disk or more, ideally a 100 GB SSD

Network: open TCP 443 (or the HTTPS port you choose) and TCP 80, plus the two gateway ports printed at the end of the install; the control plane must reach auth.cdnca.com and the package source. Use a clean system with no web server or database preinstalled; the server’s public IP must match the licensed IP. Node requirements are in System requirements.

Install methods

Choose the method that fits you:

  • Method 1: the one-line command for the commercial edition, generated in the licence portal with a one-time activation credential; see Install steps below.
  • Method 2: unattended install with flags for the console address, port, e-mail and administrator, for scripted rollouts; see Install the control plane.
  • Method 3: the community edition. No activation and completely free; source and packages are published on GitHub, see Community edition.

The one-line command looks like this; use the one you copy from the portal (it carries the activation credential and is valid for 24 hours):

(f=$(mktemp) || exit 1; trap 'rc=$?; rm -f "$f"; exit $rc' EXIT; trap 'exit 130' INT; trap 'exit 143' TERM; { curl --proto '=https' --proto-redir '=https' -fsSL -o "$f" 'https://auth.cdnca.com/downloads/install-control.sh'; } || { rc=$?; echo '[cdnca-control] error: 无法下载安装脚本' >&2; exit $rc; }; { [ "$(head -c 2 "$f")" = '#!' ] && [ "$(tail -n 1 "$f")" = 'main "$@"' ]; } || { echo '[cdnca-control] error: 下载的安装脚本为空或不完整' >&2; exit 1; }; bash "$f" --licensing-server 'https://auth.cdnca.com')

Install steps

Each step below follows the real screens; screenshots come from a live environment with IPs and IDs blurred.

Sign in to the licence portal

Open the licence portal at auth.cdnca.com. Without an account, choose Sign up first and then sign in. The portal handles licences, install commands, orders and balance; it is not your CDN console.

Licence portal sign-in page: an introduction on the left; username or e-mail, password, human check and the Sign in button on the right, with Sign up and Forgot password below
The licence portal sign-in page at auth.cdnca.com; choose Sign up if you have no account yet.

Generate the install command

Open My licences on the left, claim the free licence or buy one, then open the licence you will use.

My licences in the licence portal: a free licence product card at the top and a table of licence ID, product, licensed IP, licensed domain, node count and expiry below
My licences: after claiming or buying a licence, open it here to see its details.
  1. Under Licence details, check that the licensed IP matches the server’s public IP. If not, use Change control-plane IP first; an unregistered IP gets 403 when downloading the installer.
  2. Under Install instructions on the right, choose One-click install script → Generate install command → Copy. The command is shown only once and is for your own server; do not share it or paste it into public tickets.
Licence details: purchase information and licence details (licensed IP, licensed domain, Change control-plane IP) on the left; the Install instructions checklist, requirements and the One-click install script button on the right, followed by the change-server steps
Install instructions on the right of the licence details. This licence already has a control plane, so One-click install script is greyed out; for a new licence you generate and copy the command here.

Run it on the server

Log in to the server as root and paste the whole command; there is nothing else to add. The installer has 12 steps and shows the current step, overall progress and the estimated time left; the full output goes to /var/log/cdnca-install-control-*.log:

  1. Preflight checks and console address
  2. Install base tools
  3. Confirm the activation credential and administrator account
  4. Download and verify the package
  5. Install dependencies (PostgreSQL, ClickHouse, Redis, ClamAV, RustFS)
  6. Generate the control-plane identity and certificates
  7. Download node packages and components
  8. Initialise the database and messaging
  9. Activate the licence
  10. Initialise console data
  11. Start services and self-check
  12. Summarise the result

Each finished step prints "✓ [n/12] step done" in the terminal (the installer prints it in Chinese); a failure prints "✗ [n/12] … failed" with an error line above it. Do not close the terminal after a download or unpack message.

Answer the prompts

The installer asks for the following:

PromptWhat to enter
Console public domain or IPThe address admins and users open, for example console.cdnca.com; check DNS first when using a domain
HTTPS port443 by default; with another port, every console address must include it
Certificate contact e-mailA working mailbox for HTTPS certificate requests; it is not the admin login
Admin usernameYour choice, there is no default account; starts with a lowercase letter, 3–128 characters of lowercase letters, digits, underscore, dot and hyphen
Admin password8–1024 characters with at least two of upper case, lower case, digits and symbols, no spaces or non-ASCII characters; nothing is echoed while typing, enter it twice

If you already have a trusted public certificate, pass it with --public-cert-file and --public-key-file and the installer will not request one.

Install complete

control-api installed, activated and ready in the terminal means the install is complete. The installer also prints two gateway ports (node enrollment and node channel); open TCP 443, 80 and those two ports in the host firewall and the cloud security group. You can check that all four services are active:

systemctl is-active cdnca-control-api cdnca-agent-gateway cdnca-control-nats cdnca-control-web

Back in the licence details, the licensed IP and domain should now show the values reported by this control plane.

First sign-in

Open https://your-console-domain/dashboard/login in a browser (include the port if it is not 443) and sign in with the administrator you just set. The Control plane URL printed by the installer omits the port; use the port you entered.

Control-plane console sign-in page: brand artwork on the left, username and password fields and the Sign in button on the right
The console sign-in page at https://your-console-domain/dashboard/login; sign in with the administrator account you set during the install.
Service overview in the console: the left menu (Analytics, Nodes, Sites, Plans, System and more), operating and network charts in the middle, system status and licence on the right
After signing in you land on Service overview: all three System status items show a green tick, and System licence shows the customer, node allowance and expiry.
Full control-plane install guide →

Add your first node

Go to Nodes → Node list, choose Install node → Copy command → Copy install command, and run it as root on the node server. All nodes share one command; you do not add nodes by hand first.

Node list under Nodes: tabs for Node list, Pending initialisation, Disabled after sync failure and Regions, the blue Install node button at top left, and a table of node IP, bandwidth, monthly traffic and Normal status
Nodes → Node list, with Install node at the top left.
Install node dialog on the Copy command tab: all nodes share one command, the command area is blurred, with Copy install command and Reset registration credential buttons and a note on initialisation
The Install node dialog: choose Copy install command and run it as root on the node server (the command carries a registration credential and is blurred here).

After the command finishes, the node appears under Pending initialisation; choose Initialise and pick a region. Once it is Normal, create a line group and add the node IP to it. Full steps are in Install a node.

Pending initialisation tab of the node list: a table of node IP, time added and actions, empty here
Pending initialisation: a node shows up here after running the command and starts serving only after you choose Initialise.
Node install guide →

Add your first site

Go to Sites → Site list, choose Add site, pick the owner and the user plan, enter the domains and origins, and choose Create site. When the CNAME appears in the list, point the domain at it at your DNS provider.

Add site dialog: Single/Bulk switch, fields for owner, user plan, site domains and origin addresses, a collapsed Advanced section, and Cancel and Create site buttons
The Add site dialog: pick the owner and plan, enter the domains and origins, then choose Create site.
Site list under Sites: Add site at top left and a table of domain, CNAME, HTTPS, origin and listen port, plan, status and time added; domains and origins are blurred
Sites → Site list: find the CNAME of each site here and copy it to your DNS provider.

For HTTPS, request or upload a certificate under Sites → Certificates, then bind it in the site’s HTTPS settings; see HTTPS certificates.

Certificate list: Add certificate and Reapply buttons, status filters (all, valid, expiring, expired, auto-renew), and a table of type (auto-issued or uploaded), expiry and an auto-renew switch
Sites → Certificates: request or upload a certificate, turn on auto-renew, then bind it in the site’s HTTPS settings.

System services and boot

The installer registers the control plane as systemd services, enables them at boot and restarts them on failure; there is no separate service install step. The control plane consists of four services:

  • cdnca-control-api: control-plane API
  • cdnca-agent-gateway: node gateway
  • cdnca-control-nats: messaging
  • cdnca-control-web: admin console

Logs:

journalctl -u cdnca-control-api -n 200 --no-pager

Restart commands are in Restart.

Upgrade, reinstall, migrate and uninstall

  • Upgrade: only from System → Maintenance → System upgrade in the console; nodes are upgraded from the same page. Do not replace binaries by hand.
  • Backup: back up now or schedule backups and off-site storage under Maintenance → Backup and migration.
  • Migrate to a new server: moves the whole control plane and keeps the original install; no new install command is needed.
  • Reinstall: act on the failed step; if step 9 (activate the licence) or a later step failed, do not rerun a fresh install. See If the install fails.
  • Uninstall the control plane: there is no uninstall script; reinstall the OS to remove it completely. Uninstall a node with the script on the node.

Community edition

The community edition needs no activation and is completely free under the AGPL-3.0 licence, with a built-in community licence: nothing to buy or activate in the licence portal. Its source and packages are published on GitHub (github.com/CDNCA/cdnca); the first stable release is coming soon, and this section will then explain how to install it.

How the editions differ →

FAQ

Installer download returns 403

Symptom
The terminal prints a [cdnca-control] error line saying the installer cannot be downloaded.
Cause
The server’s public IP is not registered in the licence portal, or it is not the egress IP.
Fix
Set the control-plane IP under My licences to the server’s egress IP and run the same command again.

Preflight "failed" or "warning"

Symptom
Step 1 lists failed or warning items.
Cause
"Failed" items are hard requirements (OS version, architecture, memory, ports in use and so on); "warning" items are advisory.
Fix
Fix every failed item before continuing; confirm warnings, or add --yes at the end of the command.

Activation credential expired

Symptom
The command was run more than 24 hours after it was generated and the installer exits with an error.
Cause
The activation credential in the command is valid for 24 hours.
Fix
Generate a new install command in the licence details.

Nothing appears while typing the password

Symptom
No characters show while entering the administrator password.
Cause
The input is hidden on purpose; nothing is stuck.
Fix
Press Enter when done, then type it again to confirm.

The console does not open in the browser

Symptom
The console address does not respond after the install.
Cause
Usually DNS has not taken effect, the port is wrong, or the firewall or security group does not allow 443 and 80.
Fix
Check DNS, the public IP, the actual port and the security group; the address must include /dashboard/login and the port when it is not 443. Wait for DNS changes to apply.

The console opens but you cannot sign in

Symptom
The sign-in page opens but signing in fails.
Cause
There is no default admin account; the username is the one you set during the install. Or a service is not running.
Fix
Check the username and service status (all four services should be active). For a lost password see Lost the admin password.

Rerunning reports existing installation state

Symptom
Rerunning the command reports existing control installation state or existing_state_requires_review.
Cause
A previous attempt failed between steps 5 and 8 and left some state behind.
Fix
Do not delete directories to make the host look fresh; send the log and the failed step to support, or use a clean server.

Is ARM supported?

Symptom
You want to install on an ARM server.
Cause
Packages are built for x86_64 (amd64) only.
Fix
Use an x86_64 server.

More in Troubleshooting.