One-click deployment of Teable to Azure Kubernetes Service (AKS).
π‘ No Terraform experience required! Just run one script - all configurations are pre-set.
Before you begin, make sure you have these tools installed:
π¦ Install Azure CLI (click to expand)
macOS:
brew install azure-cliWindows:
winget install Microsoft.AzureCLILinux (Ubuntu/Debian):
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bashVerify installation:
az --versionπ¦ Install Terraform (click to expand)
macOS:
brew install terraformWindows:
winget install Hashicorp.TerraformLinux:
wget https://releases.hashicorp.com/terraform/1.6.6/terraform_1.6.6_linux_amd64.zip
unzip terraform_1.6.6_linux_amd64.zip
sudo mv terraform /usr/local/bin/Verify installation:
terraform --versionβΉοΈ What is Terraform?
Terraform is an automation tool that creates cloud resources for you. You don't need to learn it - just run our script!
π¦ Install kubectl (click to expand)
macOS:
brew install kubectlWindows:
winget install Kubernetes.kubectlLinux:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectlVerify installation:
kubectl version --client# 1οΈβ£ Clone the repository
git clone https://github.com/teableio/deployment.git
cd deployment
# 2οΈβ£ Login to Azure
az login
# 3οΈβ£ Create configuration file
cp terraform.tfvars.example terraform.tfvars
# 4οΈβ£ Edit configuration (just change the domain)
# Open terraform.tfvars and set: teable_domain = "your-domain.com"
# 5οΈβ£ Deploy!
./deploy.shAfter deployment, point your domain's DNS to the output IP address, then visit https://your-domain.com!
After deployment, you'll have:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Azure Cloud β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Kubernetes Cluster (AKS) β β
β β β β
β β βββββββββββββ βββββββββββββ β β
β β β Teable β β MinIO β β β
β β β (App) βββββββββββΊβ (Storage) β β β
β β βββββββ¬ββββββ βββββββββββββ β β
β β β β β
β βββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββΌββββββββββ βββββββββββββββββββββ β
β β PostgreSQL β β Redis β β
β β (Azure Managed) β β (Azure Managed) β β
β βββββββββββββββββββββ βββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Why this architecture?
- β High reliability: Database and cache use Azure managed services with automatic backups
- β Auto-scaling: Teable automatically scales based on load
- β Secure: Passwords auto-generated, secrets encrypted
- β Easy maintenance: Upgrade by changing version and redeploying
Edit the terraform.tfvars file:
# Environment type: dev (development), staging, prod (production)
environment = "prod"
# Azure region (choose one close to your users)
location = "eastasia" # East Asia (Hong Kong)
# location = "southeastasia" # Southeast Asia (Singapore)
# location = "eastus" # East US
# Your domain name
teable_domain = "teable.yourcompany.com"View all optional settings
# AKS node configuration
aks_node_count = 2 # Number of nodes
aks_node_size = "Standard_D4s_v3" # Node size
# Auto-scaling (enabled by default)
teable_hpa_enabled = true # Enable Pod auto-scaling
teable_hpa_min_replicas = 2 # Minimum 2 pods
teable_hpa_max_replicas = 10 # Maximum 10 pods
teable_hpa_cpu_threshold = 70 # Scale up when CPU > 70%
# Storage
minio_storage_size = "100Gi" # File storage size
# Teable version
teable_image_tag = "latest" # Or specific version like "v1.5.0"Different environments automatically use appropriate resource sizes:
| Environment | PostgreSQL | Redis | Use Case |
|---|---|---|---|
dev |
Basic (cheap) | Basic | Development/testing |
staging |
Basic | Basic | Staging |
prod |
High-performance | Standard | Production |
# View all pod status
kubectl get pods -n teable
# View Teable logs
kubectl logs -n teable -l app=teable -f
# View auto-scaling status
kubectl get hpa -n teable# 1. Update version
echo 'teable_image_tag = "v1.6.0"' >> terraform.tfvars
# 2. Redeploy
terraform applykubectl rollout restart deployment/teable -n teable./destroy.shQ: How long does deployment take?
First deployment takes about 15-20 minutes:
- PostgreSQL creation: ~10 minutes
- AKS cluster creation: ~5-8 minutes
- Teable startup: ~3-5 minutes
Q: How much does it cost?
Estimated monthly cost (USD):
| Environment | Est. Cost/Month |
|---|---|
| dev | ~$150-200 |
| prod | ~$400-600 |
Main costs: AKS nodes + PostgreSQL + Redis
π‘ Tip: Set up cost alerts in Azure Portal
Q: I don't know Terraform. What if I have problems?
- Check the error message - it usually tells you what's wrong
- Common issues:
- Not logged in β Run
az login - Permission denied β Ensure your Azure account has resource creation permissions
- Quota exceeded β Contact Azure to increase quota
- Not logged in β Run
- If still stuck, ask on GitHub Issues
Q: How do I use my own domain?
- After deployment, get the Ingress IP
- Add an A record in your domain's DNS settings:
teable.yourcompany.com β <ingress-ip> - Wait for DNS propagation (usually 5-30 minutes)
- Visit
https://teable.yourcompany.com
Q: How do I configure HTTPS certificates?
After deployment, install cert-manager for automatic Let's Encrypt certificates:
# Install cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.3/cert-manager.yaml
# Create Let's Encrypt issuer (edit email)
kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: [email protected]
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
EOFThen edit ingress.yaml and uncomment the TLS configuration.
Q: How do I backup data?
Azure PostgreSQL has automatic backups enabled by default (7-day retention).
For manual backup:
# Get database connection info
terraform output -json | jq -r '.postgresql_fqdn.value'
# Use pg_dump to backup
pg_dump -h <fqdn> -U teableadmin -d teable > backup.sql# View pod details
kubectl describe pod -n teable -l app=teable
# View init container logs (database migration)
kubectl logs -n teable -l app=teable -c db-migrate# Check PostgreSQL firewall rules
az postgres flexible-server firewall-rule list \
--resource-group teable-prod-rg \
--name teable-prod-pg# Check Ingress Controller status
kubectl get svc -n ingress-nginx
# View Ingress Controller logs
kubectl logs -n ingress-nginx -l app.kubernetes.io/component=controllerApache License 2.0. See LICENSE for details.