Repository Setup
Set up the Helm charts repository and environment overrides
This guide explains how to set up the Helm charts repository and create your environment-specific configuration files.
Overview
Meeting BaaS provides Helm charts via a separate repository (kubernetes-config). You'll create your own repository that includes these charts as a git submodule and add your environment-specific overrides.
Repository Structure
Create the following structure:
your-company-meeting-baas-config/
├── helm-charts/ # Git submodule (kubernetes-config repo)
│ ├── api_server_v2_chart/
│ ├── job_v2_chart/
│ ├── zoom_bots_v2_chart/
│ ├── meet_teams_bots_v2_chart/
│ ├── video_device_plugin_chart/
│ └── baas_controller.sh
├── environment-overrides/ # Your environment-specific configs
│ ├── api_server_v2_chart/
│ │ └── prod.yaml
│ ├── job_v2_chart/
│ │ └── prod.yaml
│ ├── zoom_bots_v2_chart/
│ │ └── prod.yaml
│ ├── meet_teams_bots_v2_chart/
│ │ └── prod.yaml
│ └── video_device_plugin_chart/
│ └── prod.yaml
├── k8s-resources/ # Kubernetes resources (certificates, etc.)
│ └── prod-certs/
│ ├── cluster-issuer.yaml
│ └── cluster-certificate.yaml
└── kubeconfig.yaml # Your Kubernetes config (gitignored)Step 1: Create Your Repository
# Create new directory
mkdir your-company-meeting-baas-config
cd your-company-meeting-baas-config
# Initialize git repository
git initStep 2: Add Helm Charts as Submodule
Add the Meeting BaaS kubernetes-config repository as a git submodule:
# Add submodule
git submodule add https://github.com/Meeting-BaaS/kubernetes-config.git helm-charts
# Initialize and update submodule
git submodule update --init --recursiveNote: You'll need access to the kubernetes-config repository. Contact your Meeting BaaS representative for access.
Step 3: Create Environment Overrides Directory
# Create directory structure
mkdir -p environment-overrides/{api_server_v2_chart,job_v2_chart,zoom_bots_v2_chart,meet_teams_bots_v2_chart,video_device_plugin_chart}
# Create k8s-resources directory
mkdir -p k8s-resources/prod-certsStep 4: Create .gitignore
Create a .gitignore file to exclude sensitive files:
# Kubernetes config (contains credentials)
kubeconfig.yaml
kubeconfig-*.yaml
# Environment overrides (may contain secrets)
# Uncomment if you want to keep them private:
# environment-overrides/**/*.yaml
# Git submodule tracking
.git/modules/
# IDE files
.vscode/
.idea/
*.swp
*.swo
*~
# OS files
.DS_Store
Thumbs.dbStep 5: Create Environment Override Files
You'll receive template prod.yaml files from Meeting BaaS. Create these files in your environment-overrides directory:
api_server_v2_chart/prod.yaml
image:
repository: YOUR_REGISTRY/api-server-v2 # Update to your registry
pullPolicy: Always
# Feature flags - customize based on your needs
featureFlags:
selfHosted: true
enableStripe: false
enableSvix: false
enableCalendar: false
enableMultitenant: false
enableDashboard: false
enableTranscription: false
enableEmail: false
# Self-hosted configuration
selfHosted:
staticApiKey: "your-secret-api-key" # Generate a secure key
staticTeamId: "your-team-id" # Choose a team identifier
# Node selector - update with your pool name
nodeSelector:
k8s.scaleway.com/pool-name: YOUR_API_POOL_NAME
# Secrets - fill in your values
secret:
database_url: "postgres://..."
redis_url: "redis://..."
# ... other secrets
# ConfigMap - update with your values
configmap:
api_server_baseurl: "https://api.yourcompany.com"
frontend_baseurl: "https://dashboard.yourcompany.com"
# ... other config valuesjob_v2_chart/prod.yaml
image:
repository: YOUR_REGISTRY/api-server-v2 # Same as API server
pullPolicy: Always
# Feature flags - should match api_server_v2_chart
featureFlags:
enableCalendar: false
enableMultitenant: false
enableTranscription: false
enableEmail: false
# Node selector - update with your pool name
nodeSelector:
k8s.scaleway.com/pool-name: YOUR_API_POOL_NAME
# Secrets - fill in your values
secret:
database_url: "postgres://..."
# ... other secretszoom_bots_v2_chart/prod.yaml
image:
repository: YOUR_REGISTRY/zoom-bots-v2 # Update to your registry
pullPolicy: Always
# Node selector - update with your bots pool name
nodeSelector:
k8s.scaleway.com/pool-name: YOUR_BOTS_POOL_NAME
# Secrets - fill in your values
secrets:
sqs_queue_url: "https://sqs..."
# ... other secretsmeet_teams_bots_v2_chart/prod.yaml
image:
repository: YOUR_REGISTRY/meet-teams-bots-v2 # Update to your registry
pullPolicy: Always
# Node selector - update with your bots pool name
nodeSelector:
k8s.scaleway.com/pool-name: YOUR_BOTS_POOL_NAME
# Secrets - fill in your values
secrets:
sqs_queue_url: "https://sqs..."
# ... other secretsvideo_device_plugin_chart/prod.yaml
image:
repository: YOUR_REGISTRY/video-device-plugin # Update to your registry
pullPolicy: IfNotPresent
tag: "1.0.0"
# Node selector - update with your bots pool name
nodeSelector:
k8s.scaleway.com/pool-name: YOUR_BOTS_POOL_NAMEStep 6: Update baas_controller.sh
The baas_controller.sh script needs to know your Kubernetes context. Update it:
# Find your kubectl context name
kubectl config get-contexts
# Edit baas_controller.sh
# Replace 'admin@meeting-baas-prod-k8' with your context name
# Or update the context switching logic to match your setupNote: The script automatically detects if you're running from the root directory or helm-charts directory.
Step 7: Configure Kubernetes Resources
Cluster Issuer (cert-manager)
Create k8s-resources/prod-certs/cluster-issuer.yaml:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-cluster-issuer
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: your-email@yourcompany.com # Update with your email
privateKeySecretRef:
name: letsencrypt-cluster-issuer-key
solvers:
- http01:
ingress:
class: nginxCertificate
Create k8s-resources/prod-certs/cluster-certificate.yaml:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: api-meeting-baas-tls
namespace: services
spec:
secretName: api-meeting-baas-tls
issuerRef:
name: letsencrypt-cluster-issuer
kind: ClusterIssuer
dnsNames:
- api.yourcompany.com # Update with your domainStep 8: Add kubeconfig
Download your Kubernetes config file:
# For Scaleway Kapsule
scw k8s kubeconfig get YOUR_CLUSTER_ID > kubeconfig.yaml
# Or download from your cloud provider's consoleImportant: Add kubeconfig.yaml to .gitignore (already done above).
Step 9: Verify Setup
# Verify kubectl can connect
kubectl --kubeconfig=kubeconfig.yaml get nodes
# Verify Helm charts are accessible
ls helm-charts/api_server_v2_chart/
# Verify environment overrides exist
ls environment-overrides/api_server_v2_chart/prod.yamlStep 10: Commit to Git (Optional)
If you want to version control your configuration:
# Add files (excluding secrets)
git add helm-charts/
git add environment-overrides/ # Only if not gitignored
git add k8s-resources/
git add .gitignore
git add .gitmodules
# Commit
git commit -m "Initial Meeting BaaS v2 configuration"
# Push to your repository
git remote add origin YOUR_REPO_URL
git push -u origin mainSecurity Note: Consider keeping environment-overrides in a private repository or using a secrets management tool.
Updating Helm Charts
When Meeting BaaS updates the Helm charts:
# Update submodule to latest
cd helm-charts
git pull origin main
cd ..
# Review changes
git diff helm-charts
# Commit the update
git add helm-charts
git commit -m "Update Helm charts to latest version"Customizing Charts
If you need to customize the Helm charts:
- Fork the repository: Create your own fork of
kubernetes-config - Use your fork: Update the submodule to point to your fork
- Make changes: Modify charts as needed
- Keep in sync: Periodically merge updates from the upstream repository
Note: Customizing charts makes upgrades more complex. Prefer using environment overrides when possible.
Next Steps
- Configuration - Configure feature flags and environment variables
- Deployment - Deploy the platform to your cluster
