Baserow 自建:开源的 Airtable 替代品,无代码数据库
Airtable 是一款把电子表格和数据库结合在一起的产品,但按行收费、数据存在别人服务器。Baserow 是完全开源的 Airtable 替代品,自己部署就能用,数据完全自控,功能覆盖 Airtable 80% 的使用场景。这篇文章讲如何用 Docker Compose 搭建 Baserow。
Baserow 能做什么
- 灵活的表格视图:网格、画廊、表单、看板、日历多种视图
- 字段类型丰富:文本、数字、日期、选项、关联字段、文件附件、公式等
- 实时协作:多人同时编辑,变更实时同步
- API 自动化:每个数据库自动生成 REST API,可以和 n8n、Make 等集成
- 自定义表单:生成公开表单收集数据
- 权限控制:团队成员按角色分配权限
服务器要求
- 2 核 CPU,4GB 内存(推荐)
- 20GB 硬盘
雨云服务器 rainyun+ com的 2 核 4G 机型完全够用,个人或小团队使用非常流畅。注册填优惠码 2026off 领 5 折优惠券。
Docker Compose 部署
# 安装 Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
mkdir -p ~/baserow && cd ~/baserow
创建 docker-compose.yml:
version: "3.8"
services:
baserow:
image: baserow/baserow:latest
container_name: baserow
environment:
BASEROW_PUBLIC_URL: "https://baserow.你的域名.com"
SECRET_KEY: "替换为随机32字符字符串"
DATABASE_URL: "postgresql://baserow:baserow_password@db/baserow"
REDIS_URL: "redis://redis:6379"
EMAIL_SMTP: "false" # 不配置邮件时设为 false
DISABLE_ANONYMOUS_PUBLIC_VIEW: "false"
volumes:
- baserow_data:/baserow/data
ports:
- "127.0.0.1:8000:8000" # 只监听本地,通过 Caddy 反代
depends_on:
- db
- redis
restart: unless-stopped
db:
image: postgres:15-alpine
container_name: baserow-db
environment:
POSTGRES_DB: baserow
POSTGRES_USER: baserow
POSTGRES_PASSWORD: baserow_password
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
redis:
image: redis:7-alpine
container_name: baserow-redis
restart: unless-stopped
caddy:
image: caddy:alpine
container_name: caddy
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
restart: unless-stopped
volumes:
baserow_data:
postgres_data:
caddy_data:
caddy_config:
创建 Caddyfile:
baserow.你的域名.com {
reverse_proxy baserow:8000
}
生成 SECRET_KEY:
python3 -c "import secrets; print(secrets.token_hex(32))"
# 把输出的字符串填入 docker-compose.yml 的 SECRET_KEY
启动服务:
docker compose up -d
# 查看启动日志(首次启动需要 1-2 分钟初始化数据库)
docker compose logs -f baserow
初始配置
访问 https://baserow.你的域名.com,注册第一个账号即为管理员。
创建工作区和数据库的步骤:
- 点击左侧「Add workspace」创建工作区
- 在工作区内点击「Add database」
- 开始创建表格
常见使用场景
场景一:项目任务管理
创建任务追踪数据库:
字段设计:
- 任务名称(文本)
- 负责人(关联用户字段)
- 状态(单选:待开始/进行中/已完成/已搁置)
- 优先级(单选:高/中/低)
- 截止日期(日期)
- 关联项目(关联字段 → 项目表)
- 描述(长文本)
视图:
- 全部任务(网格视图)
- 看板(按状态分组)
- 我的任务(按负责人过滤)
- 本周截止(按日期过滤)
场景二:内容管理/CMS
字段设计:
- 标题(文本)
- 内容(长文本/Rich Text)
- 分类(多选)
- 状态(单选:草稿/审核中/已发布)
- 发布时间(日期)
- 封面(文件字段)
- 作者(关联字段)
场景三:客户关系管理
字段设计:
- 公司名(文本)
- 联系人(文本)
- 邮箱(邮件字段)
- 电话(电话字段)
- 阶段(单选:线索/跟进中/成交/流失)
- 金额(数字)
- 下次跟进(日期)
- 备注(长文本)
使用 REST API
Baserow 自动为每个数据库生成 API,可以在「API」文档页面查看:
# 获取 API Token
# Settings → API Tokens → Create token
# 查询数据
curl -X GET \
"https://baserow.你的域名.com/api/database/rows/table/你的表ID/?user_field_names=true" \
-H "Authorization: Token 你的API_Token"
# 创建一行数据
curl -X POST \
"https://baserow.你的域名.com/api/database/rows/table/你的表ID/?user_field_names=true" \
-H "Authorization: Token 你的API_Token" \
-H "Content-Type: application/json" \
-d '{"任务名称": "完成产品原型", "状态": "进行中"}'
邮件配置(可选)
如果需要邀请成员或发送通知邮件:
# 在 docker-compose.yml 里添加邮件配置
environment:
EMAIL_SMTP: "true"
EMAIL_SMTP_HOST: "smtp.example.com"
EMAIL_SMTP_PORT: "587"
EMAIL_SMTP_USE_TLS: "true"
EMAIL_SMTP_USER: "noreply@example.com"
EMAIL_SMTP_PASSWORD: "你的邮件密码"
FROM_EMAIL: "noreply@example.com"
备份数据
cat > ~/baserow/backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR=~/baserow-backups
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# 备份 PostgreSQL
docker exec baserow-db pg_dump -U baserow baserow | \
gzip > "$BACKUP_DIR/db-$DATE.sql.gz"
# 备份上传的文件
docker run --rm \
-v baserow_data:/data \
-v "$BACKUP_DIR":/backup \
alpine tar czf "/backup/files-$DATE.tar.gz" /data/media
# 保留最近 14 天
find "$BACKUP_DIR" -name "*.gz" -mtime +14 -delete
echo "[$(date)] 备份完成"
EOF
chmod +x ~/baserow/backup.sh
(crontab -l 2>/dev/null; echo "0 2 * * * ~/baserow/backup.sh") | crontab -
升级 Baserow
cd ~/baserow
docker compose pull
docker compose up -d
Baserow 是一个功能完整的无代码数据库平台,对于不想依赖 Airtable 的团队来说是理想的替代方案。自托管意味着数据完全自控,不会因为 Airtable 调整价格或政策而被动。在 雨云服务器 rainyun+com的 2 核 4G 机型上,小团队日常协作毫无压力,注册填优惠码 2026off 领 5 折优惠券,成本远低于 Airtable 订阅费。