Skip to main content
This guide provides detailed instructions for installing Chainstack Self-Hosted, including advanced configuration options.

Installation methods

Chainstack Self-Hosted supports two installation modes:
ModeDescriptionUse case
BasicAuto-generates all passwords and deploys with default settingsQuick setup, testing, single-server deployments
AdvancedGenerates a customizable values templateCustom deployments

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.

Basic installation

Basic installation automatically generates secure passwords and deploys the complete stack.
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
To get the installer, join our beta program.
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 with port 8081: http://<SERVER-PUBLIC-IP>:8081. You will need to expose the deployments API on this port 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

Confirm and deploy

The installer will show a summary and ask you to confirm:
==> About to install Control Panel
  Version: v1.1.3
  Namespace: control-panel
  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.

Advanced installation

Advanced installation generates a values template with pre-filled passwords and RSA keys. Use this mode when you need to customize the deployment—for example, to connect an external PostgreSQL database or Temporal server.
1

Generate the values template

cpctl install --advanced -v VERSION
This creates a cp-values.yaml file in your current directory with auto-generated passwords and keys.To specify a different output file, use the -o flag:
cpctl install --advanced -v VERSION -o my-values.yaml
2

Edit the values file

Open the generated file and customize it for your environment. The default file name is cp-values.yaml, or the name you specified with -o:
nano cp-values.yaml
Common customizations:
  • External PostgreSQL — provide your database host, port, credentials, and disable the bundled PostgreSQL-HA
  • External Temporal — provide your Temporal server address and disable the bundled Temporal
  • Storage class — set a specific storage class for persistent volumes
  • Resource limits — adjust CPU and memory for Control Panel components
3

Install with the custom values

Run the installer with your edited values file (replace the file name if you used -o):
cpctl install -v VERSION -f cp-values.yaml -s STORAGE_CLASS_NAME
4

Confirm and deploy

The installer shows a summary and asks you to confirm:
==> About to install Control Panel
  Version: v1.1.3
  Namespace: control-panel
  Release: cp
  Timeout: 15m0s

Do you want to proceed? [y/N]: y
Confirm with y to start the deployment.
Generated credentials are saved the same way as with basic installation. See Credentials storage.

Installation options reference

OptionDescriptionDefault
-v, --versionChart version (required, format: vX.Y.Z)
-n, --namespaceKubernetes namespacecontrol-panel
-r, --releaseHelm release namecp
-f, --valuesPath to custom values file
-s, --storage-classStorage class for persistent volumesCluster default
--set key=valueSet Helm values (repeatable)
--advancedGenerate values template instead of installingfalse
-o, --outputOutput file for --advanced modecp-values.yaml
--backend-urlCP UI backend API URLhttp://<release>-cp-deployments-api
-y, --yesAuto-approve prompts (non-interactive)false
--dry-runPrint Helm command without executingfalse
--timeoutInstallation timeout15m0s
--poll-intervalStatus polling interval for progress display3s
--config-dirDirectory for credentials storage~/.config/cp-suite
--kubeconfigPath to kubeconfig file~/.kube/config
--no-colorDisable colored outputfalse
--clear-linesClear lines for progress updates (requires TTY)true
--verboseEnable verbose outputfalse

Post-installation

Verify deployment status

cpctl status
Look for the healthy status at the bottom of the output:
Overall Status: ✓ Healthy
Reason: All components ready

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

After installation, continue to:
  1. First login — First login and configuration
  2. Deploying nodes — Deploy blockchain nodes
Last modified on March 10, 2026