引言
最近搞了个矿渣,处理器是国产的RK3328,四核A53架构,64位的,性能太好了,装了个OpenWRT,想用来当nas用,但是我发现,竟然没有合适的文件服务器,局域网内用SMB确实可以,但是这玩意儿不能放到公网上用,FTP又有点老,不太好用,就想着搞个WebDAV的服务器,但是网上在OpenWRT上配WebDAV要么是用lighttpd,要么是用apache,感觉都比较复杂,关键是这些框架都不是专为WebDAV服务的,只是用了他们里面的一个mod,要使用mod就需要把整个框架的基础配置完,综上,我找了半天,找了个单独的WebDAV服务器。
链接在这里:https://github.com/hacdias/webdav
这个服务器是一个用Go语言写的应用程序,并不是专为OpenWRT开发的,但是鉴于我们使用的是ARM64架构,他有编译,所以刚好可以在OpenWRT上运行,x86同理。
配置文件
下面的代码请保存为config.yaml
,这是服务器的配置文件。
# Server related settings
address: 0.0.0.0
port: 0
auth: true
tls: false
cert: cert.pem
key: key.pem
prefix: /
debug: false
# Default user settings (will be merged)
scope: .
modify: true
rules: []
# CORS configuration
cors:
enabled: true
credentials: true
allowed_headers:
- Depth
allowed_hosts:
- http://localhost:8080
allowed_methods:
- GET
exposed_headers:
- Content-Length
- Content-Range
users:
- username: admin
password: admin
scope: /a/different/path
- username: encrypted
password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
- username: "{env}ENV_USERNAME"
password: "{env}ENV_PASSWORD"
- username: basic
password: basic
modify: false
rules:
- regex: false
allow: false
path: /some/file
- path: /public/access/
modify: true
上述配置文件中,users
下的username
和password
有四组,请将下面三组删去,只留下第一组;
users
下的scope
表示WebDAV服务器的根目录地址,如果你插了个硬盘,这里可以填硬盘挂载点,例如\mnt\sda1
;
address
表示服务器地址,这里保持0.0.0.0
不变即可;
port
表示监听端口,这里是WebDAV服务器的端口,你可以选一个你喜欢的端口,比如1234
;
tls
表示是否使用下面cert
和key
指定的证书,false
表示不使用证书。
如何启动
完成上述配置后,你就可以启动服务器试试看了,请切换到服务器应用所在路径,将上述配置文件放在应用一起,然后运行下面的命令:
./webdav -c ./config.yaml
你会看到服务器出现了一些信息,使用你的WebDAV客户端试试看吧,用户名和密码就是上面配置文件里的username
和password
所指定的内容。
OpenWRT添加开机启动
当然了,到了这里只是把程序打开了,如何让他随着机器一起启动呢,需要用到OpenWRT的服务机制。
使用WinSCP连接路由器后台,切换到/etc/init.d
目录,在这下面新建一个名为webdav
的文件,填入以下内容:
#!/bin/sh /etc/rc.common
START=99
STOP=10
USE_PROCD=1
NAME="webdav"
WEBDAV_BIN="/usr/share/webdav/webdav"
WEBDAV_CONF="/usr/share/webdav/config.yaml"
WEBDAV_LOGFILE="/tmp/webdav.log"
WEBDAV_PID="/var/run/webdav.pid"
start_service() {
stop
config_load webdav
local webdav_enable
config_get_bool webdav_enable webdav enabled
if [ "$webdav_enable" -eq 1 ]; then
nohup $WEBDAV_BIN -c $WEBDAV_CONF >$WEBDAV_LOGFILE 2>&1 & echo $! >WEBDAV_PID
fi
}
boot() {
if [ -e WEBDAV_PID ]
then
rm WEBDAV_PID &> /dev/null
fi
start
}
stop_service() {
if [ -e WEBDAV_PID ]
then
kill $(cat WEBDAV_PID) &> /dev/null
rm WEBDAV_PID &> /dev/null
fi
}
shutdown() {
if [ -e WEBDAV_PID ]
then
rm WEBDAV_PID &> /dev/null
fi
}
restart() {
stop
start
}
将上述文件权限改为0755
,直接右键属性就可以改。
在/etc/config
目录下新建一个webdav
文件,权限改为0664
,填入以下内容:
config webdav 'webdav'
option enabled '1'
上述enabled
后跟的数字表示是否启动WebDAV服务器,1
表示启动,0
表示不启动。
最后,在/usr/share
目录下新建一个文件夹webdav
,确保你的应用程序名为webdav
,配置文件名为config.yaml
后放入该文件夹,让/usr/share/webdav
目录下分别有/usr/share/webdav/webdav
和/usr/share/webdav/config.yaml
两个文件即可。
试试看咯
在OpenWRT网页里,点系统-启动项,划到最下面,看看是不是webdav这一个启动项已经出来了,出来后,将其启用,然后点启动,在你的客户端上试试看吧。