NocoDB在线表格数据库:fnOS部署、MySQL可视化与远程协作实操

NocoDB在线表格数据库:fnOS部署、MySQL可视化与远程协作实操

前言

本文在飞牛 fnOS 环境中通过 Docker 部署 NocoDB,并继续搭建 MySQL 8.0 作为外部数据源。NocoDB 容器映射到主机 8086,数据目录挂载到当前路径下的 nocodb;MySQL 则通过 Docker Compose 运行并映射 3306。

数据库部分实际创建 shan 数据库与 user 表,写入两条测试数据,再从 NocoDB 中连接该 MySQL 数据源,确认表结构与数据能够在网页端显示。随后继续从网页新增数据、创建字段、编辑字段并按 name 查询,再用 JSON 文件做一次外部数据导入。

远程部分安装 cpolar,把 NocoDB 的 8086 暴露为 HTTP 公网入口,先验证随机域名,再切换固定二级子域名。

整篇重点放在"fnOS---NocoDB---MySQL---网页增删改查---数据导入---远程协作"这条实际链路上。

同时需要区分演示参数与长期使用配置:示例里的 JWT Secret、MySQL root 密码和 bind-address=0.0.0.0 都不应该直接作为生产环境的安全基线。

这篇也会把"页面能打开"和"数据库真的连通"分开验证。NocoDB 自己创建 Base 只是第一层,后面还要看到 MySQL 里的两条测试数据出现在网页中,并再从 NocoDB 写回数据,用 SELECT * FROM user; 回到数据库确认,才能说明连接链路真正生效。如果后面准备给团队长期使用,这种验证方式也更重要,因为一旦网页端和数据库端的数据不一致,问题可能出在连接、权限、字段结构或数据源配置任何一层。

1 NocoDB更适合解决哪类问题

NocoDB 的核心不是把表格做得更漂亮,而是把数据库操作变成更直观的网页界面。

对于不会 SQL 的用户来说,可以通过:

  • 网格视图;
  • 看板;
  • 表单;
  • 字段配置;
  • 数据筛选;
  • 排序和查询;
  • 多人协作;

来管理数据。

对于已经有 MySQL、PostgreSQL 或 SQLite 的用户来说,它又可以继续连接现有数据源。

所以我更愿意把 NocoDB 看成:

数据库和在线表格之间的一层可视化界面。

这篇真正验证的也主要是两类能力:

  1. 自己新建 Base 和表;
  2. 连接现有 MySQL 数据库并继续编辑数据。

2 先把fnOS的SSH和Docker准备好

进入飞牛 fnOS 设置,先打开 SSH:

然后使用终端连接:

连接成功后:

接下来检查 Docker。

执行:

shell 复制代码
docker -v 
systemctl status -v

这里第二条 systemctl status -v 本身比较可疑,但属于现有代码块,我保留不改。

真正需要确认的是:

Docker 已经可以正常使用。

3 启动NocoDB容器

这篇使用的 Docker 命令如下:

shell 复制代码
docker run -d \
docker run -d \
  --name noco \
  -v "$(pwd)"/nocodb:/usr/app/data/ \
  -p 8086:8080 \
  -e NC_AUTH_JWT_SECRET="569a1821-0a93-45e8-87ab-eb857f20a010" \
  nocodb/nocodb:latest

参数里几个关键点:

  • 容器名:noco
  • 数据目录:$(pwd)/nocodb:/usr/app/data/
  • 主机端口:8086
  • 容器端口:8080
  • 环境变量:NC_AUTH_JWT_SECRET
  • 镜像:nocodb/nocodb:latest

这里要特别注意一个明显问题:

代码块开头连续出现了两次:

docker run -d \

这很像复制时重复了一行。

为了保持技术内容不被擅自修改,我没有直接删掉,但真正执行时需要先检查命令格式。

另外,示例 JWT Secret 是固定写在命令里的。

如果长期使用,不建议继续照搬同一串密钥。

4 先确认NocoDB页面能打开

浏览器访问:

http://飞牛IP:8086

页面:

做到这里,只能说明 NocoDB 容器已经启动、Web 页面可访问。

后面还要继续验证 Base、表格和外部数据库连接。

5 再准备一个MySQL 8.0数据源

为了验证 NocoDB 连接外部数据库,这篇又单独部署了 MySQL。

先创建目录:

shell 复制代码
mkdir mysql
cd mysql/

然后创建并编辑:

docker-compose.yml

代码保持如下:

shell 复制代码
vi docker-compose.yml

version: "3.8"
services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "Sjixin520!"   # root密码,和你NocoDB填写保持一致
      TZ: "Asia/Shanghai"
    volumes:
      - ./mysql-data:/var/lib/mysql       # 数据持久化,NAS本地文件夹
    command:
      --default-authentication-plugin=mysql_native_password
      --bind-address=0.0.0.0              # 允许局域网所有IP连接
root@fnOS:/docker/mysql# docker-compose up -d

这个代码块里也有一个明显的拼接问题。

Compose YAML 末尾混入了:

root@fnOS:/docker/mysql# docker-compose up -d

这其实是 Shell 提示符和命令,不属于 YAML 配置。

我同样没有直接修改代码块,但实际照做时要注意把命令和 YAML 文件分开。

6 MySQL这组参数更适合测试,不适合直接照搬生产

当前 MySQL 配置里用了:

  • MYSQL_ROOT_PASSWORD: "Sjixin520!"
  • 3306:3306
  • --bind-address=0.0.0.0
  • mysql_native_password

这些设置能让连接更直接,但同时也把访问面放宽了。

尤其:

bind-address=0.0.0.0

表示 MySQL 会监听所有地址。

如果飞牛主机所在网络本身可被更多设备访问,就应该继续结合防火墙、来源限制和数据库账号权限来收紧。

另外,长期使用时最好不要让 NocoDB 直接拿 root 账号作为业务连接账号,而是单独创建最小权限用户。

7 启动MySQL容器

启动命令:

shell 复制代码
docker compose up -d

然后连接:

shell 复制代码
mysql -h127.0.0.1 -P3306 -uroot -p

能够正常进入 MySQL 以后,再继续准备测试数据。

8 创建shan数据库

执行:

shell 复制代码
CREATE DATABASE shan CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

这里创建:

shan

数据库,并使用:

utf8mb4

字符集。

9 创建user表

进入 shan 后创建表:

shell 复制代码
use shan;
CREATE TABLE `user` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` VARCHAR(50) NOT NULL COMMENT '姓名',
  `phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';

然后查看:

shell 复制代码
SHOW TABLES;

这个 user 表包含:

  • id
  • name
  • phone
  • create_time

作为后面的 NocoDB 可视化验证已经足够。

10 先在MySQL里写两条数据

执行:

shell 复制代码
INSERT INTO user (name, phone)
VALUES
('李四','13900139000'),
('王五','13700137000');

当前写入:

  • 李四
  • 王五

后面进入 NocoDB 以后,要确认这两条数据能不能正常显示。

这一步相当于给后面的"同步验证"先准备一个基准。

11 第一次进入NocoDB

初次打开 NocoDB,需要先注册账号密码:

继续填写基本信息:

登录后:

进入工作区:

现在才开始真正使用 NocoDB。

12 先自己创建一个Base

点击:

New Base

填写名称和类型:

创建成功:

进入 Base:

然后新建表:

继续编辑表结构:

这一段验证的是 NocoDB 自己创建表格和字段的基础能力。

13 再把现有MySQL接进NocoDB

接下来验证更有价值的一部分:

不重新建数据,而是直接接现有 MySQL。

进入外部数据源连接:

填写连接参数,并选择刚才创建的数据库:

测试连接以后创建:

连接成功状态:

然后就能看到:

shan

数据库里的数据。

进入表以后:

这说明 MySQL 里的 user 表已经通过 NocoDB 的网页界面显示出来。

14 这才是NocoDB真正有意思的地方

传统方式下,如果想修改 MySQL 数据,往往需要:

  • SQL 客户端;
  • SQL 语句;
  • 数据库权限;
  • 或者专门做一套后台页面。

NocoDB 则把这一层变成网页表格。

所以这篇最值得看的不是"新建一张在线表"。

而是:

已有数据库也能被转换成一个更容易操作的可视化界面。

15 再验证一次数据同步

这篇继续插入一组数据:

然后回到 NocoDB:

新数据已经能显示。

接着直接在 NocoDB 页面里新增数据:

再回到 MySQL 查询:

shell 复制代码
SELECT * FROM user;

这里的验证思路很清楚:

MySQL中的数据能被NocoDB看到,NocoDB中新增的数据也能回写到MySQL。

这比只看"连接成功"更有意义。

16 字段也可以继续在网页里维护

创建新字段:

再进行字段编辑:

然后根据:

name

字段查询:

这一部分更接近普通在线表格的使用体验。

对于不熟悉 SQL 的成员来说,学习成本会低很多。

17 NocoDB也支持直接导入外部文件

进入导入功能:

可以看到支持多种格式:

这里以 JSON 为例:

json 复制代码
[
  {
    "id": 1,
    "username": "zhangsan",
    "age": 22,
    "email": "zhangsan@test.com"
  },
  {
    "id": 2,
    "username": "lisi",
    "age": 25,
    "email": "lisi@test.com"
  },
  {
    "id": 3,
    "username": "wangwu",
    "age": 28,
    "email": "wangwu@test.com"
  }
]

选择文件:

系统自动识别字段:

导入完成:

所以 NocoDB 不只能接外部数据库,也可以继续从文件开始建立数据。

18 这套本地部署的数据边界怎么理解

当前这篇里:

  • NocoDB 跑在飞牛 fnOS;
  • MySQL 也跑在飞牛 fnOS;
  • NocoDB 连接的是本机/局域网 MySQL;
  • 表数据由 MySQL 保存;
  • NocoDB 自己的配置和元数据也落在挂载目录里。

所以从这篇实际链路看,核心数据确实由自己的设备承载。

但"自托管"并不自动等于"没有安全风险"。

真正长期使用还应该继续关注:

  • 数据库账号;
  • NocoDB账号;
  • JWT Secret;
  • 数据库备份;
  • NAS权限;
  • 远程访问入口。

19 本地跑通以后,再处理远程协作

前面已经完成:

  • NocoDB启动;
  • MySQL部署;
  • Base和表;
  • 外部MySQL接入;
  • 数据同步;
  • JSON导入。

如果只在局域网使用,到这里已经够了。

如果希望异地团队也能通过浏览器打开 NocoDB,再继续处理公网入口。

这里 cpolar 只负责把 NocoDB Web 页面带到外部网络。

MySQL 的 3306 并没有在后面的 cpolar 流程里继续做公网穿透。

这一点是好事:

远程用户访问的是NocoDB界面,而不是直接把数据库端口暴露出去。

20 安装cpolar

执行:

shell 复制代码
sudo curl https://get.cpolar.sh | sh

安装完成后检查:

shell 复制代码
sudo systemctl status cpolar

然后通过主机 IP 加:

9200

进入 Web UI:

21 先创建NocoDB随机公网地址

进入隧道管理,创建隧道:

  • 隧道名称:nocodb
  • 协议:http
  • 本地地址:8086
  • 域名类型:随机域名
  • 地区:China Top

创建完成后查看在线隧道:

复制公网地址测试:

页面能够正常打开以后,说明 NocoDB Web UI 已经可以从外部访问。

22 远程协作真正开放的是什么

这里开放的是:

NocoDB网页入口。

团队成员通过浏览器进入 NocoDB,再按照 NocoDB 自己的账号和权限操作数据。

这和直接开放 MySQL 3306 是两回事。

更合理的远程协作方式应该是:

  • 数据库留在内网;
  • 用户从 NocoDB 进入;
  • 再由 NocoDB 按数据库连接处理数据。

这样网络边界会更容易控制。

23 长期使用再切换固定二级子域名

进入预留页面:

这里示例使用:

nocodbb

然后回到隧道列表,编辑 NocoDB 隧道:

修改为:

  • 域名类型:二级子域名;
  • Sub Domain:填写预留名称;
  • 地区:China Top。

更新:

然后查看在线隧道:

最后通过固定地址访问:

页面正常打开以后,固定入口就配置完成。

具体套餐、固定域名条件和地址规则可能变化,长期使用时应以账号页面为准。

24 真正用于团队时,权限比"能打开"更重要

这篇已经证明异地设备可以打开 NocoDB。

但团队长期使用时,更重要的是:

  • 每个人用独立账号;
  • 不共享管理员账号;
  • 按角色分配权限;
  • 不让所有成员直接接触 MySQL root;
  • 数据库定期备份;
  • JWT Secret 不使用公开示例;
  • MySQL 密码不要写成教程里的固定值。

NocoDB 把数据操作变简单以后,权限管理反而更应该认真做。

25 这套方案更适合什么场景

我觉得它比较适合:

  • 个人台账;
  • 运维资产登记;
  • 小团队 CRM;
  • 库存管理;
  • 内部项目台账;
  • 业务数据录入;
  • 已有 MySQL 数据库的可视化管理。

如果只是几十行一次性的临时数据,普通在线表格会更轻。

但如果数据需要长期维护、多人录入,还要和真实数据库保持一致,NocoDB 这种"数据库 + 表格界面"的组合就开始有价值。

总结

整套流程可以拆成四层:fnOS 与 Docker 负责运行环境,NocoDB 提供网页表格界面,MySQL 保存业务数据,公网入口负责把 8086 带到外部浏览器。

本地阶段已经完成 NocoDB 初始化、自建 Base、MySQL 8.0、shan 数据库、user 表、数据插入、外部数据源连接、双向数据验证和 JSON 导入。

公网阶段只开放 NocoDB Web 页面,没有继续把 MySQL 3306 通过 cpolar 暴露出去,这种结构比直接让远程用户连接数据库更容易控制。

真正用于团队时,还应该把示例 JWT Secret、root 密码、bind-address=0.0.0.0 和账号权限重新收紧。这样 NocoDB 才不仅是一个"能用的在线表格",而是一套更适合长期维护的轻量数据管理入口。

相关推荐
张继雁1 小时前
30~50MPa数控高压清洗:前端分级过滤逻辑,抑制硬质磨粒对喷嘴冲蚀
大数据·数据库·人工智能·机器学习·创业创新
言乐61 小时前
PythonLOLM自动生成复盘报告模型
开发语言·前端·数据库·人工智能·python
倔强的石头_1 小时前
从 KStudio 到 KSQL Developer:国产数据库的 SQL 编辑器,已经卷到这个程度了
数据库
JavaEdge.1 小时前
设定索引方法和检索设置
数据库
小蒜学长1 小时前
基于Vue.js + Spring Boot的酒店客房预订系统设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·酒店客房预订系统
java_logo1 小时前
Docker 部署 Portainer CE:轻松搭建容器管理平台
运维·docker·容器·portainer·容器管理·轩辕镜像·portainer-ce
墨者阳1 小时前
KingbaseES V9R2C16 深度实测:64位事务ID、内存防护、集群备份与坏块修复四大能力全解析
数据库
承渊政道1 小时前
CentOS 7单机部署Elasticsearch 7.17.29:从启动报错、CRUD验证到固定公网地址的完整过程
linux·elasticsearch·centos·内网穿透·cpolar·单机部署
事圆则缓1 小时前
聊天与引用回复的 SQL 怎么设计
数据库·sql