Baserow 2.4.1 Docker Compose 部署指南

Baserow 2.4.1 官方 all-in-one 镜像 + PostgreSQL 的 Docker Compose 生产部署全流程:compose 编排、环境变量、启动验证、Web 初始化、/baserow.sh 管理命令、备份还原与升级回滚,全部命令真实回显。

BaserowBaserow低代码无代码电子表格Docker部署数据库2026/11/03

Baserow 2.4.1 Docker Compose 部署指南

目标:在 Ubuntu 22.04 服务器上用 Docker Compose 从零部署 Baserow 2.4.1(外置 PostgreSQL 形态),完成首启验证、管理员账号创建与 API 冒烟,并沉淀首次部署踩坑实录。本文全部命令与回显均为 2026-11-03 在真实 Ubuntu 22.04 服务器(Docker 29.9.2 / Compose v5.6.1)实测照抄。

一、环境信息

  • 操作系统:Ubuntu 22.04(x86_64)
  • Docker:29.9.2,build a82e528
  • Docker Compose:v5.6.1
  • Baserow:baserow/baserow:2.4.1(官方 all-in-one 发行包,2.41GB)
  • 数据库:pgvector/pgvector:pg15(PostgreSQL 15.19,612MB)
  • 对外端口:宿主 8128 → 服务 80(Caddy)
  • 内部网络:自定义 bridge,子网 10.89.56.0/24(db 10.89.56.2、baserow 10.89.56.3)
  • 持久化卷:baserow-241-stack_pgdata(数据库数据目录)、baserow-241-stack_baserow_data(Baserow 媒体/备份/密钥目录)
  • 部署目录:/opt/baserow/deploy
  • 演示账号:admin / q1w2e3r4(登录邮箱 admin@example.com)

实测版本回显:

$ docker --version
Docker version 29.9.2, build a82e528
$ docker compose version
Docker Compose version v5.6.1
$ docker images --format '{{.Repository}}:{{.Tag}}  {{.Size}}' | grep -E 'baserow|pgvector'
pgvector/pgvector:pg15 612MB
baserow/baserow:2.4.1 2.41GB

二、镜像选型说明

镜像版本角色选型理由
baserow/baserow2.4.1Web/后端/内置 Redis 一体化官方主推 all-in-one 形态,单服务即含 Caddy+Django+Vue+Redis,与官方文档一致;2.4.1 为 GitHub Releases 最新稳定版(2026-10-13)
pgvector/pgvectorpg15外置 PostgreSQLBaserow 要求 PostgreSQL ≥ 11;pg15 与官方 postgres:15 同源,额外内置 pgvector 扩展,便于后续启用 AI/向量类插件

💡 技术拓展:Baserow 官方部署形态不止 Compose 双服务一种——

形态特点适用
all-in-one 单服务内置 PostgreSQL/Redis,一条命令起试用/单机
Compose + 外置 PostgreSQL(本文)数据库独立,便于备份/扩容/复用生产推荐
Kubernetes/Helm官方 chart,多副本已有 k8s 平台
官方云 baserow.io免运维,受配额不愿自建

本文采用第二种:数据库独立后,docker compose down 不会牵连数据,PostgreSQL 可独立调优与主从化。

三、前置条件

  1. 服务器已安装 Docker 与 Compose 插件(版本回显见第一章);
  2. 宿主 8128 端口空闲(ss -ltn | grep 8128 无输出);
  3. 部署目录可写:mkdir -p /opt/baserow/deploy && cd /opt/baserow/deploy;
  4. 拉取镜像走官方源即可(本次实测 docker pull 未发生降级,官方 registry 直连可用)。

四、部署步骤

4.1 生成密钥并写入 .env

SECRET_KEY 是 Django 会话/令牌签名密钥,必须随机生成且长期稳定(更换会使既有登录态失效):

$ openssl rand -base64 48
qNSklljpOlqnhmxnq3lUM3oi10uLJBB2tgrcZGRqwtooGkN2Kf

在 /opt/baserow/deploy/.env 写入(生产环境请重新生成,勿复用本文值):

SECRET_KEY=qNSklljpOlqnhmxnq3lUM3oi10uLJBB2tgrcZGRqwtooGkN2Kf
DATABASE_PASSWORD=q1w2e3r4
DATABASE_USER=baserow
DATABASE_NAME=baserow

四个变量分别对应:Django 签名密钥、数据库口令(演示用 q1w2e3r4)、数据库用户、数据库名。

4.2 编写 docker-compose.yml

/opt/baserow/deploy/docker-compose.yml(实测原文):

name: baserow-2.4.1-stack

services:
  db:
    image: pgvector/pgvector:pg15
    container_name: baserow-2.4.1-db
    restart: unless-stopped
    environment:
      - POSTGRES_USER=${DATABASE_USER:-baserow}
      - POSTGRES_PASSWORD=${DATABASE_PASSWORD:?}
      - POSTGRES_DB=${DATABASE_NAME:-baserow}
    healthcheck:
      test:
        [
          "CMD-SHELL",
          'su postgres -c "pg_isready -U ${DATABASE_USER:-baserow}"',
        ]
      interval: 10s
      timeout: 5s
      retries: 5
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      local:

  baserow:
    image: baserow/baserow:2.4.1
    container_name: baserow-2.4.1-server
    restart: unless-stopped
    environment:
      BASEROW_PUBLIC_URL: 'http://localhost:8128'
      SECRET_KEY: ${SECRET_KEY:?}
      DATABASE_HOST: db
      DATABASE_PORT: '5432'
      DATABASE_NAME: ${DATABASE_NAME:-baserow}
      DATABASE_USER: ${DATABASE_USER:-baserow}
      DATABASE_PASSWORD: ${DATABASE_PASSWORD:?}
    ports:
      - "8128:80"
    volumes:
      - baserow_data:/baserow/data
    depends_on:
      db:
        condition: service_healthy
    networks:
      local:

volumes:
  pgdata:
  baserow_data:

networks:
  local:
    driver: bridge
    ipam:
      config:
        - subnet: 10.89.56.0/24

要点解读:

  • 显式 name: 声明项目名,避免与同机其他 Compose 栈互相误删;
  • ${SECRET_KEY:?} / ${DATABASE_PASSWORD:?} 用 compose 的「必填变量」语法,缺失时启动即报错(报错实录见第十一章 11.1);
  • depends_on + condition: service_healthy 保证数据库 pg_isready 通过后才启动 Baserow,首启迁移不会连不上库;
  • BASEROW_PUBLIC_URL 必须与浏览器实际访问的地址一致,否则站点判定为非法 Host 返回 404(见 11.2);
  • 数据库与 Baserow 间不映射任何宿主端口,db 仅在内部网络 10.89.56.0/24 可达。

4.3 启动

$ docker compose up -d

首次启动 Baserow 会自动执行数据库迁移与模板同步,全程约 1~2 分钟,关键日志(实测节选):

 [STARTUP][2026-11-02 22:54:32] Using provided external postgres at db or the  DATABASE_URL
 [STARTUP][2026-11-02 22:54:32] Using embedded baserow redis as no REDIS_HOST or REDIS_URL provided.
 [STARTUP][2026-11-02 22:54:32] Importing REDIS_PASSWORD secret from /baserow/data/.redispass
 [STARTUP][2026-11-02 22:54:32] Importing BASEROW_JWT_SIGNING_KEY secret from /baserow/data/.jwt_signing_key
 [STARTUP][2026-11-02 22:54:32] Starting all Baserow processes:
 [BACKEND][2026-11-02 22:54:38] Running migrations:
 [BACKEND][2026-11-02 22:54:38]   Applying core.0001_initial... OK
 [BACKEND][2026-11-02 22:54:38]   Applying database.0001_initial... OK
 [BACKEND][2026-11-02 22:54:39]   Applying database.0015_emailfield... OK
 [BASEROW-WATCHER][2026-11-02 22:55:13] Baserow is now available at http://localhost:8128

日志逐行说明:前两行表明检测到外部 PostgreSQL(DATABASE_HOST=db)且未提供 REDIS_HOST 时自动启用内置 Redis;随后从数据卷导入自动生成的 Redis 口令与 JWT 签名密钥;中间是 Django 迁移全量落库;最后一行是内置就绪探针打印「Baserow is now available」——看到这行即首启完成。

4.4 验证

$ docker compose ps
NAME                   IMAGE                    COMMAND                  SERVICE   CREATED         STATUS                   PORTS
baserow-2.4.1-db       pgvector/pgvector:pg15   "docker-entrypoint.s…"   db        4 minutes ago   Up 4 minutes (healthy)   5432/tcp
baserow-2.4.1-server   baserow/baserow:2.4.1    "/baserow.sh start"      baserow   4 minutes ago   Up 4 minutes (healthy)   25/tcp, 0.0.0.0:8128->80/tcp, [::]:8128->80/tcp

两个服务均 Up (healthy)。HTTP 与内置健康接口实测:

$ curl -sI http://localhost:8128/
HTTP/1.1 302 Found
Content-Type: text/html
Date: Mon, 02 Nov 2026 22:59:18 GMT
Location: /login
Set-Cookie: i18n-language=en; Path=/; Expires=Tue, 02 Nov 2027 22:59:18 GMT; SameSite=Lax
Via: 1.1 Caddy

$ curl -s http://localhost:8128/api/_health/
OK

未登录访问首页被 Caddy 后端的 Django 302 到 /login,/api/_health/ 返回 OK,部署即成功。

4.5 创建管理员账号

Web 注册页(/register)即可注册首个账号;若需无头创建,用官方入口脚本的 createsuperuser(实测):

$ docker compose exec -e DJANGO_SUPERUSER_PASSWORD=q1w2e3r4 baserow \
    /baserow.sh backend-cmd manage createsuperuser \
    --username admin --email admin@example.com --noinput
Superuser created successfully.

⚠️ 注意:Baserow 的 API 登录按「邮箱 = 用户名」校验,createsuperuser 若给了与邮箱不同的 username,后续 API 登录会失败,需按下述方式对齐并补建 profile(完整踩坑实录见 11.3)。Web 注册页创建的账号无此问题。

4.6 API 冒烟:建工作区/库/表/行

Baserow 是 API-first,界面操作全部可走 REST。用 admin@example.com / q1w2e3r4 登录取 token 并跑通最小链路(实测节选):

$ curl -s -X POST http://localhost:8128/api/user/token-auth/ \
    -H 'Content-Type: application/json' \
    -d '{"email":"admin@example.com","password":"q1w2e3r4"}'
{
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "user": {
        "username": "admin@example.com",
        "is_staff": true,
        "id": 1
    }
}
(输出节选,实测首尾;token 原值较长已截断)
$ curl -s -X POST http://localhost:8128/api/workspaces/ \
    -H "Authorization: JWT $T" -H 'Content-Type: application/json' \
    -d '{"name":"默认空间"}'
{
    "id": 96,
    "name": "\u9ed8\u8ba4\u7a7a\u95f4",
    "users": [
        {
            "id": 1,
            "email": "admin@example.com",
            "workspace": 96,
            "permissions": "ADMIN"
        }
    ],
    "order": 1,
    "permissions": "ADMIN"
}

$ curl -s -X POST http://localhost:8128/api/applications/workspace/96/ \
    -H "Authorization: JWT $T" -H 'Content-Type: application/json' \
    -d '{"name":"项目任务","type":"database"}'
{
    "id": 150,
    "name": "项目任务",
    "order": 1,
    "type": "database",
    "workspace": {"id": 96, "name": "默认空间"},
    "tables": []
}

$ curl -s -X POST http://localhost:8128/api/database/tables/database/150/ \
    -H "Authorization: JWT $T" -H 'Content-Type: application/json' \
    -d '{"name":"任务清单"}'
{
    "id": 475,
    "name": "\u4efb\u52a1\u6e05\u5355",
    "order": "1.00000000000000000000",
    "fields": [
        {
            "id": 4423,
            "name": "Name",
            "type": "text",
            "primary": true
        },
        {
            "id": 4424,
            "name": "Notes",
            "type": "long_text",
            "primary": false
        },
        {
            "id": 4425,
            "name": "Active",
            "type": "boolean",
            "primary": false
        }
    ],
    "views": [],
    "database": 150
}
(输出节选,fields 原响应含 description/read_only 等更多键,已略)

$ curl -s http://localhost:8128/api/database/fields/table/475/ -H "Authorization: JWT $T" \
    | python3 -c 'import json,sys;[print(f["id"],f["name"],f["type"],"primary" if f["primary"] else "") for f in json.load(sys.stdin)]'
4423 Name text primary
4424 Notes long_text
4425 Active boolean

$ curl -s -X POST http://localhost:8128/api/database/rows/table/475/ \
    -H "Authorization: JWT $T" -H 'Content-Type: application/json' \
    -d '{"field_4423":"部署 Baserow 生产环境","field_4424":"compose 部署 + 外部 PostgreSQL","field_4425":true}'
{
    "id": 4,
    "order": "4.00000000000000000000",
    "field_4423": "部署 Baserow 生产环境",
    "field_4424": "compose 部署 + 外部 PostgreSQL",
    "field_4425": true
}

新表自动带 Name(text 主键)/Notes(long_text)/Active(boolean) 三个默认字段;行数据按 field_<字段ID> 键写入。API 域详解与分页/错误码实测见《Baserow 2.4.1 常用 CLI 命令与运维实操》第四章。

五、数据持久化说明

两个命名卷承载全部状态:

卷挂载点内容
pgdatadb:/var/lib/postgresql/dataPostgreSQL 数据目录(Baserow 的全部业务数据)
baserow_databaserow:/baserow/dataBaserow 应用数据:媒体文件、备份、插件、自动生成的密钥

baserow_data 实际内容(实测):

$ docker compose exec baserow bash -c 'ls /baserow/data; ls -lh /baserow/data/backups/'
backups
caddy
env
media
plugins
postgres
redis
total 6.6M
-rw-r--r-- 1 baserow_docker_user baserow_docker_user 3.4M Nov  2 23:00 backup-20261103-2.tar.gz
-rw-r--r-- 1 baserow_docker_user baserow_docker_user 3.3M Nov  2 22:58 backup-20261103.tar.gz
  • backups:backup_baserow 命令的归档输出目录(见运维实操篇);
  • caddy:反向代理证书与站点配置缓存;
  • env:文件式密钥注入目录(见第八章);
  • media:附件字段上传的文件;
  • plugins:插件安装目录(BASEROW_PLUGIN_DIR);
  • postgres/redis:内置数据库/缓存的数据目录——本部署使用外置 PostgreSQL,postgres 目录为空占位;Redis 仍为内置,故 redis 在用;
  • 隐藏文件 .redispass、.jwt_signing_key:首启自动生成并持久化,保证重启后内部口令/令牌签名不变(启动日志的 Importing ... secret 即读取它们)。

六、环境变量表

本部署实际注入的变量(docker compose exec baserow env 过滤实测):

$ docker compose exec baserow bash -c "env | grep -E '^(BASEROW|DATABASE|REDIS|SECRET)' | sort"
BASEROW_IMAGE_TYPE=all-in-one
BASEROW_PLUGIN_DIR=/baserow/data/plugins
BASEROW_PUBLIC_URL=http://localhost:8128
DATABASE_HOST=db
DATABASE_NAME=baserow
DATABASE_PASSWORD=q1w2e3r4
DATABASE_PORT=5432
DATABASE_USER=baserow
SECRET_KEY=qNSklljpOlqnhmxnq3lUM3oi10uLJBB2tgrcZGRqwtooGkN2Kf
变量本部署取值必需性作用
BASEROW_PUBLIC_URLhttp://localhost:8128是对外访问地址,决定 Host 校验白名单与 HTTPS 签发
SECRET_KEY随机 48 字节 base64是(compose :?)Django 会话/令牌签名密钥
DATABASE_HOST/PORT/NAME/USER/PASSWORDdb/5432/baserow/baserow/q1w2e3r4是外置 PostgreSQL 连接五要素
REDIS_HOST/REDIS_URL未设置否不设置则启用内置 Redis(启动日志已证实)
BASEROW_AMOUNT_OF_GUNICORN_WORKERS未设置(默认 3)否后端 API worker 数
MIGRATE_ON_STARTUP未设置(默认 true)否启动时是否自动迁移
BASEROW_BACKEND_LOG_LEVEL未设置(默认 INFO)否后端日志级别
BASEROW_EXTRA_PUBLIC_URLS未设置否追加合法 Host/IP

逐项默认值、修改方式与生效验证实验见《Baserow 2.4.1 配置参数详解》。

七、配置参数说明

Baserow 无独立配置文件,全部配置经环境变量注入,入口脚本 /baserow.sh 在启动时读取并派生进程参数。实测佐证:gunicorn 进程命令行由 BASEROW_AMOUNT_OF_GUNICORN_WORKERS 决定(默认 3):

$ docker compose exec baserow bash -c 'ps aux | grep [g]unicorn | head -2'
baserow+     110  0.2  0.2  46604 36656 ?  S  23:15  0:00 /baserow/venv/bin/python /baserow/venv/bin/gunicorn --workers=3 --worker-tmp-dir /dev/shm --log-file=- --access-logfile=- --capture-output -b 127.0.0.1:8000 --log-level=INFO -k uvicorn.workers.UvicornWorker baserow.config.asgi:application
baserow+     309  1.5  1.8 723864 296208 ? Sl 23:15  0:02 /baserow/venv/bin/python /baserow/venv/bin/gunicorn --workers=3 ...(worker 进程,命令行同上)

后端仅监听 127.0.0.1:8000,外部流量一律经 Caddy(80→宿主 8128)转发,数据库不对宿主暴露端口。参数体系全貌见《Baserow 2.4.1 配置参数详解》。

八、配置文件挂载

三类「文件形态」配置可经 baserow_data 卷持久化(实测目录见第五章):

  1. /baserow/data/env/ 目录:每个文件名即变量名、内容为值,启动时自动导入。适合把 SECRET_KEY、DATABASE_PASSWORD 之类密钥从 compose 明文挪到卷内文件管理;本部署密钥自动生成件(.redispass、.jwt_signing_key)即由该机制读取。
  2. /baserow/data/caddy/:Caddy 站点证书与配置缓存,BASEROW_PUBLIC_URL 改为 https 域名后证书自动落此。
  3. /baserow/data/plugins/:/baserow.sh install-plugin 安装的插件目录(BASEROW_PLUGIN_DIR 默认值,见第六章实测 env)。

九、等价 docker run

官方 all-in-one 单服务形态(内置 PostgreSQL + Redis)的等价启动命令,取自发行包自带帮助(实测回显节选):

$ docker compose exec baserow /baserow.sh help
Usage: docker run --rm -it [-v baserow:/baserow/data] baserow COMMAND_FROM_BELOW
Commands
start         : Launches baserow with all services running internally in a single
                container.
start-only-db : Starts up only the embedded postgres server and makes it available
                for external connections if you expose port 5432 using
                the extra docker run argument of '-p 5432:5432'. ...
backend-cmd CMD      : Runs the specified backend command, use the help command to
                       show all available.
backend-cmd-with-db  : Starts the embedded postgres database and then runs any supplied
                       backend command normally. ...
web-frontend-cmd CMD : Runs the specified web-frontend command, use help to show all
install-plugin   CMD : Installs a plugin (append --help for more info).
uninstall-plugin CMD : Un-installs a plugin (append --help for more info).
list-plugins     CMD : Lists currently installed plugins.
help                 : Show this message.

据此,试用场景可一条命令替代整份 compose:

docker run -d --name baserow-trial -p 8129:80 \
  -v baserow_trial_data:/baserow/data \
  -e BASEROW_PUBLIC_URL='http://localhost:8129' \
  -e SECRET_KEY="$(openssl rand -base64 48)" \
  -e DATABASE_PASSWORD='q1w2e3r4' \
  baserow/baserow:2.4.1

该形态数据库落在 baserow_data 卷的 postgres/ 子目录,适合评估但不建议生产(数据库与应用生命周期耦合)。生产请保持第四章的外置 PostgreSQL 形态。

十、常用运维命令

日常四件套(实测):

$ docker compose ps
NAME                   IMAGE                    COMMAND                  SERVICE   CREATED          STATUS                             PORTS
baserow-2.4.1-db       pgvector/pgvector:pg15   "docker-entrypoint.s…"   db        20 minutes ago   Up 20 minutes (healthy)            5432/tcp
baserow-2.4.1-server   baserow/baserow:2.4.1    "/baserow.sh start"      baserow   26 seconds ago   Up 16 seconds (health: starting)   25/tcp, 0.0.0.0:8128->80/tcp, [::]:8128->80/tcp

$ docker compose logs --tail=4 baserow
baserow-2.4.1-server  |  [BACKEND][2026-11-02 23:15:04] [2026-11-02 23:15:02 +0000] [311] [INFO] Application startup complete.
baserow-2.4.1-server  |  [BASEROW-WATCHER][2026-11-02 23:15:04] Waiting for Baserow to become available, this might take 30+ seconds...
baserow-2.4.1-server  |  [BASEROW-WATCHER][2026-11-02 23:15:04] =======================================================================
baserow-2.4.1-server  |  [BASEROW-WATCHER][2026-11-02 23:15:04] Baserow is now available at http://localhost:8128

$ docker compose restart baserow
 Container baserow-2.4.1-server Restarting
 Container baserow-2.4.1-server Started

$ curl -s http://localhost:8128/api/_health/
OK
  • 改 .env 或 compose 的 environment 后需 docker compose up -d 重建服务进程才生效(仅 restart 不会重读 compose 文件);
  • 停服保数据:docker compose down(不带 -v);连数据一起清:docker compose down -v,危险操作先备份(见运维实操篇);
  • 升级:改 image 标签 → docker compose pull → docker compose up -d,启动时自动跑迁移。

十一、常见问题

11.1 SECRET_KEY 或数据库口令缺失

.env 未提供必填变量时,compose 在解析阶段即拒绝启动(实测):

$ docker compose config
error while interpolating services.baserow.environment.DATABASE_PASSWORD: required variable DATABASE_PASSWORD is missing a value
error while interpolating services.baserow.environment.SECRET_KEY: required variable SECRET_KEY is missing a value
error while interpolating services.db.environment.[]: required variable DATABASE_PASSWORD is missing a value

定位:${VAR:?} 语法是「必填」声明。解决:在 .env 补齐对应变量后重新 docker compose up -d。

11.2 用 IP 访问返回 404

BASEROW_PUBLIC_URL 只设了 http://localhost:8128 时,用 127.0.0.1:8128 访问整站 404(实测):

$ curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://localhost:8128/ -H 'Host: 127.0.0.1:8128'
HTTP 404
$ curl -s http://localhost:8128/api/workspaces/ -H 'Host: 127.0.0.1:8128'
{
  "error": true,
  "url": "http://127.0.0.1:8128/api/workspaces/",
  "statusCode": 404,
  "statusMessage": "Server Error",
  "message": "Server Error"
}
$ curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://localhost:8128/ -H 'Host: localhost:8128'
HTTP 302

定位:Baserow 按 BASEROW_PUBLIC_URL 做 Host 白名单校验,不匹配的请求直接 404。解决:把实际访问地址追加进 BASEROW_EXTRA_PUBLIC_URLS(逗号分隔)后 docker compose up -d 重建,实测同一请求即变 302:

$ curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://localhost:8128/ -H 'Host: 127.0.0.1:8128'
HTTP 302

11.3 createsuperuser 后 API 登录失败

踩坑实录:createsuperuser --username admin --email admin@example.com 建号成功,但 API 登录报 ERROR_INVALID_CREDENTIALS(实测):

{"error":"ERROR_INVALID_CREDENTIALS","detail":"No active account found with the given credentials."}

定位:Baserow 的 token-auth 按邮箱查用户,而该命令写入的 username 是 admin,与邮箱不一致导致匹配不到。将 username 对齐 email 后再登录,又触发 500(实测日志):

django.contrib.auth.models.User.profile.RelatedObjectDoesNotExist: User has no profile.

定位:绕过 Web 注册流程直接建的用户缺少 UserProfile 关联记录。补建后登录成功(实测):

PROFILE created=True id=1
user: 1 admin@example.com | is_staff: True

结论:生产首个账号建议直接走 /register 页面注册;必须用 createsuperuser 时,username 填邮箱并确保 profile 存在(补建方法见《Baserow 2.4.1 常用 CLI 命令与运维实操》4.3)。

11.4 首启「卡住」

首启迁移+模板同步 1~2 分钟属正常,就绪判据是日志出现 Baserow is now available at ...(见 4.3)或 /api/_health/ 返回 OK(见 4.4),不要提前判定失败。

十二、参考链接

Baserow 2.4.1 Docker Compose 部署指南 - Quzuo