Self-host Teable
updated Sep 2026deployed by usprices checked · Jul 2026Install verified on Ubuntu 26.04 · Sep 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →
A no-code database built on PostgreSQL: a spreadsheet-style grid with kanban, gallery, form and calendar views, real-time collaboration, automations and a REST API.
Airtable / yr$288
Self-hosted / yr~$283
You keep$5/yr
Pocket the difference — spin it up on a cheap VPS in minutes.Start free on Kamatera → (opens in new tab)
Key facts
CategoryNo-code database
LicenseAGPL-3.0
StackTypeScript, NestJS, Next.js
Min RAM4096 MB
Official imageyes
Measured idle RAM1885 MB
Difficulty
Websiteteable.ai (opens in new tab)
What you need
- Any VPS with at least 4096 MB of RAM
- A domain you control — most self-hosted setups need HTTPS in front of them
- Under an hour if you've used Docker before
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + USKamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + AsiaDigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + AsiaPaid link — we earn a commission if you shop through it.
Install
Run these commands on your server:
# Teable — upstream's minimal Docker Compose (help.teable.ai/en/deploy/docker): app + PostgreSQL + Redis
mkdir -p teable && cd teable
cat > .env <<EOF
POSTGRES_PASSWORD=$(openssl rand -hex 16)
REDIS_PASSWORD=$(openssl rand -hex 16)
SECRET_KEY=$(openssl rand -hex 32)
PUBLIC_ORIGIN=http://SERVER_IP:3000
POSTGRES_HOST=teable-db
POSTGRES_PORT=5432
POSTGRES_DB=teable
POSTGRES_USER=teable
REDIS_HOST=teable-cache
REDIS_PORT=6379
REDIS_DB=0
PRISMA_DATABASE_URL=postgresql://\${POSTGRES_USER}:\${POSTGRES_PASSWORD}@\${POSTGRES_HOST}:\${POSTGRES_PORT}/\${POSTGRES_DB}
BACKEND_CACHE_PROVIDER=redis
BACKEND_CACHE_REDIS_URI=redis://default:\${REDIS_PASSWORD}@\${REDIS_HOST}:\${REDIS_PORT}/\${REDIS_DB}
EOF
cat > docker-compose.yaml <<'EOF'
services:
teable:
image: ghcr.io/teableio/teable:latest
restart: always
ports: ['3000:3000']
volumes: ['teable-data:/app/.assets:rw']
env_file: [.env]
depends_on:
teable-db: { condition: service_healthy }
teable-cache: { condition: service_healthy }
teable-db:
image: postgres:15.4
restart: always
volumes: ['teable-db:/var/lib/postgresql/data:rw']
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
healthcheck: { test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}'], interval: 10s, timeout: 3s, retries: 3 }
teable-cache:
image: redis:7.2.4
restart: always
volumes: ['teable-cache:/data:rw']
command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
healthcheck: { test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping'], interval: 10s, timeout: 3s, retries: 3 }
volumes: { teable-data: {}, teable-db: {}, teable-cache: {} }
EOF
docker compose up -d # → http://SERVER_IP:3000
# the first account you sign up becomes the instance adminAn alternative to
More in No-code database
No-code database
Baserow
PythonDjangoVue
easyRead guide →
No-code database
Grist
TypeScriptNode.jsPython
easyRead guide →
No-code database
Mathesar
PythonDjangoSvelte
easyRead guide →
No-code database
NocoDB
TypeScriptNestJSVue
easyRead guide →