OpenWRT通过Docker部署局域网文件服务器

发布于 9 天前  25 次阅读


局域网内跨平台传输文件一直是个挺常见的需求。实现方式有很多,无论是用基于P2P的传输软件,还是电脑上开一个共享文件夹,都可以把文件传输到目标设备上。

我比较偏好基于浏览器的工具,因为用起来方便,不需要一个个设备都装一遍软件。

目前常用的工具叫CuteHttpFileServer(https://iscute.cn/chfs),简称CHFS。这款工具实际上是个网页端的文件服务器,拿来在局域网中互传文件或者文本比较方便。

之前它是部署在我常用的游戏本上面的,刚好最近上线的OpenWRT x86小主机容量管够,可以在上面搭建Docker环境,那就趁此机会,试试看它的Docker版用着效果如何。

1.搭建Docker环境

在部署容器前,当然得先把Docker搭建好。

Docker环境会占掉不小的存储空间,容量不是很充足的路由器不建议尝试。

1.1.更新软件源

通过SSH连接至OpenWRT,按照惯例更新软件源。

opkg update

1.2.安装Docker包

执行以下命令安装Docker、Docker Compose以及LuCI上的Docker管理插件。

命令执行完成后,退出LuCI控制台并重新登录,就会看到由luci-app-dockerman插件提供的Docker管理菜单。

opkg install docker dockerd docker-compose luci-app-dockerman luci-i18n-dockerman-zh-cn

1.3.配置防火墙区域转发

Docker安装完成后,会在防火墙中生成一个叫docker的安全域。需要放行从lan区域到docker区域的流量转发,才能让局域网中的设备正常访问Docker容器映射出来的端口。

网络下拉菜单中找到防火墙,进入防火墙的常规设置界面,点击lan一行的编辑按钮。

OpenWRT通过Docker部署局域网文件服务器

点开Allow forward to destination zones下拉菜单,追加勾选docker区域并保存。保存完后记得点一下“保存并应用”。

OpenWRT通过Docker部署局域网文件服务器

2.部署CHFS容器

2.1.拉取CHFS镜像

执行以下命令拉取CHFS容器。如果拉取报错,那就证明需要给OpenWRT上个加速,或者加一个Docker镜像源。

docker pull docblue/chfs:v4.0beta.min

2.2.创建CHFS配置文件

CHFS在容器内的配置文件位于/config/chfs.ini。可以先在OpenWRT里面创建一个这样的配置文件,并在创建容器时把目录映射过去。

执行以下命令创建配置文件目录。

mkdir -p /opt/docker/containers/chfs/config

然后执行以下命令创建一个配置文件。

cat >> /opt/docker/containers/chfs/config/chfs.ini << EOF
port=80
path=/data
allow=
log=/log
html.title=CHFS
html.notice=
image.preview=
folder.download=
ssl.cert=
ssl.key=
session.timeout=
file.remove=3
[guest]
password=
rule.default=d
rule.none=
rule.r=
rule.w=
rule.d=
EOF

完整版的配置文件及注释可以参考作者官网(https://iscute.cn/asset/chfs.ini)。

2.3.创建CHFS容器

在LuCI控制台中点击Docker下拉菜单中的容器,进入容器管理页面。

点击新增,新建一个容器。

一个个填空比较麻烦,可以点击命令行按钮,直接粘贴docker命令进行解析。

docker run \
  --name chfs \
  -d \
  -p 8080:80 \
  -v /opt/docker/containers/chfs/config:/config\
  -v /opt/docker/containers/chfs/data:/data \
  -v /opt/docker/containers/chfs/log:/log\
  docblue/chfs:v4.0beta.min

上面的这串命令是将Web访问端口映射到OpenWRT的8080端口。文件目录和日志目录都映射到opt/docker/containers/chfs下对应的目录。

不过我自己用的环境是把文件目录和日志目录映射到/tmp下的目录,重启就可以全部清空,不用手动清理(笑)。

容器的重启策略可以用默认的Unless stopped,这样每次重启OpenWRT,只要CHFS容器之前没手动停掉,就能自动启动。

确认完配置,点击最下面的提交按钮,保存容器。接下来就可以运行一下试试看了。

3.个人吐槽

还是拿x86小主机跑OpenWRT体验好啊。用起来基本不用担心内存或者存储空间不足,一些轻量级的容器都可以放在上面运行。

小主机目前还在用商家送的电源,看着不是非常靠谱,就没打算在上面跑太多东西。CHFS我也只打算用于文件互传,不会真的把文件一直保存在小主机的硬盘里。如果现在就把它做成AIO,那么最终打造出来的估计会是“AIB”,也就是All in BOOM。