# CloudBeaver 배포 가이드

CloudBeaver는 DBeaver가 제공하는 웹 기반 데이터베이스 관리 도구이다.
브라우저에서 PostgreSQL, MySQL, ClickHouse 등 다양한 데이터베이스에 접속하여 쿼리 실행 및 데이터 탐색이 가능하다.

- **chart version**: 1.1.4
- **app version**: 26.0.1
- **upstream**: https://avistotelecom.github.io/charts/

---

## 배포 방법

```sh
helm upgrade cloudbeaver ./ -f custom-values.yaml --install -n cloudbeaver --create-namespace
```

---

## custom-values.yaml 설명

### 1) 이미지 설정

| Name | 설명 | 기본값 |
|------|------|--------|
| `image.registry` | 이미지 레지스트리 | `docker.io` |
| `image.repository` | 이미지 저장소 | `dbeaver/cloudbeaver` |
| `image.tag` | 이미지 태그 | `26.0.1` |
| `image.pullPolicy` | 이미지 Pull 정책 | `IfNotPresent` |

### 2) 서비스 설정

| Name | 설명 | 기본값 |
|------|------|--------|
| `service.type` | 서비스 타입 | `ClusterIP` |
| `service.ports.http` | 서비스 포트 | `8978` |

### 3) Ingress 설정

| Name | 설명 | 기본값 |
|------|------|--------|
| `ingress.enabled` | Ingress 활성화 여부 | `true` |
| `ingress.ingressClassName` | IngressClass 이름 | `kong` |
| `ingress.hostname` | 접속 도메인 | `cloudbeaver.example.org` |
| `ingress.tls` | TLS 활성화 여부 | `true` |

cert-manager를 통한 인증서 자동 발급 및 Kong HTTPS 리다이렉트를 기본으로 사용한다.
TLS 시크릿은 cert-manager가 `{hostname}-tls` 이름으로 자동 생성한다.

```yaml
ingress:
  annotations:
    cert-manager.io/cluster-issuer: root-ca-issuer
    cert-manager.io/duration: 8760h
    cert-manager.io/renew-before: 720h
    konghq.com/protocols: https
    konghq.com/https-redirect-status-code: "301"
  tls: true
```

### 4) 스토리지 설정

CloudBeaver는 DB 접속 정보, 사용자 설정 등을 `/opt/cloudbeaver/workspace`에 저장한다.

| Name | 설명 | 기본값 |
|------|------|--------|
| `persistence.enabled` | PVC 사용 여부 | `true` |
| `persistence.storageClass` | StorageClass (빈 값이면 기본 사용) | `""` |
| `persistence.size` | 볼륨 크기 | `5Gi` |
| `persistence.accessModes` | 접근 모드 | `[ReadWriteOnce]` |

### 5) 리소스 설정

| 티어 | requests.cpu | requests.memory | limits.cpu | limits.memory |
|------|-------------|-----------------|------------|---------------|
| small | 500m | 512Mi | 750m | 768Mi |
| medium | 500m | 1024Mi | 1000m | 1536Mi |
| large | 1000m | 2048Mi | 1500m | 3072Mi |

기본값은 `small`이며, 동시 접속 사용자 수와 연결할 데이터베이스 수에 따라 조정한다.

```yaml
# small (기본)
resources:
  requests:
    cpu: 500m
    memory: 512Mi
  limits:
    cpu: 750m
    memory: 768Mi

# medium
# resources:
#   requests:
#     cpu: 500m
#     memory: 1024Mi
#   limits:
#     cpu: 1000m
#     memory: 1536Mi

# large
# resources:
#   requests:
#     cpu: 1000m
#     memory: 2048Mi
#   limits:
#     cpu: 1500m
#     memory: 3072Mi
```

### 6) 보안 컨텍스트

CloudBeaver는 UID/GID `8978`로 실행된다. 기본값 그대로 사용을 권장한다.

```yaml
podSecurityContext:
  enabled: true
  fsGroup: 8978

containerSecurityContext:
  enabled: true
  runAsUser: 8978
  runAsGroup: 8978
  runAsNonRoot: true
  allowPrivilegeEscalation: false
  capabilities:
    drop: ["ALL"]
```

---

## 초기 접속

배포 후 `ingress.hostname`으로 설정한 URL에 브라우저로 접속한다.
최초 접속 시 관리자 계정(Administrator) 생성 화면이 표시된다.
