前言
我平时做文件转换时,最不舒服的不是多点几下按钮,而是文件一旦上传到陌生网站,后面到底经过了什么流程自己并不清楚。普通图片问题不大,但如果是方案、合同、报表、客户素材或者还没公开的内容,我更愿意把转换工具掌握在自己手里。VERT 吸引我的地方就在这里:页面可以自己部署,按当前项目说明,很多转换任务通过 WebAssembly 在本地设备上完成,不需要把文件交给远端转换服务器。对我来说,这比“永久免费”“什么都能转”这类口号更值得关注。
这次我把 VERT 部署在群晖上,直接使用 ghcr.io/vert-sh/vert:latest 镜像,把宿主机 3833 映射到容器 80。局域网里先确认页面可以正常打开,再通过群晖套件中心安装 cpolar,在 9200 管理页面里给 VERT 配置公网入口。因为这次目标是长期使用,所以没有先走随机域名,而是直接预留二级子域名 vert1,再回到隧道配置中绑定。整篇我会把“VERT 的本地转换能力”“群晖上的 Web 页面”“cpolar 提供的公网入口”分开说明,不把自托管直接写成绝对安全,也不把支持多种格式夸成所有格式都已经逐项验证。

1. VERT 解决的不是“有没有转换网站”,而是文件要不要交出去
VERT 是一套开源、自托管的文件格式转换工具。
当前功能说明里列出了多种常见格式,包括:
- 图片:PNG、JPG、WEBP、GIF;
- 音频:MP3、WAV、FLAC;
- 文档:DOCX、PDF、Markdown;
- 以及视频等其他类型。

它比较有辨识度的一点,是使用 WebAssembly 在本地设备上执行转换。
也就是说,页面虽然由群晖上的容器提供,但按当前项目说明,实际转换过程主要发生在当前浏览器所在设备。

我更愿意把它理解成:
自己托管一个转换入口,再尽量把文件处理留在本地浏览器。
当前介绍里还写到“无文件大小限制”和“支持多种文件格式”。这类描述我按项目说明保留,但不会继续扩大成“任何文件、任何浏览器、任何大小都已经实测没有限制”。
2. 在群晖上先把 VERT 跑起来
先进入群晖的:
Container Manager

然后通过 SSH 进入群晖。

这次没有再拆成 Compose 文件,而是直接用一条 Docker 命令启动:
sudo docker run -d --restart unless-stopped --name vert -p 3833:80 ghcr.io/vert-sh/vert:latest

这条命令里最重要的参数有四个:
- 容器名:
vert - 镜像:
ghcr.io/vert-sh/vert:latest - 宿主机端口:
3833 - 容器端口:
80
同时使用:
--restart unless-stopped
让容器在 Docker 服务重启后按当前策略恢复运行。
3. 浏览器先验证局域网访问
容器启动以后,在浏览器打开:
群晖NAS IP:3833

如果页面能正常出现,说明:
群晖 Docker → VERT 容器 → 3833:80 → 局域网浏览器
这一层已经跑通。
我不会因为首页能打开,就直接写成所有转换格式都已经逐个成功。
这次实际验证重点,是 VERT 页面可以从群晖正常提供出来。
4. 自托管以后,为什么还需要公网入口
如果只在家里或者办公室内网使用,到这里其实已经够了。
但文件转换往往是临时需求。
人在外面收到一份 PDF、图片或者音频,如果还得等回到家里才能打开 VERT,就会失去“随手可用”的意义。
所以后面再加入 cpolar。
cpolar 在这里负责的只有:
把已经运行在
3833的 VERT Web 页面提供到公网。
VERT 负责文件转换逻辑;cpolar 不参与 WebAssembly 转换,也不决定文件格式支持范围。
5. 在群晖套件中心安装 cpolar
这里使用群晖版 cpolar 套件。
先下载与群晖设备对应的套件版本。
如果没有完全一致的型号,当前流程给出的做法是选择相近版本型号的套件。

进入:
套件中心
点击右上角:
手动安装

选择下载好的 cpolar 套件安装包,然后继续。

安装过程中确认授权。

最后点击完成。

到这里,cpolar 套件已经安装到群晖。
6. 打开 cpolar Web 管理页面
安装完成以后,在外部浏览器通过:
群晖局域网 IP + 9200
打开 cpolar Web 管理界面。
登录时使用 cpolar 账号。

后面的隧道创建、域名绑定都在这个页面里完成。
7. 这次直接按长期使用来配置
进入:
隧道管理 → 创建隧道
参数如下:
- 隧道名称:自定义,但不要和已有隧道重名;
- 协议:
http - 本地地址:
3833 - 端口类型:二级子域名
- 地区:
China top

这里和很多“先随机、后固定”的教程不同。
这次目标一开始就是长期使用,所以直接选择:
二级子域名。
当前说明也提到,如果只是测试或非长期使用,可以选择随机域名;随机地址会变化,需要重新获取。
这部分我按当前流程保留,没有额外验证随机域名实际变化周期。
8. 先去预留二级子域名 vert1
进入 cpolar 官网的预留页面。
选择:
保留二级子域名
参数为:
- 地区:
china top - 二级子域名:
vert1

二级子域名具有唯一性。
这里的 vert1 是当前示例,真正使用时要以自己账号中实际预留成功的名称为准。
9. 把预留好的域名绑定回 VERT 隧道
复制前面预留成功的二级子域名。
回到 cpolar 本地配置页面,把它填到 VERT 隧道的域名配置中,然后创建。

创建完成以后,可以看到当前生成了两条固定公网地址。

这一步真正建立的是:
外部浏览器 → cpolar 固定公网地址 → 群晖 3833 → VERT Web 页面。
10. 从外部设备访问 VERT
最后直接使用生成的固定公网地址,从其他设备打开。

页面能够正常访问。
到这里,这次真正验证完成的是:
群晖部署 VERT → 局域网 3833 页面 → cpolar 二级子域名 vert1 → 外部浏览器访问。
11. 我会怎么理解“私人文件转换工具”
我不会把它简单写成:
“只要自托管,就绝对不会泄露。”
更准确的理解应该分三层。
第一层:Web 页面。
VERT 页面部署在自己的群晖 Docker 里。
第二层:文件转换。
按当前项目说明,VERT 使用 WebAssembly 在本地设备完成转换。
第三层:公网入口。
cpolar 负责让外部设备能访问群晖上的 VERT 页面。
这样职责就比较清楚。
如果真正处理的是敏感合同、内部资料或客户文件,我仍然会继续关注:
- 当前浏览器是否可信;
- 公网入口是否只分享给需要的人;
- 使用的具体转换功能是否符合当前文件类型;
- 自己是否真正理解这类文件的处理路径。
这比一句“自托管=绝对安全”更实际。
总结
这次真正跑通的主线是:
群晖 → Container Manager → SSH → ghcr.io/vert-sh/vert:latest → 3833:80 → VERT Web → cpolar 群晖套件 → 9200 管理页面 → HTTP 隧道 → 本地 3833 → China top → 二级子域名 vert1 → 固定公网地址 → 外部浏览器访问。
几个细节值得继续留意:
- 当前 Docker 命令使用
--restart unless-stopped,但没有额外数据卷参数; - VERT 的 WebAssembly、本地转换和无文件大小限制属于当前项目功能说明,这次没有额外做网络抓包或极限大文件测试;
- 页面列出了图片、音频、文档和视频等多种格式,但这次没有把所有格式逐一转换验证;
- cpolar 只负责 VERT Web 页面的公网入口,不参与文件转换;
- 这次直接走固定二级子域名,没有先测试随机域名;
- 固定二级子域名示例是
vert1; - 当前步骤显示创建后生成两条固定公网地址,但没有继续把这两条地址的协议差异展开说明。
对我来说,VERT 最有价值的地方不是“又多了一个格式转换网站”,而是把转换入口放到自己能控制的环境里,再尽量让文件处理留在本地设备。如果只是偶尔转一张图片,专门部署没有太大必要;但只要经常处理不适合随便上传第三方网站的文件,这种工具就很容易变成长期保留的基础服务。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/Pocker_Spades_A/article/details/166644189




