> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chainstack.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Advanced installation

> Customize your Chainstack Self-Hosted deployment with external PostgreSQL databases, custom Helm values, and a full cpctl flag reference.

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

For a quick setup with auto-generated defaults, use the [basic installation](/docs/self-hosted/installation) instead.

## Advanced installation steps

<Steps>
  <Step title="Generate the values template">
    ```bash theme={"system"}
    cpctl install --advanced
    ```

    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:

    ```bash theme={"system"}
    cpctl install --advanced -o my-values.yaml
    ```

    <Note>
      By default, the installer uses the latest version. To pin a specific version, add `-v vX.Y.Z` — see [Release notes](/docs/self-hosted/release-notes) for available versions.
    </Note>
  </Step>

  <Step title="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`:

    ```bash theme={"system"}
    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
  </Step>

  <Step title="Install with the custom values">
    Run the installer with your edited values file (replace the file name if you used `-o`):

    ```bash theme={"system"}
    cpctl install -f cp-values.yaml -s STORAGE_CLASS_NAME
    ```
  </Step>

  <Step title="Confirm and deploy">
    The installer shows a summary and asks you to confirm:

    ```text theme={"system"}
    ==> About to install Control Panel
      Version: v1.8.0
      Namespace: control-panel
      Workload Namespace: control-panel-deployments
      Release: cp
      Timeout: 15m0s

    Do you want to proceed? [y/N]: y
    ```

    Confirm with `y` to start the deployment.
  </Step>
</Steps>

Generated credentials are saved the same way as with basic installation — see [Credentials storage](/docs/self-hosted/installation#credentials-storage).

## Installation options reference

### Install flags

| Option                 | Description                                                               | Default                               |
| ---------------------- | ------------------------------------------------------------------------- | ------------------------------------- |
| `-v, --version`        | Chart version (required, format: `vX.Y.Z`)                                | —                                     |
| `-f, --values`         | Path to custom values file                                                | —                                     |
| `-s, --storage-class`  | Storage class for persistent volumes                                      | Cluster default                       |
| `--workload-namespace` | Kubernetes namespace for blockchain node workloads                        | `<namespace>-deployments`             |
| `--set key=value`      | Set Helm values (repeatable)                                              | —                                     |
| `--advanced`           | Generate values template instead of installing                            | `false`                               |
| `-o, --output`         | Output file for `--advanced` mode                                         | `cp-values.yaml`                      |
| `--backend-url`        | CP UI backend API URL                                                     | `http://<release>-cp-deployments-api` |
| `--disable-monitoring` | Skip monitoring stack installation                                        | `false`                               |
| `--reuse-vm-operator`  | Use existing VictoriaMetrics operator; skip operator and CRD installation | `false`                               |
| `--chart-registry`     | OCI registry URL                                                          | Public CP registry                    |
| `-y, --yes`            | Auto-approve prompts (non-interactive)                                    | `false`                               |
| `--dry-run`            | Print Helm command without executing                                      | `false`                               |
| `--timeout`            | Installation timeout                                                      | `15m0s`                               |
| `--poll-interval`      | Status polling interval for progress display                              | `3s`                                  |
| `--config-dir`         | Directory for credentials storage                                         | `~/.config/cp-suite`                  |
| `--clear-lines`        | Clear lines for progress updates in non-TUI mode (requires TTY)           | `true`                                |

### Global flags

| Flag              | Description             | Default          |
| ----------------- | ----------------------- | ---------------- |
| `-n, --namespace` | Kubernetes namespace    | `control-panel`  |
| `-r, --release`   | Helm release name       | `cp`             |
| `--kubeconfig`    | Path to kubeconfig file | `~/.kube/config` |
| `--no-color`      | Disable colored output  | `false`          |
| `--verbose`       | Enable verbose output   | `false`          |

## Next steps

1. [First login](/docs/self-hosted/first-login) — First login and configuration
2. [Deploying nodes](/docs/self-hosted/deploying-nodes) — Deploy your first blockchain node
