飞牛部署Mtab完整实战:Docker安装、MySQL建库与固定地址访问

飞牛部署Mtab完整实战:Docker安装、MySQL建库与固定地址访问

前言

这篇完整走一遍飞牛 NAS 部署 Mtab 的流程:先确认 Docker 环境,拉取 itushan/mtab 镜像,用 9205:80 启动容器,并把 /opt/mtab 挂载到容器 /app。

Web安装页能够打开以后,再登录 MySQL,创建 mtab_db、专用用户 mtab_user 和对应权限,然后把数据库信息填回 Mtab 安装向导,完成管理员初始化、书签分类和页面设置。

后半部分继续把 9205 做成外部访问入口,并配置固定二级子域名,让不同设备都能打开同一套导航页。

整篇重点放在"Docker---Mtab---MySQL---初始化---远程访问"这条链路上,同时把Docker容器里的数据库地址、mtab_user@'%'权限范围、systemctl status -v以及结尾混入LAMP/LNMP源码安装条件这些问题分开说明。

相比只演示一个漂亮首页,这篇更关注可复现性:容器到底映射到哪个端口、数据库从哪里连、独立用户怎么授权、页面初始化以后数据怎么保存,都要顺着一条链验证。这样后面无论换端口、迁移数据库,还是增加远程访问,都更容易判断问题卡在哪一层。

另外,这篇不会把源码安装和Docker安装混在一起。前者需要单独准备PHP、Nginx等Web环境,后者已经通过镜像封装了运行环境;两条路线的数据库和初始化逻辑可以相通,但前置条件并不一样。

1 Mtab真正解决的是"书签入口统一",不是替代浏览器

Mtab更适合做:

  • 常用网站导航;
  • 工作入口;
  • 学习资料分类;
  • 多设备统一书签页;
  • 自建浏览器首页。

它不是浏览器插件,而是一套独立Web应用。

所以它和浏览器收藏夹的关系更像:

浏览器书签负责临时收藏,Mtab负责把高频入口重新整理成一个长期导航页。

这篇重点不是把所有功能都讲一遍,而是把:

飞牛部署 → 数据库 → 初始化 → 远程访问

这一条链跑通。

2 自建Mtab意味着数据放在自己的服务器,不等于"绝对不会泄露"

Mtab支持自托管。

这意味着:

  • 程序运行在自己的飞牛;
  • 数据库由自己维护;
  • 书签数据不必交给公共导航站。

但这并不能直接推出:

  • 没有任何第三方依赖;
  • 永远不会泄露;
  • 公网开放后天然安全。

真正的数据安全仍然取决于:

  • 管理员密码;
  • MySQL权限;
  • 是否公开管理入口;
  • 是否启用HTTPS;
  • 是否定期备份;
  • 软件本身是否及时更新。

3 先在飞牛开启SSH

进入飞牛设置,打开SSH:

继续确认:

然后从终端连接:

后面的Docker和MySQL配置都从这里完成。

4 先确认Docker环境

执行:

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

飞牛主页也能看到Docker状态:

其中:

docker -v

可以直接验证Docker命令。

但:

systemctl status -v

这个写法比较可疑。

如果执行时报参数错误,不应该直接判断Docker没有启动,而是先确认真正要查看的服务名和systemctl参数。

代码块按现有内容原样保留。

5 拉取Mtab镜像

执行:

shell 复制代码
docker pull itushan/mtab

这里使用的是:

itushan/mtab

当前Docker Hub和项目仓库仍然提供这个镜像。

官方部署说明也明确给出了Docker方式,因此这一条技术路线本身没有问题。

6 启动Mtab容器

执行:

shell 复制代码
docker run -itd --name mtab-new -p 9205:80 -v /opt/mtab:/app itushan/mtab

这里几个参数分别是:

  • 容器名:mtab-new
  • 宿主机端口:9205
  • 容器端口:80
  • 宿主机目录:/opt/mtab
  • 容器目录:/app

也就是:

飞牛9205 → Mtab容器80

项目官方示例常用9200,但宿主机端口本身可以根据实际占用情况修改。

9205在这里属于当前部署选择,不是Mtab固定端口。

7 先打开9205安装页面

浏览器访问:

http://飞牛IP:9205

看到安装页面以后,只能证明:

Mtab容器已经提供Web页面。

这时应用还没有完成数据库初始化。

下一步才是准备MySQL。

8 Docker部署和源码部署不要混成一套前提

文章结尾又提到:

  • LAMP/LNMP;
  • PHP ≥ 7.4;
  • MySQL ≥ 5.7;
  • 源码下载。

这属于另一条:

源码 / Web环境部署路线。

当前正文实际走的是:

Docker镜像部署。

Docker镜像已经封装了Mtab Web运行环境,因此没有必要再把"手工准备PHP/Nginx"写成Docker路线的必选步骤。

当前Docker方式真正还需要单独准备的是:

可用MySQL数据库。

9 创建Mtab专用数据库

先登录MySQL:

shell 复制代码
mysql -u root -p

然后创建数据库:

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

这里使用:

utf8mb4

能够更好地覆盖中文、Emoji等字符。

数据库名:

mtab_db

可以根据自己环境调整。

10 不要直接让Mtab长期使用MySQL root

创建专用用户:

shell 复制代码
CREATE USER 'mtab_user'@'%' IDENTIFIED BY 'your_strong_password';

再授权:

shell 复制代码
GRANT ALL PRIVILEGES ON mtab_db.* TO 'mtab_user'@'%';
FLUSH PRIVILEGES;

这样Mtab只使用:

mtab_user

而不是长期拿MySQL root账号连接。

这一点是对的。

应用使用独立数据库账号,更容易:

  • 控制权限;
  • 单独改密码;
  • 排查连接;
  • 后续迁移。

11 mtab_user@'%'虽然方便,但权限范围很宽

当前命令创建的是:

'mtab_user'@'%'

其中 % 表示:

允许这个MySQL用户从任意来源主机尝试连接。

这对测试很方便。

但长期使用时,如果Mtab的连接来源是固定的,更适合限制:

  • 指定IP;
  • 指定Docker网段;
  • 指定容器网络范围。

尤其不要为了让Mtab连数据库,就顺手把3306直接暴露到公网。

12 验证数据库和用户

查看数据库:

shell 复制代码
SHOW DATABASES;

再看用户:

shell 复制代码
SELECT User, Host FROM mysql.user WHERE User = 'mtab_user';

能看到:

mtab_db

和:

mtab_user

以后,数据库准备基本完成。

13 这里最容易踩坑的是"数据库地址=localhost"

回到Mtab安装页面:

源表格里写:

数据库地址:localhost

但当前Mtab运行在Docker容器里。

官方Mtab Docker说明明确提醒:

容器部署时,数据库地址不要填写127.0.0.1,因为容器内的本机地址不是宿主机网络。

localhost本质上存在同样的问题。

在Mtab容器内部:

localhost指向Mtab容器自己。

并不会自动指向飞牛宿主机上的MySQL。

14 正确数据库地址取决于MySQL到底跑在哪里

如果MySQL运行在飞牛宿主机:

可以填写:

飞牛在容器侧可访问的宿主机IP

如果MySQL也是一个Docker容器,并和Mtab在同一Docker网络:

更适合填写:

MySQL容器服务名 / 容器名

官方Mtab提供的Compose示例也是让应用通过:

mysql

这个服务名访问数据库。

所以数据库地址不能机械照抄成localhost。

15 3306也不是"远程就必须开放公网"

源步骤写:

如果是远程服务器,请确保防火墙开放3306。

这句话范围太大。

如果:

  • Mtab和MySQL在同一台主机;
  • 两个容器在同一Docker网络;
  • 只需要内网连接;

都没有必要把3306对互联网公开。

更合理的原则是:

数据库只开放给真正需要连接它的主机或容器。

16 数据库连接成功后继续安装

填写正确的:

  • 数据库地址;
  • 3306;
  • 用户名;
  • 密码;
  • 数据库名。

然后测试:

连接成功以后,再继续下一步。

17 设置Mtab管理员账号

数据库初始化完成后:

设置管理员账号和密码。

这里建议使用:

  • 单独密码;
  • 足够长度;
  • 不和其他网站复用。

尤其后面准备做外部访问时,Mtab管理员账号就是基础防线。

18 完成安装以后先在局域网验证

安装完成:

进入首页:

先确认:

  • 页面正常加载;
  • 数据库没有报错;
  • 默认书签能够读取;
  • 登录状态正常。

这一步成功以后,才说明:

浏览器 → 9205 → Mtab → MySQL

完整基础链已经通了。

19 先实际点一次导航链接

页面自带一些导航:

实际点开一个链接。

这能验证:

导航页不只是显示出来,跳转也能正常工作。

不过外部网站是否可访问,仍然取决于当前设备自己的网络。

20 分类管理是Mtab最核心的长期功能之一

进入分类设置:

真正用久以后,Mtab好不好用,很大程度取决于:

  • 分类是否清晰;
  • 名称是否容易理解;
  • 高频网站有没有放在前面;
  • 是否把所有链接堆成一屏。

导航工具不是收藏越多越好。

而是:

真正需要的时候能快速找到。

21 常规设置继续按自己的使用习惯调整

设置页面:

继续:

这里可以根据实际需求调整页面显示和使用方式。

这篇截图能够证明的是:

设置入口存在并可配置。

不需要把所有可能功能都扩大描述。

22 到这里,本地Mtab已经可以正常使用

目前已经完成:

  • Docker运行;
  • 9205页面;
  • MySQL数据库;
  • 专用数据库用户;
  • 管理员初始化;
  • 导航跳转;
  • 分类;
  • 常规设置。

如果只在家里或办公室局域网使用,到这里已经足够。

后面的步骤解决:

离开当前网络以后怎样继续打开自己的导航页。

23 安装cpolar

执行:

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

再检查服务:

shell 复制代码
sudo systemctl status cpolar

然后进入:

飞牛IP:9200

后面的网络入口都在这里配置。

24 给Mtab的9205创建随机公网地址

配置:

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

创建以后查看在线隧道:

从外部设备打开:

页面可以加载以后说明:

外部浏览器 → 公网地址 → cpolar → 飞牛9205 → Mtab

网络链已经打通。

25 公网访问以后,安全要求会比局域网更高

Mtab页面里保存的可能是:

  • 公司系统入口;
  • NAS地址;
  • 管理后台;
  • 私人网站;
  • 常用服务。

这些网址本身就可能透露个人使用习惯和内部服务结构。

所以远程使用时至少应该:

  • 管理员密码足够强;
  • 不公开分享管理账号;
  • 避免把敏感内网地址放在公开页面;
  • 数据库不对公网开放;
  • 有条件时使用HTTPS。

Mtab官方部署说明本身也建议外网访问时配合HTTPS。

26 cpolar只负责网络入口

Mtab负责:

  • 导航;
  • 分类;
  • 用户和书签。

MySQL负责:

  • 数据存储。

cpolar负责:

  • 外部浏览器怎么到达9205。

三层职责要分开。

公网能打开,不代表Mtab数据库和管理员权限自动安全。

27 随机地址适合先验证

先用随机地址确认:

  • 页面能打开;
  • 登录正常;
  • 分类能加载;
  • 跳转正常;
  • 手机浏览器显示正常。

这些都确认以后,再决定是否需要固定地址。

28 配置固定二级子域名

进入预留页面:

保留:

mtab

然后进入隧道列表:

修改为:

二级子域名

更新以后:

最后从外部设备访问:

页面仍然正常,就说明固定入口配置完成。

29 固定地址解决的是入口稳定,不是永久承诺

源步骤写:

永久不会变化。

更稳妥的说法应该是:

在账号、套餐和对应服务条件持续有效的情况下,固定二级子域名不需要像随机地址那样频繁修改。

它的价值是:

  • 书签地址稳定;
  • 浏览器主页不用反复改;
  • 手机和电脑都可以保存同一个入口。

它不意味着服务永久存在。

30 这篇真正跑通了什么

应用:

飞牛 → Docker → Mtab → 9205

数据:

Mtab → MySQL → mtab_db

初始化:

数据库连接 → 管理员账号 → 分类设置

远程:

外部浏览器 → 公网地址 → 9205 → Mtab

真正完成:

  • 飞牛SSH;
  • Docker环境;
  • Mtab镜像;
  • 9205:80;
  • /opt/mtab:/app;
  • MySQL建库;
  • 独立数据库用户;
  • 管理员初始化;
  • 分类和设置;
  • 随机公网访问;
  • 固定二级子域名。

需要特别注意:

  • Docker里的数据库地址不能机械填localhost;
  • mtab_user@'%'权限范围较宽;
  • 3306不应该默认对公网开放;
  • systemctl status -v写法可疑;
  • Docker路线和源码LAMP/LNMP路线不要混写;
  • 固定地址不等于永久;
  • 自托管不等于绝对安全。

总结

整套流程可以拆成四层:Docker负责运行Mtab,MySQL负责保存数据,Mtab负责导航与分类,公网入口负责让外部设备访问9205。

本文已经完成Mtab容器、MySQL专用数据库和用户、管理员初始化、分类设置,以及随机和固定地址访问。

最需要修正的是数据库连接:Docker部署下不能把localhost当成宿主机MySQL地址;另外mtab_user@'%'和3306公网开放也不适合作为默认生产配置。

把这些边界处理好以后,这篇更准确的定位是:在飞牛上搭一套可以长期维护、跨设备访问的自托管书签导航,而不是用"完全私有、绝对安全"来包装一个网页工具。

相关推荐
mister_guo10 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
Lost_the_wind13 小时前
MySQL学习笔记五
mysql
程序员老赵14 小时前
Docker 部署 Wiki.js:轻松搭建私有化维基知识库
docker·容器·开源
这个DBA有点耶15 小时前
从时间到语义:时序数据库与向量数据库的核心机制、选型与多模融合趋势
数据库·mysql·架构
SL_staff15 小时前
考勤同步工资核算总出错?破解企业级精准自动化的三个刚性支点
mysql·github·全栈
毕业设计70315 小时前
(免费领源码)基于node的学生公寓管理系统06412- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
vue.js·mysql·node.js·maven·mybatis·express·b/s
灯澜忆梦16 小时前
【Docker】#5 | 网络配置
网络·docker·容器
太理摆烂哥16 小时前
MySQL库的操作
数据库·mysql
刘胡子大叔16 小时前
docker build 跑了 92 分钟还是失败了
docker·容器