以前写过h5ai在Debian下的教程,这次博主找到一篇更简单的,直接利用Caddy这个轻量级的Http程序就能搭建,简单方便。
Caddy FileManager扩展介绍
FileManager 是基于Caddy 的扩展。它提供文件管理界面,可用于 上传/下载/删除/预览和重命名 等该目录中的文件。
- 支持 执行 Linux命令。
- 支持 上传文件(不支持文件夹)
- 支持 管理 多用户权限。
- 支持 搜索 文件/文件夹。
- 支持 批量 压缩文件下载。
- 支持 在线浏览 图片/文本/视频等文件。
- 支持 新建/重命名/移动/编辑/删除 文件和文件夹等操作。
- 部署简单。
- 等等 …
Caddy 文档:https://caddyserver.com/docs/filemanager
Github 项目:https://github.com/hacdias/caddy-filemanager
搜索 文件/文件夹和执行 Linux命令不知道是我姿势错误,还是其他原因,一直没什么反应和效果。。。
前面的几篇教程,我都用到了Caddy,大家应该都能看出来Caddy的易用性,所以本篇教程也很简单,唯一的难点就是 对一些扩展参数的理解,所以我会提供一些示例,不懂的也可以留言。
安装 Caddy
注意:Caddy脚本今天更新了 v1.0.1 版本,新增安装时可选 扩展参数的功能,所以使用旧版本Caddy的,请卸载重装!
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh install http.filemanager
#备用地址
wget -N --no-check-certificate https://www.moerats.com/usr/shell/Caddy/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh install http.filemanager
mkdir /usr/local/caddy/www && mkdir /usr/local/caddy/www/file
配置 Caddy
filemanager [baseurl] {
show directory
styles filepath
allow_new [true|false]
allow_edit [true|false]
allow_commands [true|false]
allow_command command
block_command command
allow [url|dotfiles]
allow_r regex
block [url|dotfiles]
block_r regex
}
- filemanager 的参数 baseurl 是要流量的文件管理器的URL。默认是
/
(比如/doubi
那么访问入口就是http://ip/doubi
)。 - show 的参数 directory 是要浏览的文件管理器的文件夹路径,可以使相对或绝对路径。默认是
./
(服务器上面文件的绝对或相对路径)。 - styles 的参数 filepath 是式样表文件的相对或绝对路径,该文件不需要从网络访问(一般可以无视)。
- allow_new 是设置 创建 新文件或新文件夹 的权限开关,默认是允许
true
(不允许则是 false)。 - allow_edit 是设置 编辑/重命名/删除 文件或文件夹 的权限开关,默认是允许
true
(不允许则是 false)。 - alow_commands 是设置 执行Linux命令 的权限开关,默认是允许
true
(不允许则是 false)。 - allow_command 是允许执行的 Linux命令。
- block_command 是禁止执行的 Linux命令。
- allow_command 和 block_command 的参数 command 是Linux命令,默认运行
git/svn/hg
(比如这些命令:cp / mv / rm 等)。 - allow 是允许访问特定文件或文件夹,可以使用
dotfiles
来允许访问文件或文件夹。 - block 是阻止访问特定文件或文件夹,可以使用
dotfiles
来阻止访问文件或文件夹,被阻止的文件或者文件夹将不会显示在 文件管理界面。 - allow_r 和 block_r 是上面命令的扩展,可以使用 正则表达式,正则表达式用于匹配 URL,而不是内部路径文件。
我也只是临时了解了一下这个扩展,试了下,就 allow 和 block 我搞不懂,下面我就要根据我的理解来写出各种示例供大家参考和理解了。
配置示例
以下示例中,虚拟主机文件夹皆为 /usr/local/caddy/www/file
示例域名皆为 toyoo.ml
IP HTTP
本示例是,绑定虚拟主机为IP(即通过IP访问),HTTP协议(80端口)。
不需要用户名和密码即可访问,允许 新建/删除/移动/重命名 文件或文件夹等操作,同时允许使用Linux命令mv
。
echo ":80 {
root /usr/local/caddy/www/file
gzip
filemanager / {
show /usr/local/caddy/www/file
allow_new true
allow_edit true
allow_commands true
allow_command mv
}
}" > /usr/local/caddy/Caddyfile
域名 HTTP
本示例是,绑定虚拟主机为域名(即通过域名访问),HTTP协议(80端口)。
不需要用户名和密码即可访问,允许 新建/删除/移动/重命名 文件或文件夹等操作,同时允许使用Linux命令mv
。
echo "http://toyoo.ml {
root /usr/local/caddy/www/file
gzip
filemanager / {
show /usr/local/caddy/www/file
allow_new true
allow_edit true
allow_commands true
allow_command mv
}
}" > /usr/local/caddy/Caddyfile
域名 HTTPS
本示例是,绑定虚拟主机为域名(即通过域名访问),HTTPS协议(443端口)。
不需要用户名和密码即可访问,允许 新建/删除/移动/重命名 文件或文件夹等操作,同时允许使用Linux命令mv
。
如果你有 SSL证书和密匙的话,把 SSL证书(xxx.crt)和密匙(xxx.key)文件放到 /root
文件夹下(也可以是其他文件夹,自己改下面代码),然后这样做:
echo "https://toyoo.ml {
root /usr/local/caddy/www/file
tls /root/xxx.crt /root/xxx.key
gzip
filemanager / {
show /usr/local/caddy/www/file
allow_new true
allow_edit true
allow_commands true
allow_command mv
}
}" > /usr/local/caddy/Caddyfile
如果你没有 SSL证书和密匙,那么你可以这样做:
下面的 xxxx@xxx.xx
改成你的邮箱,同时需要注意的是,申请 SSL证书前,请务必提前解析好域名记录(解析后最好等一会,以全球生效),否则 Caddy会申请并配置失败!
echo "https://toyoo.ml {
root /usr/local/caddy/www/file
tls xxxx@xxx.xx
gzip
filemanager / {
show /usr/local/caddy/www/file
allow_new true
allow_edit true
allow_commands true
allow_command mv
}
}" > /usr/local/caddy/Caddyfile
域名 HTTP重定向 HTTPS
本示例是,域名HTTP重定向为HTTPS。
当你是手动指定 SSL证书和密匙 来配置的话,Caddy只会监听 443端口(https),并不会自动设置 80端口(http)的重定向,如果要做重定向的话,可以这样做:
echo "http://toyoo.ml {
redir https://toyoo.ml{url}
}
https://toyoo.ml {
gzip
tls /root/xxx.crt /root/xxx.key
...
}" > /usr/local/caddy/Caddyfile
单用户/多用户 说明
filemanager {
# 在前面是设定 全局配置的,所有用户都会继承全局配置。
allow_commands false # 这个全局配置代表所有用户都无法执行 Linux命令。
allow_new false # 这个全局配置代表所有用户都无法新建 文件或文件夹。
user1:
# 用户名下面就是该用户 user1 的具体配置,只针对该用户。
# 该用户的配置可以覆盖 同名的全局配置。
allow_commands trus # 这个用户配置,会覆盖全局配置,user1 用户允许执行 Linux命令。
# 该用户 user1 无法新建 文件或文件夹。
user2:
# 用户名下面就是该用户 user2 的具体配置,只针对该用户。
# 该用户的配置可以覆盖 同名的全局配置。
allow_new true # 该用户 user2 可以新建 文件或文件夹,覆盖全局配置。
}
设置用户名和密码(单用户)
本示例是,绑定虚拟主机为域名(即通过域名访问),HTTP协议(80端口)。
需要用户名和密码登录( user/doub.io ),允许 新建/删除/移动/重命名 文件或文件夹等操作,同时允许使用Linux命令 cp
。
因为只有一个用户,所以不需要设置全局配置。
echo "http://toyoo.ml {
root /usr/local/caddy/www/file
gzip
basicauth / user doub.io
filemanager / {
show /usr/local/caddy/www/file
user:
allow_new true
allow_edit true
allow_commands true
allow_command cp
}
}" > /usr/local/caddy/Caddyfile
多用户配置
本示例是,绑定虚拟主机为域名(即通过域名访问),HTTP协议(80端口)。
需要用户名和密码登录,多用户,分别是 admin 和 user 用户。
admin 用户(相当于管理员)允许 允许 新建/删除/移动/重命名 文件或文件夹等操作,同时允许使用Linux命令 cp
。
user 用户(相当于游客)只允许浏览 文件管理器的内容和信息,其他任何操作都无法执行。
echo "http://toyoo.ml {
root /usr/local/caddy/www/file
gzip
basicauth / admin doubi233
basicauth / user doub.io
filemanager / {
show /usr/local/caddy/www/file
allow_commands false
admin:
allow_new true
allow_edit true
allow_commands true
allow_command cp
user:
allow_new false
allow_edit false
}
}" > /usr/local/caddy/Caddyfile
service caddy restart
FileManager 使用说明
界面介绍
进入文件管理界面后,界面大概如下(可能随版本更新会有差别)。
- 顶部中间 是 搜索栏 和 Linux命令执行栏。
- 顶部右边 是退出当前用户的按钮(如果设置了用户账号)。
- 中部左边 是一个可以返回上一级目录的按钮和当前文件夹名字。
- 中部右边 是一系列的操作按钮,在不同情况下会不同,当前是选择文件的情况下。
操作按钮从左到右分别是:
- 新窗口 打开文件或下载文件
- 移动 文件/文件夹
- 重命名 文件/文件夹
- 切换 显示状态(方块和列表)
- 上传 文件(不支持文件夹)
- 压缩 下载(这个是会把你选择的文件/文件夹 压缩到一个文件然后下载,CTRL + 鼠标左键 可以选择多个文件或文件夹)
- 查看 当前选中文件的信息(目前还未开放)
下面的自然就是文件和文件夹了。
使用技巧
一些按键有对应的作用:
- F1 – 查看帮助
- F2 – 重命名 文件/文件夹
- DEL – 删除所选 文件/文件夹
- ESC – 清除当前选择 或 关闭提示
- CTRL + S – 保存下载 文件/文件夹(zip压缩)
- CTRL + 鼠标左键 单击 – 选择多个文件/文件夹
- 鼠标左键 双击 – 打开文件/文件夹
- 鼠标左键 单击 – 选择文件/文件夹
暂时不能用的按键:
- Alt + 鼠标左键 单击 – 选择一组文件
Caddy 使用说明
启动:service caddy start
停止:service caddy stop
重启:service caddy restart
查看状态:service caddy status
查看Caddy启动日志: tail -f /tmp/caddy.log
Caddy配置文件位置:/usr/local/caddy/Caddyfile
其他说明
启动显示成功,但是实际未运行
因为 服务脚本判断的问题,只判断了nohub是否运行 Caddy成功,但没有判断 Caddy 是否保持正常运行。
你可以理解为,nohub成功启动了 Caddy,但是 Caddy因为配置文件错误等原因,启动后又退出了。
所以这种情况下,你应该去查看启动日志:
- tail –f /tmp/caddy.log
单网站/多网站
当然,上面的几个示例,实际上都算是单网站。
最后一句代码都是 }" > /usr/local/caddy/Caddyfile
,也就是清空了 Caddy配置文件,然后再写入了配置信息。
如果你要设置多个网站,那么把最后一句代码改成 }" >> /usr/local/caddy/Caddyfile
即可,注意是把 > 改成 >>
,这样就不会清空原来的配置信息了,而是会把要添加的配置信息加到配置文件最后!
Caddy启动失败,打开 http://ip 显示的是 It works !
netstat -lntp
# 我们可以通过这个命令查看是不是被其他软件占用了 80 端口。
不过 apache2 会默认开机自启动,如果不需要可以关闭自启动或者卸载 apache2 。
停止 Apache2
service apache2 stop
# 尝试使用上面这个关闭,如果没效果或者提示什么错误无法关闭,那就用下面这个强行关闭进程。
kill -9 $(ps -ef|grep "apache2"|grep -v "grep"|awk '{print $2}')
# 以下代码仅限 Debian/Ubuntu 系统 #
update-rc.d -f apache2 remove
# 以下代码仅限 Debian/Ubuntu 系统 #
apt-get remove --purge apache2
service caddy start
如果你是 Aria2 教程里过来的,那么请看这个示例和说明
bash caddy_install.sh uninstall
使用这个扩展,那么就不需要 caddy 自带的列表功能了,所以可以删除参数 browse
,然后如下设置即可。
需要用户名和密码登录,允许 新建/删除/移动/重命名 文件或文件夹等操作,同时允许使用Linux命令 cp
。
因为只有一个用户,所以不需要设置全局配置,你访问下载的BT文件就可以通过 http://ip或域名/Download/
来访问和操作了,用户名和密码是 user233 / doub.io 。
更多的示例,请查看这里。
echo -e "http://toyoo.ml {
root /usr/local/caddy/www/aria2
gzip
basicauth / user233 doub.io
filemanager /Download {
show /usr/local/caddy/www/aria2/Download
user233:
allow_new true
allow_edit true
allow_commands true
}
}" > /usr/local/caddy/Caddyfile
启动 Caddy后,无法访问
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 端口 -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport 端口 -j ACCEPT
# 删除防火墙规则,内容一样把 -I 换成 -D 就行了:
iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport 端口 -j ACCEPT
iptables -D INPUT -m state --state NEW -m udp -p udp --dport 端口 -j ACCEPT