Skip to content

algollabs/algol-appwrite-helm

Repository files navigation

Appwrite Helm Chart

License: MIT Artifact Hub

A production-ready Helm chart for deploying Appwrite on Kubernetes with high availability, monitoring, and enterprise-grade configurations.

✨ Features

  • Complete Appwrite stack deployment (API, Realtime, Workers, Database, Cache, Storage)
  • Production-optimized configurations with resource management and security hardening
  • S3-compatible storage support (AWS S3, MinIO, DigitalOcean Spaces, Backblaze, Wasabi, Linode)
  • Comprehensive monitoring with InfluxDB and Telegraf for metrics collection
  • Multiple deployment profiles (lean single-node vs full multi-node production)
  • Extensive customization options for enterprise environments
  • Local testing infrastructure with k3d for development and validation

πŸš€ Quick Start

Prerequisites

  • Kubernetes 1.19+
  • Helm 3.8+
  • Storage class for persistent volumes
  • Ingress controller (Traefik, NGINX, etc.)

Installation

# Add Helm repository
helm repo add algol-labs https://algol-labs.github.io/algol-appwrite-helm
helm repo update

# Install with lean production values (recommended for single node)
helm install appwrite algol-labs/appwrite \
  --namespace appwrite --create-namespace \
  --values https://raw.githubusercontent.com/Algol-Labs/algol-appwrite-helm/main/values-production-lean.yaml

Basic Installation with Custom Values

# Install with your own values
helm install appwrite . \
  --namespace appwrite --create-namespace \
  --values values-production-lean.yaml

πŸ“‹ Deployment Profiles

Profile Use Case CPU Memory Replicas HA Storage
Lean Single node, testing, MVP 2.5 cores 6GB 1 ❌ 50GB+
Full Multi-node, production 6.4 cores 13GB 2 βœ… 100GB+

πŸš€ Lean Deployment (Recommended Start)

Perfect for single-node clusters, development, or MVP deployments:

# Generate secrets
export APPWRITE_OPENSSL_KEY=$(openssl rand -hex 32)
export DB_ROOT_PASSWORD=$(openssl rand -base64 32)
export DB_PASSWORD=$(openssl rand -base64 32)
export EXECUTOR_SECRET=$(openssl rand -hex 32)
export S3_ACCESS_KEY='your-minio-access-key'
export S3_SECRET='your-minio-secret-key'

# Install
helm install appwrite . \
  --namespace appwrite --create-namespace \
  --values values-production-lean.yaml \
  --set secrets.opensslKeyV1="$APPWRITE_OPENSSL_KEY" \
  --set secrets.dbRootPassword="$DB_ROOT_PASSWORD" \
  --set secrets.dbPassword="$DB_PASSWORD" \
  --set secrets.executorSecret="$EXECUTOR_SECRET" \
  --set secrets.storage.s3.accessKey="$S3_ACCESS_KEY" \
  --set secrets.storage.s3.secret="$S3_SECRET"

πŸ—οΈ Full Production Deployment

For multi-node clusters with high availability:

# Use full production configuration
helm install appwrite . \
  --namespace appwrite --create-namespace \
  --values values-production.yaml \
  --set secrets.opensslKeyV1="$APPWRITE_OPENSSL_KEY" \
  --set secrets.dbRootPassword="$DB_ROOT_PASSWORD" \
  --set secrets.dbPassword="$DB_PASSWORD" \
  --set secrets.executorSecret="$EXECUTOR_SECRET" \
  --set secrets.storage.s3.accessKey="$S3_ACCESS_KEY" \
  --set secrets.storage.s3.secret="$S3_SECRET"

πŸ”§ Configuration

Storage Configuration

The chart supports multiple S3-compatible storage providers:

storage:
  s3:
    enabled: true
    provider: "minio"  # aws, minio, do, backblaze, linode, wasabi
    endpoint: "https://your-s3-endpoint.com"
    region: "us-east-1"
    bucket: "appwrite"
    accessKey: "your-access-key"  # Set via secrets
    secret: "your-secret-key"     # Set via secrets

Domain Configuration

global:
  domain: "appwrite.example.com"          # Main domain
  domainRealtime: "realtime.example.com"  # WebSocket domain
  domainFunctions: "functions.example.com" # Functions domain

Resource Configuration

Resources are optimized for different deployment sizes:

resources:
  api:
    requests:
      cpu: "1000m"
      memory: "2Gi"
    limits:
      cpu: "2000m"
      memory: "4Gi"

πŸ“Š Monitoring

The chart includes comprehensive monitoring with:

  • InfluxDB for metrics storage
  • Telegraf for metrics collection
  • Grafana-ready dashboards (configure separately)

Access metrics at: http://appwrite-influxdb:8086

πŸ” Testing Locally

Prerequisites

# Install testing tools
brew install k3d kubectl helm  # macOS
# or
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash  # Linux

Quick Local Test

# Setup local cluster
./test/k3d/setup.sh

# Install chart
OPENSSL_KEY=$(openssl rand -hex 32)
helm install appwrite . -n appwrite -f test/k3d/values-local.yaml \
  --set secrets.opensslKeyV1=$OPENSSL_KEY

# Access
open http://localhost  # or http://appwrite.local

See Local Testing Guide for detailed setup.

πŸ“– Documentation

🀝 Contributing

We welcome contributions! See CONTRIBUTING.md for:

  • Development setup and environment
  • Chart development guidelines
  • Testing requirements
  • Pull request process

Quick Development Cycle

# Setup local test environment
./test/k3d/setup.sh

# Make changes to templates
vim templates/core/appwrite-deployment.yaml

# Test changes
helm upgrade appwrite . --namespace appwrite

# Validate
helm lint .
kubectl get pods -n appwrite

πŸ“¦ What's Included

Core Services

  • Appwrite API - Main application server
  • Appwrite Realtime - WebSocket server for real-time features
  • Appwrite Workers - Background job processors

Infrastructure

  • MariaDB - Primary database (MySQL compatible)
  • Redis - Cache and session storage
  • InfluxDB - Metrics and analytics storage
  • Telegraf - Metrics collection agent

Storage & Networking

  • Persistent volumes for all stateful data
  • Ingress controller integration (Traefik, NGINX, etc.)
  • S3-compatible storage for file uploads and assets

πŸ› οΈ Troubleshooting

Common Issues

Pods stuck in Pending:

kubectl describe pod -n appwrite <pod-name>
# Check Events section for resource constraints

Database connection issues:

kubectl logs -n appwrite deployment/appwrite-mariadb

Storage mounting problems:

kubectl get pvc -n appwrite
kubectl describe pvc <pvc-name>

Resource Monitoring

# Check resource usage
kubectl top pods -n appwrite

# View logs
kubectl logs -n appwrite -l component=api --tail=50

# Check all resources
kubectl get all,ingress,pvc,secrets -n appwrite

πŸ”„ Upgrading

# Upgrade with new values
helm upgrade appwrite . \
  --namespace appwrite \
  --values values-production-lean.yaml

# Check upgrade status
helm list -n appwrite
kubectl get pods -n appwrite --watch

πŸ—‘οΈ Uninstallation

# Remove deployment
helm uninstall appwrite -n appwrite

# Clean up persistent data (optional)
kubectl delete pvc --all -n appwrite

# Remove namespace
kubectl delete namespace appwrite

πŸ“„ License

Licensed under the MIT License.

🏒 Support


Made with ❀️ by Algol Labs

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors