Complete the checks in Requirements before you start. The steps below deploy Deckhouse Code with the values every installation needs at minimum.

Obtain the chart

Add the chart repository and update it:

helm repo add deckhouse-code <CHART_REGISTRY>
helm repo update

Prepare the values file

Create values.yaml with the domain, the ingress class, the TLS Secret, the StorageClass for Git repository storage, and the external PostgreSQL, Redis and object storage connections:

global:
  hosts:
    domain: code.example.com
  ingress:
    class: <INGRESS_CLASS_NAME>
    tls:
      secretName: <TLS_SECRET_NAME>
  psql:
    host: <POSTGRESQL_HOST>
    port: 5432
    database: <POSTGRESQL_DATABASE>
    username: <POSTGRESQL_USERNAME>
    password:
      secretName: <POSTGRESQL_PASSWORD_SECRET>
      key: password
  redis:
    host: <REDIS_HOST>
    port: 6379
    password:
      secretName: <REDIS_PASSWORD_SECRET>
      key: password
  appConfig:
    object_store:
      enabled: true
      connection:
        secretName: <OBJECT_STORE_CONNECTION_SECRET>
gitaly:
  persistence:
    size: <VALUE>
    storageClass: <STORAGE_CLASS_NAME>

Replace every placeholder with the actual class, Secret and host names. Configuration names every value shown here and what it configures.

Install the release

helm upgrade --install code deckhouse-code \
  -n code --create-namespace \
  -f values.yaml

The command creates the code namespace when it does not exist yet, and installs the release under the name code.

Point DNS at the ingress

Get the address the ingress controller assigned to the release’s Ingress objects:

d8 k -n code get ingress

Point the DNS name from global.hosts.domain at the address shown in the ADDRESS column, as an A, AAAA or CNAME record depending on what the ingress controller returns.

Wait for the release to become ready

A migrations job runs once, before the pods that depend on the database schema start. Confirm every pod reaches the Running state:

d8 k -n code get pods

Sign in for the first time

The chart creates a Secret with the initial password for the root account, named after the release (code-initial-root-password, following the chart’s initial-password naming convention). Retrieve it:

d8 k -n code get secret code-initial-root-password -o jsonpath='{.data.password}' | base64 -d

Open https://code.example.com (the domain from global.hosts.domain) and sign in as root with that password.

Verify the installation

Confirm the sign-in page loads over HTTPS with the certificate from global.ingress.tls.secretName, and that every pod and the migrations job report a healthy state:

d8 k -n code get pods,jobs