基于PostgreSQL的无代码数据库Teable

什么是 Teable ?

Teable 是一个基于 Postgres 构建的超快速、实时、专业、开发人员友好的无代码数据库。它使用简单的、类似电子表格的界面来创建复杂的企业级数据库应用程序。通过无代码解锁高效的应用程序开发,摆脱数据安全性和可扩展性的障碍。

下面👇是官方提供的演示视频,有助于我们理解软件的用途

安装

ghcr.io 镜像下载

官方的镜像没有发布在 docker hub,而是在 ghcr.io,所以直接用命令行来安装。

镜像 teable

软件的更新相当频繁,基本上几个小时就会更新一版,老苏最后折腾的版本为 sha-7e222cb,完整的版本号可能是 1.0.0-alpha+build.268.sha-7e222cb

SSH 客户端中依次执行下面的命令

1
2
# 下载镜像
docker ghcr.io/teableio/teable:latest

如果没有科学上网,很可能会拉不动,可以试试 docker 代理网站:https://dockerproxy.com/,但是会多几个步骤

1
2
3
4
5
6
7
8
# 如果拉不动的话加个代理
docker pull ghcr.dockerproxy.com/teableio/teable:latest

# 重命名镜像(如果是通过代理下载的)
docker tag ghcr.dockerproxy.com/teableio/teable:latest ghcr.io/teableio/teable:latest

# 删除代理镜像(如果是通过代理下载的)
docker rmi ghcr.dockerproxy.com/teableio/teable:latest

镜像 teable-db-migrate

版本和 teable 是一样的

从名字看,应该是初始化数据库中数据的,在任务完成后,会自动停止

下载过程是一样的,这里就不赘述了

当然代理网站也不是什么时候都好使,有时候也会报错,例如下面👇这样的

1
Error response from daemon: received unexpected HTTP status: 500 Internal Server Error

所以有一个稳定的科学上网环境还是很重要的

环境变量文件

316 号开始折腾。一开始官方 standalone 部署方式的 .env 是下面这样

1
2
3
4
5
6
7
TIMEZONE=UTC

POSTGRES_DB=example
POSTGRES_USER=example
POSTGRES_PASSWORD=standalone_replace_password

PUBLIC_ORIGIN=http://localhost:3000

318 号发现已经变成下面这样了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
TIMEZONE=UTC

# Postgres
POSTGRES_HOST=teable-db
POSTGRES_PORT=5432
POSTGRES_DB=example
POSTGRES_USER=example
POSTGRES_PASSWORD=example-password

# App
PUBLIC_ORIGIN=http://127.0.0.1
PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
PUBLIC_DATABASE_PROXY=127.0.0.1:42345

# Need to support sending emails to enable the following configurations
# You need to modify the configuration according to the actual situation, otherwise it will not be able to send emails correctly.
#BACKEND_MAIL_HOST=smtp.teable.io
#BACKEND_MAIL_PORT=465
#BACKEND_MAIL_SECURE=true
#BACKEND_MAIL_SENDER=noreply.teable.io
#BACKEND_MAIL_SENDER_NAME=Teable
#BACKEND_MAIL_AUTH_USER=username
#BACKEND_MAIL_AUTH_PASS=password

所以如果你下决心折腾,需要仔细阅读最新的官方文档。https://github.com/teableio/teable/tree/develop/dockers/examples/standalone

老苏折腾时, env.txt 内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
TIMEZONE=Asia/Shanghai

# Postgres
POSTGRES_HOST=teable-db
POSTGRES_PORT=5432
POSTGRES_DB=example
POSTGRES_USER=example
POSTGRES_PASSWORD=standalone_replace_password

# App
PUBLIC_ORIGIN=http://192.168.0.197:3091
PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
PUBLIC_DATABASE_PROXY=192.168.0.197:42345

# Need to support sending emails to enable the following configurations
# You need to modify the configuration according to the actual situation, otherwise it will not be able to send emails correctly.
#BACKEND_MAIL_HOST=smtp.teable.io
#BACKEND_MAIL_PORT=465
#BACKEND_MAIL_SECURE=true
#BACKEND_MAIL_SENDER=noreply.teable.io
#BACKEND_MAIL_SENDER_NAME=Teable
#BACKEND_MAIL_AUTH_USER=username
#BACKEND_MAIL_AUTH_PASS=password

其中 192.168.0.197 为群晖主机的 IP

docker compose 安装

安装涉及到 3 个容器,所以采用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
version: '3.9'

services:
teable:
image: ghcr.io/teableio/teable:latest
container_name: teable-app
restart: always
ports:
- '3091:3000'
volumes:
- ./data:/app/.assets:rw
env_file:
- env.txt
environment:
- TZ=${TIMEZONE}
- NEXT_ENV_IMAGES_ALL_REMOTE=true
depends_on:
- teable_db_migrate

teable_db:
image: postgres:15
container_name: teable-db
restart: always
ports:
- '42345:5432'
volumes:
- ./db:/var/lib/postgresql/data:rw
environment:
- TZ=${TIMEZONE}
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
healthcheck:
test: ['CMD-SHELL', "sh -c 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}'"]
interval: 10s
timeout: 3s
retries: 3

teable_db_migrate:
image: ghcr.io/teableio/teable-db-migrate:latest
container_name: teable-db-migrate
environment:
- TZ=${TIMEZONE}
- PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@teable_db:5432/${POSTGRES_DB}
depends_on:
- teable_db

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 teable 和 子目录
mkdir -p /volume1/docker/teable/{data,db}

# 进入 teable 目录
cd /volume1/docker/teable

# 将 .env和 docker-compose.yml 放入当前目录

# 一键启动
docker-compose --env-file env.txt up -d

https 协议

必须使用 https 协议访问,否则注册账号时会报 500 Internal Server Error 错误

老苏因为没有 vps 主机,所以目前采用的映射公网的方案主要有 2 种:

  • tailscale + npm 方案

文章传送门:用自定义域名访问tailscale节点

  • cloudflared tunnel + npm 方案

文章传送门:免费的Cloudflared实现外网访问群晖(续)

这两个方案都没有带端口,所以如果你遇到带端口的问题,就不要问老苏了,因为没有环境验证

域名 局域网地址 备注
teable.laosu.tech http://192.168.0.197:3091 Teable 的访问地址

运行

启动后要稍等一段时间,第一次需要注册账号,所以在浏览器中输入 https://teable.laosu.tech,当然你需要输入自己的域名

如果使用 http://群晖IP:3091 注册账号,浏览器的开发者工具中,除了会看到 500 Internal Server Error 错误,还会显示 The Cross-Origin-Opener-Policy header has been ignored, because the URL's origin was untrustworthy. It was defined either in the final response or a redirect. Please deliver the response using the HTTPS protocol. You can also use the 'localhost' origin instead.,但是注册成功后,还是可以使用 http://群晖IP:3091 访问的

登录成功后,默认已经有了一个工作空间

会有一个向导,介绍各按钮的功能

创建数据库

目前似乎只能建空白数据库

第一次还是有向导

单击左侧边栏上的+号以创建一个表

选择导入 excel

老苏用金山文档的向导建了一个带数据的文档,《人员信息统计表.xlsx》,下载地址:https://github.com/wbsu2003/synology/raw/main/Teable/人员信息统计表.xlsxx

开始上传

选择导入的列

导入成功之后,就可以操作表单了

软件默认支持中文,所以入门应该还是比较容易的

参考文档

teableio/teable: ✨ A Super fast, Real-time, Professional, Developer friendly, No code database
地址:https://github.com/teableio/teable

Teable - Postgres-Airtable Fusion
地址:https://teable.io/

teable/dockers/examples/standalone at develop · teableio/teable
地址:https://github.com/teableio/teable/tree/develop/dockers/examples/standalone

Teable 简介 | Teable 帮助中心
地址:https://help.teable.cn/