Skip to content

teableio/deployment

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Teable Azure AKS Deployment

License

One-click deployment of Teable to Azure Kubernetes Service (AKS).

πŸ’‘ No Terraform experience required! Just run one script - all configurations are pre-set.

πŸš€ Quick Start (5 minutes)

Prerequisites

Before you begin, make sure you have these tools installed:

πŸ“¦ Install Azure CLI (click to expand)

macOS:

brew install azure-cli

Windows:

winget install Microsoft.AzureCLI

Linux (Ubuntu/Debian):

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

Verify installation:

az --version
πŸ“¦ Install Terraform (click to expand)

macOS:

brew install terraform

Windows:

winget install Hashicorp.Terraform

Linux:

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 kubectl

Windows:

winget install Kubernetes.kubectl

Linux:

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/kubectl

Verify installation:

kubectl version --client

Deployment Steps

# 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.sh

After deployment, point your domain's DNS to the output IP address, then visit https://your-domain.com!


πŸ“ Architecture

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

βš™οΈ Configuration Options

Required Settings

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"

Optional Settings (usually no changes needed)

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"

Environment Presets

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

πŸ“– Common Operations

Check Status

# 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

Upgrade Teable

# 1. Update version
echo 'teable_image_tag = "v1.6.0"' >> terraform.tfvars

# 2. Redeploy
terraform apply

Restart Teable

kubectl rollout restart deployment/teable -n teable

Destroy All Resources

./destroy.sh

⚠️ Warning: This will delete all data including the database!


❓ FAQ

Q: 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?
  1. Check the error message - it usually tells you what's wrong
  2. 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
  3. If still stuck, ask on GitHub Issues
Q: How do I use my own domain?
  1. After deployment, get the Ingress IP
  2. Add an A record in your domain's DNS settings:
    teable.yourcompany.com β†’ <ingress-ip>
    
  3. Wait for DNS propagation (usually 5-30 minutes)
  4. 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
EOF

Then 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

πŸ”§ Troubleshooting

Pod fails to start

# 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

Cannot connect to database

# Check PostgreSQL firewall rules
az postgres flexible-server firewall-rule list \
  --resource-group teable-prod-rg \
  --name teable-prod-pg

Ingress has no IP

# Check Ingress Controller status
kubectl get svc -n ingress-nginx

# View Ingress Controller logs
kubectl logs -n ingress-nginx -l app.kubernetes.io/component=controller

πŸ“š Related Links


πŸ“„ License

Apache License 2.0. See LICENSE for details.

About

Depolyment guide and script for teable

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published