作者:Mintimate
博客:https://www.mintimate.cn
Mintimate's Blog,只为与你分享
H5AI
H5AI,其实全称是:HTML5 Apache Index。最初是用来在Apache Web服务器上,完成资源映射,但是后来适配到Nginx等其他平台。使用H5AI的效果:
特点
其实,Nginx自带的autoindex可以满足绝大多数人的需求,使用autoindex配合fancyindex模块,可以满足:
- 文件搜索
- 文件目录自动映射
而使用h5ai,因为加上了PHP,可以在Nginx自带的autoindex上,新增:
- 更强大的文件搜索
- 文件地址二维码生成
- 多文件合并下载
- 图片缩略图生成
- 图片、视频在线浏览
使用场景
使用场景就很丰富了,
1. 内网使用
内网设备上使用,以树莓派为例:配合Aria2,就是一个不错的下载器,甚至可以说是一个小型的NAS。
2. 公网使用
公网设备上使用,以服务器为例。使用DNS解析二级或者是三级域名到Linux服务器上,用Nginx对域名进行分配,你可以随时分享服务器上的文件给你的朋友;当然,也可以作为离线下载(下载文件到服务器,使其解放本地资源,如:迅雷离线下载)后,回传本地的一种方式。
我现在就用腾讯云轻量应用服务器,作为自己的离线下载器。甚至用出了NAS的感觉~
安装前提
在Linux上,需要:
- Nginx
- PHP7
本次教程,我就使用腾讯云轻量应用服务器进行演示。使用Debian系统:
这样的轻量应用服务器,又多了新的功能~
PHP模块
其中,PHP需要扩展模块:
- EXIF
- GD
Linux 依赖包
Linux需要工具包:
- JPEG
- zip
- ffmpeg
- convert
- imagemagick
宝塔搭建
上次我发布投票,发现很多人的LEMP都是使用宝塔配置的,所以我这里也讲讲宝塔搭建的方法。
1. Nginx&PHP
我们到宝塔的软件商店
,下载PHP和Nginx,编译安装或者快速安装都可以,但是需要注意PHP的版本:
注意:安装PHP,需要2G以上的内存,如果你的服务器小于2G内存,可能安装不上(但是你可以通过增加swap以满足安装需求)
并允许使用putenv
函数:
2. 创建网站
之后,我们点击网站
--添加站点
,按提示添加:
因为,h5ai的目录映射逻辑是:
代码语言:txt复制网站根目录
├─ _h5ai
├─ 你的其他文件1
└─ 你的其他文件1
所以,上传h5ai文件到网站根目录,并解压:
这个时候,我们就可以通过刚刚设置的域名(或IP)进行访问了:
如果你使用的是腾讯云轻量应用服务器的Debian,应该只有最后几项没过:
别急,我们下面来解决。
3. 修复依赖
现在我们来修复依赖,首先是EXIF extension
。我们使用宝塔自带的PHP工具,帮助我们动态编译:
安装了以后,不要忘记PHP的重载配置:
接下来几项,我们到Shell内操作:
依此安装:
代码语言:txt复制# 安装FFmpeg库
sudo apt install ffmpeg
# 安装convert库(imagemagick提供)
sudo apt install imagemagick
# 安装tar库
sudo apt install tar
# 安装zip库
sudo apt install zip
# 安装du库(coreutils提供)
sudo apt install coreutils
安装完成后,如果你的h5ai自检还是有问题,在到宝塔面板内,删除
exec
函数的禁用(方法和删除putenv
函数禁用一样)
完成上述步骤,自检就全部通过了:
4. 更改Nginx配置
最后一步,就是修改网站配置文件,在宝塔内,选择网站
-点击网站
-配置文件
,更改并添加/_h5ai/public/index.php
到index内:
保存后,即可访问:
5. 个性化更改
个性化设置,包括:
- 显示文件二维码
- 设置网站语言
- 设置多文件打包下载
这个我们另外在后文起个大标题讲讲。
手动编译
如果你的服务器,安装宝塔有困难,或者不想安装宝塔,这里我教大家手动编译Nginx和PHP,并配置h5ai。
0. 编译Jpeg lib
h5ai需要gd依赖,且gd需要指向前置jpeg依赖情况下,才可以满足条件:
所以,我们先编译一下jpg支持包:
在Linux上编译安装:
代码语言:txt复制wget 'https://www.ijg.org/files/jpegsrc.v9d.tar.gz'
tar -xf jpegsrc.v9d.tar.gz
cd jpeg-9d/
之后进行配置即可:
代码语言:txt复制./configure --prefix=/usr/jpeg
没问题后,进行安装:
代码语言:txt复制make && make install
1. 编译Nginx和PHP
已经在一篇文章、三种方法在Debian上轻松安装Nginx内讲过Nginx的编译部署,本次教程就不再赘述,直接开始编译PHP7.4。
首先是下载PHP7.4的源码,我们进入PHP的官网,可以找到下载地址,在Shell内,用wget进行下载:
代码语言:txt复制wget 'https://www.php.net/distributions/php-7.4.22.tar.gz'
之后,使用tar命令,对其解压并进入解压后的目录:
代码语言:txt复制tar -xf php-7.4.22.tar.gz
cd php-7.4.22/
需要模块:
- FPM:用来和Nginx配合交互
- with-jpg:gd前置,刚刚步骤0所编译
- gd:h5ai依赖
- exif:h5ai依赖
所以编译过程中需要添加:
代码语言:txt复制--enable-fpm --enable-exif --with-jpeg=/usr/jepg --enable-gd
注意:
--with-jpeg=/usr/jepg
指向刚刚编译出来的目录;如果你PHP版本<7.4
,那么--with-jpeg=/usr/jepg
需要改成--with-jpeg-dir=/usr/jepg
我的编译参数参考:
代码语言:txt复制apt-get install libsqlite3-dev
apt-get install libcurl4-openssl-dev
apt-get install libpng-dev
apt install libonig-dev
之后配置:
代码语言:txt复制./configure --prefix=/etc/php7 --with-curl --with-mysqli --with-openssl --with-pdo-mysql --enable-gd --enable-fpm --enable-bcmath --enable-xml --with-zip --enable-mbstring --enable-sockets --with-zlib --enable-fileinfo --enable-exif --with-jpeg=/usr/jepg --enable-gd
2. 启动FPM
之后,我们设置fpm配置文件,以及网站www.conf:
代码语言:txt复制cp /etc/php7/etc/php-fpm.conf.default /etc/php7/etc/php-fpm.conf
cp /etc/php7/etc/php-fpm.d/www.conf.default /etc/php7/etc/php-fpm.d/www.conf
这个是我编译PHP的设置,大家要根据自己编译情况进行更改。
最后,不要忘记更改/etc/php7/etc/php-fpm.d/www.conf
内user
和group
为有效用户、用户组
最后,启动FPM即可:
代码语言:txt复制# 我编译的路径是/etc/php7嗷
/etc/php7/sbin/php-fpm
3. 编辑Nginx配置
这个配置文件我不再赘述,我编译地址是/etc/nginx
,所以Nginx默认配置文件为/etc/nginx/nginx.conf
,在其中加入:
location ~ [^/].php(/|$)
{
# try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
include fastcgi.conf;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
其次,所指定的目录,一定要为FPM和Nginx运行用户可以写的(比如:我的www
用户):
顺便加上
/_h5ai/public/index.php
参数
这样设置,是因为h5ai的目录映射逻辑是:
代码语言:txt复制网站根目录
├─ _h5ai
├─ 你的其他文件1
└─ 你的其他文件1
这个时候,h5ai的自检就可以访问了:
进入后,依旧有些依赖需要修复:
4. 修复依赖
这几个依赖,简直不要太好修复。在Shell控制台,依此输入:
代码语言:txt复制# 安装FFmpeg库
sudo apt install ffmpeg
# 安装convert库(imagemagick提供)
sudo apt install imagemagick
# 安装zip库
sudo apt install zip
h5ai的自检就全绿了(和我的基金一样(。 ́︿ ̀。)):
5. 个性化更改
个性化设置,包括:
- 显示文件二维码
- 设置网站语言
- 设置多文件打包下载
这个我们另外在下面的大标题讲讲。
h5ai个性化设置
一般,h5ai的配置文件是:_h5ai/private/conf/options.json
。我们称这个为h5ai个性配置
,方便下文称呼。
依赖于PHP的JIT(及时编译),以下配置不需要重启PHP FPM服务或Nginx。
1. 设置中文
h5ai个性配置
中110n
为语言选项,可以选语言在_h5ai/private/conf/l10n
内,这里我们设置成中文,更改us为zh-cn:
"l10n": {
"enabled": true,
"lang": "zh-cn",
"useBrowserLang": true
},
2. 二维码
可以通过扫码的方式下载文件(其实就是文件直链生成二维码)。在配置文件中“info
”项为true时,激活(当前版本都是默认激活的了)。
"info": {
"enabled": true,
"show": true,
"qrcode": true,
"qrFill": "#999",
"qrBack": "#fff"
},
打开侧栏信息按钮后,把鼠标悬停在文件上就可以看见h5ai右侧显示文件类型和二维码,手机扫码就可以下载文件。
3. 复选打包
h5ai个性配置
中select
为复选功能,默认为开启:
"select": {
"enabled": true,
"clickndrag": true,
"checkboxes": true
},
复选打包,默认为tar
压缩包,如果想改为zip
压缩包,更改h5ai个性配置
中download
:
"download": {
"enabled": true,
"type": "shell-zip",
"packageName": null,
"alwaysVisible": false
},
其中,type可选:"php-tar", "shell-tar" or "shell-zip"。
4. 搜索
h5ai个性配置``中
search`为搜索功能,开启后即可搜索当前文件夹下的文件(递归式):
"search": {
"enabled": true,
"advanced": true,
"debounceTime": 300,
"ignorecase": true
},
END
本次h5ai目录映射的详解就到这里,如果想进一步自定义h5ai的其他样式,可以看h5ai官方文档,或者进入h5ai Github项目开源地址,使用node.js
进行编译。