mirror of
https://github.com/colanode/colanode.git
synced 2025-12-15 19:27:46 +01:00
139 lines
5.0 KiB
Markdown
139 lines
5.0 KiB
Markdown
# Colanode Kubernetes Deployment
|
|
|
|
A Helm chart for deploying [Colanode](https://github.com/colanode/colanode) on Kubernetes.
|
|
|
|
## Overview
|
|
|
|
This chart deploys a complete Colanode instance with all required dependencies:
|
|
|
|
- **Colanode Server**: The main application server
|
|
- **PostgreSQL**: Database with pgvector extension for vector operations
|
|
- **Redis/Valkey**: Message queue and caching
|
|
- **File Storage (default)**: Persistent volume for user files and avatars
|
|
- **Optional Object Storage**: MinIO (S3-compatible), external S3, Google Cloud Storage, or Azure Blob Storage
|
|
|
|
## Prerequisites
|
|
|
|
- Kubernetes 1.19+
|
|
- Helm 3.0+
|
|
- Ingress controller (if ingress is enabled)
|
|
|
|
## Installation
|
|
|
|
### Quick Start
|
|
|
|
```bash
|
|
# Add the chart repository (if publishing to a Helm repo)
|
|
helm repo add colanode https://static.colanode.com/hosting/kubernetes/chart
|
|
|
|
# Install with default values
|
|
helm install my-colanode colanode/colanode
|
|
|
|
# Or install from local chart
|
|
helm install my-colanode ./hosting/kubernetes/chart
|
|
```
|
|
|
|
### Custom Installation
|
|
|
|
```bash
|
|
# Install with custom values
|
|
helm install my-colanode ./hosting/kubernetes/chart \
|
|
--set colanode.ingress.hosts[0].host=colanode.example.com \
|
|
--set colanode.config.SERVER_NAME="My Colanode Instance"
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Core Settings
|
|
|
|
| Parameter | Description | Default |
|
|
| ----------------------------- | --------------------------- | ------------------------- |
|
|
| `colanode.replicaCount` | Number of Colanode replicas | `1` |
|
|
| `colanode.image.repository` | Colanode image repository | `ghcr.io/colanode/server` |
|
|
| `colanode.image.tag` | Colanode image tag | `latest` |
|
|
| `colanode.config.SERVER_NAME` | Server display name | `Colanode K8s` |
|
|
|
|
### Ingress Configuration
|
|
|
|
| Parameter | Description | Default |
|
|
| -------------------------------- | ------------------------ | --------------------- |
|
|
| `colanode.ingress.enabled` | Enable ingress | `true` |
|
|
| `colanode.ingress.hosts[0].host` | Hostname for the ingress | `chart-example.local` |
|
|
| `colanode.ingress.className` | Ingress class name | `""` |
|
|
|
|
### Dependencies
|
|
|
|
| Parameter | Description | Default |
|
|
| -------------------- | ----------------------------------------------------------------- | ------- |
|
|
| `postgresql.enabled` | Enable PostgreSQL deployment | `true` |
|
|
| `redis.enabled` | Enable Redis deployment | `true` |
|
|
| `minio.enabled` | Enable bundled MinIO (only required for the in-cluster S3 option) | `false` |
|
|
|
|
### Storage Configuration
|
|
|
|
Set `colanode.storage.type` to choose where user files and avatars are stored:
|
|
|
|
- **File storage (default)** mounts a persistent volume at `/var/lib/colanode/storage`. Adjust `colanode.storage.file.persistence` to control the PVC size, storage class, or reference an existing claim.
|
|
- **S3-compatible storage** (Amazon S3, MinIO, Cloudflare R2, etc.) requires `colanode.storage.type=s3`. Enable the bundled MinIO instance with `--set minio.enabled=true` or supply your provider endpoint, bucket, region, and credentials via `colanode.storage.s3.*`.
|
|
- **Google Cloud Storage** needs a service-account JSON key. Create a secret:
|
|
|
|
```bash
|
|
kubectl create secret generic gcs-credentials \
|
|
--from-file=service-account.json=/path/to/key.json
|
|
```
|
|
|
|
Then configure:
|
|
|
|
```yaml
|
|
colanode:
|
|
storage:
|
|
type: gcs
|
|
gcs:
|
|
bucket: your-bucket
|
|
projectId: your-project
|
|
credentialsSecret:
|
|
name: gcs-credentials
|
|
key: service-account.json
|
|
```
|
|
|
|
- **Azure Blob Storage** is available with `colanode.storage.type=azure`. Provide the storage `account`, `containerName`, and the account key via `colanode.storage.azure.accountKey` (inline value or an existing secret).
|
|
|
|
## Important Notes
|
|
|
|
### Security Settings
|
|
|
|
The chart includes `global.security.allowInsecureImages: true` because we use a custom PostgreSQL image with the pgvector extension. This setting is required by Bitnami Helm charts when using non-official images.
|
|
|
|
### Storage
|
|
|
|
By default, the chart configures persistent storage for:
|
|
|
|
- Colanode file storage (PVC): 20Gi
|
|
- PostgreSQL: 8Gi
|
|
- Redis: 8Gi
|
|
- MinIO: 10Gi (only when `minio.enabled=true`)
|
|
|
|
Adjust these values based on your requirements.
|
|
|
|
## Accessing Colanode
|
|
|
|
After installation, you can access Colanode through:
|
|
|
|
1. **Ingress** (recommended): Configure your ingress host and access via HTTP/HTTPS
|
|
2. **Port forwarding**: `kubectl port-forward svc/my-colanode 3000:3000`
|
|
3. **LoadBalancer**: Change service type to LoadBalancer if supported by your cluster
|
|
|
|
## Uninstall
|
|
|
|
```bash
|
|
helm uninstall my-colanode
|
|
```
|
|
|
|
## Development
|
|
|
|
To modify the chart:
|
|
|
|
1. Edit values in `/hosting/kubernetes/chart/values.yaml`
|
|
2. Update templates in `/hosting/kubernetes/chart/templates/`
|
|
3. Test with `helm template` or `helm install --dry-run`
|