# Advanced deployment options

## Configure external access

### Configure ingress for opik-frontend

```yaml
component:
    frontend:
      ingress:
        enabled: true
        ingressClassName: <your ingress class>
        annotations:
            <your annotations>
        hosts:
            - host: opik.example.com
              paths:
                - path: /
                  port: 5173
                  pathType: Prefix
        # For TLS configuration (optional)
        tls:
            enabled: true
            hosts:  # Optional - defaults to hosts from rules if not specified
                - opik.example.com
            secretName: <your-tls-secret>  # Optional - omit if using cert-manager or similar
```

### Configure LoadBalancer service for clickhouse

```yaml
clickhouse:
  service:
    serviceTemplate: clickhouse-cluster-svc-lb-template
    annotations: <your clickhouse LB service annotations>
```

## Configure Clickhouse backup

[Clickhouse Backup](./backup)

## Configure replication for Clickhouse

<Warning>
  **Important Limitation:**\
  You must have Opik running *before* you enable replication for ClickHouse.\
  Attempting to set up replication before Opik is running may result in errors or misconfiguration.
</Warning>

```yaml
clickhouse:
  replicasCount: 2
```

## Use S3 bucket for Opik

### Using AWS key and secret keys

```yaml
component:
  backend:
    env:
      S3_BUCKET: <your_bucket_name>
      S3_REGION: <aws_region>
      AWS_ACCESS_KEY_ID: <your AWS Key>
      AWS_SECRET_ACCESS_KEY: <your AWS Secret>
```

## Use IAM Role

If your IAM role is configured for the k8s nodes, the only things you will need is to set for opik-backend:

```yaml
component:
  backend:
    env:
      S3_BUCKET: <your_bucket_name>
      S3_REGION: <aws_region> 
```

If your role should be used by opik-backend serviceAccount, in addition you need to set:

```yaml
component:
  backend:
    serviceAccount:
      enabled: true
      annotations:
        eks.amazonaws.com/role-arn: <your IAM Role arn>
```

## Use external Clickhouse installation

Supported from Opik chart version 1.4.2

Configuration snippet for using external Clickhouse:

```yaml
component:
    backend:
      ...
      waitForClickhouse:
        clickhouse:
          host: <YOUR CLICKHOUSE HOST>
          port: 8123
          protocol: http
      env:
        ANALYTICS_DB_MIGRATIONS_URL: "jdbc:clickhouse://<YOUR CLICKHOUSE HOST>:8123"
        ANALYTICS_DB_HOST: "<YOUR CLICKHOUSE HOST>"
        ANALYTICS_DB_DATABASE_NAME: "opik"
        ANALYTICS_DB_MIGRATIONS_USER: "opik"
        ANALYTICS_DB_USERNAME: "opik"
        ANALYTICS_DB_MIGRATIONS_PASS: "xxx"
        ANALYTICS_DB_PASS: "xxx"
    ...
clickhouse:
    enabled: false
```

The passwords can be handled in the secret, and then you should configure it as following

```yaml
component:
    backend:
      ...
      envFrom:
        - configMapRef:
            name: opik-backend
        - secretRef:
            name: <your secret name>
      env:
        ANALYTICS_DB_MIGRATIONS_URL: "jdbc:clickhouse://<YOUR CLICKHOUSE HOST>:8123"
        ANALYTICS_DB_HOST: "<YOUR CLICKHOUSE HOST>"
        ANALYTICS_DB_DATABASE_NAME: "opik"
        ANALYTICS_DB_MIGRATIONS_USER: "opik"
        ANALYTICS_DB_USERNAME: "opik"
...
clickhouse:
    enabled: false
```