Budibase 从零部署全攻略:基于Docker Compose的内网/离线环境部署方案
📅 2026/7/2 12:48:35
👁️ 阅读次数
📝 编程学习
📋 部署概述
服务器信息
| 项目 | 值 |
|---|---|
| IP 地址 | 1.1.1.0 |
| 操作系统 | CentOS Linux 7 (Core) |
| 内核版本 | 3.10.0-1160.el7.x86_64 |
| 内存 | 15 GB (可用 14 GB) |
| 磁盘 | 197 GB (可用 194 GB) |
| Docker 版本 | 26.1.4 (Server: 20.10.24) |
| Docker Compose | v2.27.1 |
| 部署目录 | /opt/budibase |
| 访问地址 | http://1.1.1.0:10000 |
1️⃣ 登录服务器 & 环境准备
1.1 SSH 登录
sshroot@1.1.1.01.2 检查环境
# 检查系统版本cat/etc/os-release# 检查 Dockerdocker--version# 期望: Docker version 26.xdockercompose version# 期望: Docker Compose version v2.x# 检查资源free-h# 建议 >= 8GB 内存df-h/# 建议 >= 50GB 磁盘1.3 系统参数配置
# IP 转发sysctl-wnet.ipv4.ip_forward=1echo"net.ipv4.ip_forward=1">>/etc/sysctl.conf# 网桥过滤modprobe br_netfilterecho1>/proc/sys/net/bridge/bridge-nf-call-iptables# Redis 所需sysctl-wvm.overcommit_memory=1echo"vm.overcommit_memory=1">>/etc/sysctl.conf# TCP 连接队列sysctl-wnet.core.somaxconn=1024echo"net.core.somaxconn=1024">>/etc/sysctl.conf# 应用所有配置sysctl-p2️⃣ Docker 镜像加速配置
重要:内网服务器无法直接访问 Docker Hub (
registry-1.docker.io),必须配置国内镜像加速器。
2.1 配置 Docker 镜像源
mkdir-p/etc/dockercat>/etc/docker/daemon.json<<'EOF' { "registry-mirrors": [ "https://docker.1ms.run", "https://docker.xuanyuan.me", "https://docker.m.daocloud.io" ] } EOFsystemctl daemon-reload systemctl restartdocker# 验证dockerinfo|grep-A5"Registry Mirrors"2.2 推荐的国内镜像源(2026年6月实测可用)
| 优先级 | 镜像地址 | 类型 | 备注 |
|---|---|---|---|
| 🥇1 | https://docker.1ms.run | 商业 | 速度快,稳定性高 |
| 🥈2 | https://docker.xuanyuan.me | 公益 | 免费,但有配额 |
| 3 | https://docker.m.daocloud.io | 公益 | 老牌服务,有白名单限制 |
3️⃣ 上传并配置文件
3.1 创建部署目录
mkdir-p/opt/budibase3.2 需要上传的文件
| 文件 | 路径 | 说明 |
|---|---|---|
docker-compose.yml | /opt/budibase/ | Docker Compose 编排文件 |
.env | /opt/budibase/ | 环境变量配置 |
3.3 .env 关键配置项
| 配置项 | 值 | 说明 |
|---|---|---|
MAIN_PORT | 10000 | 主访问端口 |
BB_ADMIN_USER_EMAIL | 设置邮箱 | 管理员邮箱 |
BB_ADMIN_USER_PASSWORD | [设置强密码] | 管理员密码 |
COUCH_DB_USER | 设置用户名 | CouchDB 用户名 |
COUCH_DB_PASSWORD | [设置CouchDB密码] | CouchDB 密码 |
REDIS_PASSWORD | [设置Redis密码] | Redis 密码 |
MINIO_ACCESS_KEY | [设置MinIO访问密钥] | MinIO 访问密钥 |
MINIO_SECRET_KEY | [设置MinIO密钥] | MinIO 密钥 |
安全提示:生产环境请务必修改所有默认密码!特别是
API_ENCRYPTION_KEY和JWT_SECRET。
。
3.4 修改 docker-compose.yml(重要)
将 Redis 镜像固定版本,避免拉取不匹配的redis:latest:
cd/opt/budibase# 将 "image: redis" 改为 "image: redis:7-alpine"sed-i's/image: redis$/image: redis:7-alpine/'docker-compose.yml4️⃣ 拉取 Docker 镜像
内网拉取技巧:如果
docker compose pull失败,可以逐个使用显式镜像源拉取。镜像前缀docker.1ms.run/会强制通过该代理下载。
4.1 逐镜像拉取脚本
由于镜像体积较大(总计约 3.2 GB),建议通过后台脚本逐个拉取:
#!/bin/bash# 逐一拉取并 tag 所有镜像declare-AIMGS=(["redis:7-alpine"]="docker.1ms.run/library/redis:7-alpine"["minio/minio:latest"]="docker.1ms.run/minio/minio:latest"["budibase/database:2.1.0"]="docker.1ms.run/budibase/database:2.1.0"["budibase/proxy:latest"]="docker.1ms.run/budibase/proxy:latest"["budibase/worker:latest"]="docker.1ms.run/budibase/worker:latest"["budibase/apps:latest"]="docker.1ms.run/budibase/apps:latest")fortargetin"${!IMGS[@]}";dosource="${IMGS[$target]}"echo">>> Pulling$target..."forattemptin$(seq120);doifdockerpull"$source"2>&1;thendockertag"$source""$target"echo" SUCCESS:$target"breakfi[$attempt-lt20]&&sleep$((attempt*30))donedone4.2 镜像清单
| # | 镜像 | 大小 | 用途 |
|---|---|---|---|
| 1 | redis:7-alpine | 39 MB | 缓存服务 |
| 2 | minio/minio:latest | 175 MB | 文件存储 |
| 3 | budibase/database:2.1.0 | 815 MB | CouchDB 数据库 |
| 4 | budibase/proxy:latest | 180 MB | 反向代理网关 |
| 5 | budibase/worker:latest | 704 MB | 后台任务处理 |
| 6 | budibase/apps:latest | 1.26 GB | 主应用服务 |
| 合计 | ~3.2 GB |
备选方案:离线拉取镜像(适用离线环境)
- 在外网机器上拉取并导出:
# 在外网机器上dockerpull docker.1ms.run/budibase/apps:latestdockertag docker.1ms.run/budibase/apps:latest budibase/apps:latestdockersave budibase/apps:latest-obudibase-apps.tar2.2.传输到内网服务器:
scpbudibase-*.tar root@1.1.1.0:/opt/budibase/- 在内网服务器上导入:
cd/opt/budibasedockerload-ibudibase-apps.tar5️⃣ 启动服务
5.1 初始化 Redis 数据卷
# 创建 Redis 数据卷dockervolume create budibase_redis_data# 出现 "Can't handle RDB format version 14" 错误时dockercompose downdockervolumermbudibase_redis_data5.2 启动所有服务
cd/opt/budibasedockercompose up-d5.3 检查服务状态
dockerps-a期望看到 6 个容器全部Up:
| 容器名 | 镜像 | 状态 |
|---|---|---|
| bbproxy | budibase/proxy | ✅ Up (端口 10000) |
| bbapps | budibase/apps | ✅ Up |
| bbworker | budibase/worker | ✅ Up |
| budibase-couchdb-service-1 | budibase/database:2.1.0 | ✅ Up |
| budibase-minio-service-1 | minio/minio | ✅ Up (healthy) |
| budibase-redis-service-1 | redis:7-alpine | ✅ Up |
6️⃣ 验证 & 登
6.1 访问 Budibase
浏览器打开:http://1.1.1.0:10000
首次访问会自动跳转到/builder页面。
。
6.2 管理员登录
| 项目 | 值 |
|---|---|
| 邮箱 | ` |
| 密码 | `` |
6.3 curl 验证
# 从服务器本地测试curl-Ihttp://localhost:10000# 应返回 HTTP 301 -> /builder# 从其他机器测试curl-Ihttp://1.1.1.0:100007️⃣ 数据备份与恢复(含迁移)
备份原理
Budibase 的数据存在两个地方:
| 存储 | Docker 数据卷 | 存放内容 |
|---|---|---|
| CouchDB | budibase_couchdb3_data | 表格结构、数据行、用户、角色、应用配置 |
| MinIO | budibase_minio_data | 附件(图片、文件)、应用前端资源 |
| Redis | budibase_redis_data | 缓存(不需要备份) |
核心思路:把两个 Docker 数据卷打包成 tar.gz 文件,需要恢复或迁移时解压回去即可。备份的是原始数据文件,100% 完整。
备份步骤(在服务器上执行)
# 1. 创建备份目录mkdir-p/backup# 2. 停止所有 Budibase 容器cd/opt/budibasedockercompose down# 3. 备份 CouchDB 数据卷(表格、数据、用户等)tarczf /backup/budibase-couchdb-$(date+%Y%m%d-%H%M).tar.gz\-C/var/lib/docker/volumes budibase_couchdb3_data# 4. 备份 MinIO 数据卷(附件、图片、文件)tarczf /backup/budibase-minio-$(date+%Y%m%d-%H%M).tar.gz\-C/var/lib/docker/volumes budibase_minio_data# 5. 查看备份文件ls-lh/backup/# 示例输出:# budibase-couchdb-20260701-0915.tar.gz 34K# budibase-minio-20260701-0915.tar.gz 2.4M# 6. 重新启动服务dockercompose up-d⚠️注意:备份时需要停止 Budibase 服务,确保 CouchDB 数据一致性。整个备份过程约 1-2 分钟。
恢复步骤(在当前服务器上恢复)
# 1. 停止服务cd/opt/budibase&&dockercompose down# 2. 删除旧数据卷(⚠️ 确认备份文件存在后再执行)dockervolumermbudibase_couchdb3_data budibase_minio_data budibase_redis_data# 3. 解压备份文件tarxzf /backup/budibase-couchdb-20260701-0915.tar.gz\-C/var/lib/docker/volumes/tarxzf /backup/budibase-minio-20260701-0915.tar.gz\-C/var/lib/docker/volumes/# 4. 启动服务dockercompose up-d# 5. 等待服务就绪后验证sleep10dockerps# 确认 6 个容器都 Upcurl-Ihttp://localhost:10000# 返回 301 即正常用于迁移:从服务器 A 迁移到服务器 B
备份文件可以直接用于迁移到另一台服务器,步骤如下:
- 在服务器 A(源服务器)上执行备份:
cd/opt/budibase&&dockercompose downtarczf /root/budibase-couchdb-migrate.tar.gz-C/var/lib/docker/volumes budibase_couchdb3_datatarczf /root/budibase-minio-migrate.tar.gz-C/var/lib/docker/volumes budibase_minio_data- 把备份文件传到服务器 B(新服务器):
# 在 A 上执行:scp/root/budibase-*-migrate.tar.gz root@新服务器IP:/root/- 在服务器 B 上,先按照本文第 1-5 节完成 Budibase 部署(确保 docker-compose.yml、.env 已就位,Docker 镜像已拉取),然后执行恢复:
cd/opt/budibase&&dockercompose downdockervolumermbudibase_couchdb3_data budibase_minio_data budibase_redis_datatarxzf /root/budibase-couchdb-migrate.tar.gz-C/var/lib/docker/volumes/tarxzf /root/budibase-minio-migrate.tar.gz-C/var/lib/docker/volumes/dockercompose up-d- 验证迁移结果:浏览器访问新服务器 IP:10000,用原来的管理员账号登录,数据和附件应该完整存在。
迁移注意事项:
① 两个服务器的.env文件中的密码/密钥可以不同,但建议保持一致;
② 如果改了API_ENCRYPTION_KEY或JWT_SECRET,已加密的数据可能无法解密;
③ 迁移后需要在浏览器用新 IP 访问,Budibase 会自动适应。
实测验证结果
| 验证项 | 备份前 | 删除后 | 恢复后 |
|---|---|---|---|
| 表格数量 | 2 个(含 ta_users) | 1 个 | ✅ 2 个 |
| 数据行 | 2 行 | 1 行 | ✅ 2 行 |
| MinIO 附件大小 | 11 MB | 9.8 MB | ✅ 11 MB |
| JPG 附件 | 存在 | 已删除 | ✅ 恢复 |
| Web 访问 | 正常 | 正常 | ✅ 正常 |
8️⃣ 常用运维命令
服务管理
# 启动cd/opt/budibase&&dockercompose up-d# 停止cd/opt/budibase&&dockercompose down# 重启cd/opt/budibase&&dockercompose restart# 查看日志(所有服务)dockercompose logs-f# 查看单个服务日志dockerlogs-fbbapps# 查看资源使用dockerstats数据备份
# 查看数据卷dockervolumels|grepbudibase# 备份 CouchDB 数据dockerrun--rm-vbudibase_couchdb3_data:/data-v/backup:/backup\alpinetarczf /backup/couchdb-backup-$(date+%Y%m%d).tar.gz /data# 备份 MinIO 数据dockerrun--rm-vbudibase_minio_data:/data-v/backup:/backup\alpinetarczf /backup/minio-backup-$(date+%Y%m%d).tar.gz /data端口防火墙(如需要)
# firewalldfirewall-cmd --add-port=10000/tcp--permanentfirewall-cmd--reload
编程学习
技术分享
实战经验