Skip to main content
This guide walks through a standard installation with auto-generated passwords and default settings. For custom deployments — external databases, adjusted resource limits, or manual values — see Advanced installation.

Prerequisites

Before installation, make sure you have a running Kubernetes cluster with kubectl, Helm, yq, and openssl installed. See Environment setup for instructions and a verification checklist.

Install

1

Run the installer

Find your storage class name:
kubectl get storageclass
Common storage classes:
  • local-path — default k3s storage class (single-disk setups)
  • topolvm-provisioner — TopoLVM (multi-disk setups)
  • Cloud providers use their own defaults (gp2/gp3 on AWS, standard on GCP, managed-premium on Azure)
Run the installer with your version and storage class:
cpctl install -v VERSION -s STORAGE_CLASS_NAME
For example:
cpctl install -v v1.4.6 -s topolvm-provisioner
To get the installer, see Download Chainstack Self-Hosted.
2

Confirm auto-generation

When prompted, confirm that you want to auto-generate passwords:
No values file provided. Generate passwords automatically? [y/N]: y
3

Specify the URL for the backend

The installer will ask for the backend API URL. The Control Panel UI uses this URL to reach the deployments API.
Enter CP UI backend API URL [http://cp-cp-deployments-api]:
  • Single server, accessing the UI from a browser — enter your server’s public IP: http://<SERVER-PUBLIC-IP>. You will need to expose the UI service on port 80 later (see Post-installation).
  • Default — press Enter to keep http://cp-cp-deployments-api. This uses in-cluster DNS and only works if the UI is also accessed from inside the cluster.
4

Specify the workload namespace

The installer will ask for the Kubernetes namespace where blockchain node pods will run:
Enter workload namespace for blockchain nodes [control-panel-deployments]:
Press Enter to accept the default control-panel-deployments. Change it only if you need a custom namespace layout.
5

Choose monitoring configuration

The installer will prompt you to configure the monitoring stack:
Monitoring stack:
  [1] Install monitoring stack (clean cluster, no existing VictoriaMetrics)
  [2] Install monitoring using existing VictoriaMetrics operator
  [3] Skip monitoring

Choice [1]:
  • Option 1 — installs the full monitoring stack (Grafana, VictoriaMetrics, exporters). Use this for a clean cluster.
  • Option 2 — reuses an existing VictoriaMetrics operator already deployed on the cluster.
  • Option 3 — skips monitoring entirely.
6

Confirm and deploy

The installer will show a summary and ask you to confirm:
==> About to install Control Panel
  Version: v1.4.6
  Namespace: control-panel
  Workload Namespace: control-panel-deployments
  Release: cp
  Timeout: 15m0s

Do you want to proceed? [y/N]: y
Confirm with y. The installer will then deploy the full stack (PostgreSQL, Temporal, Keycloak, Control Panel services).

Credentials storage

Generated credentials are saved to:
~/.config/cp-suite/values/cp-control-panel-<timestamp>.yaml
This file contains sensitive passwords and keys. Keep it secure and backed up.

Post-installation

Monitoring stack

v1.4.6+ includes an optional integrated observability stack (Grafana, VictoriaMetrics, and the Chainstack blockchain-node-exporter). During installation, you are prompted to install it, reuse an existing VictoriaMetrics operator, or skip it. See Monitoring for access instructions and available dashboards.

Verify deployment status

cpctl status
Look for the healthy status at the bottom of the output:
Overall Status: ✓ Healthy
Reason: All components ready
Useful flags:
FlagDescription
-w, --watchWatch status with continuous updates
--wideShow full resource names without truncation
--no-podsHide pod details for a cleaner view
--unhealthy-onlyShow only unhealthy or degraded components
-o json / -o yamlMachine-readable output for automation
--log-file <path>Write the status output to a file

Expose the UI service

kubectl expose service cp-cp-ui --type=LoadBalancer --name=cp-ui-external -n control-panel

Option 2: NodePort

kubectl expose service cp-cp-ui --type=NodePort --name=cp-ui-nodeport -n control-panel

Option 3: Ingress

Create an Ingress resource:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cp-ui-ingress
  namespace: control-panel
spec:
  rules:
  - host: cp.yourdomain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: cp-cp-ui
            port:
              number: 80

Option 4: Port forward (testing only)

kubectl port-forward svc/cp-cp-ui 8080:80 -n control-panel --address 0.0.0.0

Next steps

  1. First login — First login and configuration
  2. Deploying nodes — Deploy your first blockchain node
  3. Advanced installation — Customize your deployment
Last modified on April 13, 2026