快速搭建一个下载站:详解Linux上部署h5ai实现目录映射
作者:Mintimate
博客:https://www.mintimate.cn
Mintimate's Blog,只为与你分享
封面嗷H5AIH5AI,其实全称是:HTML5 Apache Index。最初是用来在Apache Web服务器上,完成资源映射,但是后来适配到Nginx等其他平台。使用H5AI的效果:
在树莓派上搭建特点其实,Nginx自带的autoindex可以满足绝大多数人的需求,使用autoindex配合fancyindex模块,可以满足:
文件搜索文件目录自动映射而使用h5ai,因为加上了PHP,可以在Nginx自带的autoindex上,新增:
更强大的文件搜索文件地址二维码生成多文件合并下载图片缩略图生成图片、视频在线浏览使用场景使用场景就很丰富了,
1. 内网使用内网设备上使用,以树莓派为例:配合Aria2,就是一个不错的下载器,甚至可以说是一个小型的NAS。
2. 公网使用公网设备上使用,以服务器为例。使用DNS解析二级或者是三级域名到Linux服务器上,用Nginx对域名进行分配,你可以随时分享服务器上的文件给你的朋友;当然,也可以作为离线下载(下载文件到服务器,使其解放本地资源,如:迅雷离线下载)后,回传本地的一种方式。
我现在就用腾讯云轻量应用服务器,作为自己的离线下载器。甚至用出了NAS的感觉~
安装前提在Linux上,需要:
NginxPHP7+本次教程,我就使用腾讯云轻量应用服务器进行演示。使用Debian系统:
使用Debian这样的轻量应用服务器,又多了新的功能~
PHP模块其中,PHP需要扩展模块:
EXIFGDPHP需要的模块Linux 依赖包Linux需要工具包:
JPEGzipffmpegconvertimagemagick宝塔搭建上次我发布投票,发现很多人的LEMP都是使用宝塔配置的,所以我这里也讲讲宝塔搭建的方法。
1. Nginx&PHP我们到宝塔的软件商店,下载PHP和Nginx,编译安装或者快速安装都可以,但是需要注意PHP的版本:
安装PHP和Nginx注意:安装PHP,需要2G以上的内存,如果你的服务器小于2G内存,可能安装不上(但是你可以通过增加swap以满足安装需求)
并允许使用putenv函数:
putenv函数2. 创建网站之后,我们点击网站--添加站点,按提示添加:
添加站点因为,h5ai的目录映射逻辑是:
代码语言:txt复制网站根目录
├─ _h5ai
├─ 你的其他文件1
└─ 你的其他文件1所以,上传h5ai文件到网站根目录,并解压:
解压后效果这个时候,我们就可以通过刚刚设置的域名(或IP)进行访问了:
访问“自检”如果你使用的是腾讯云轻量应用服务器的Debian,应该只有最后几项没过:
最后几项别急,我们下面来解决。
3. 修复依赖现在我们来修复依赖,首先是EXIF extension。我们使用宝塔自带的PHP工具,帮助我们动态编译:
动态编译EXIF安装了以后,不要忘记PHP的重载配置:
重载配置接下来几项,我们到Shell内操作:
腾讯云Web 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函数禁用一样)
完成上述步骤,自检就全部通过了:
h5ai自检4. 更改Nginx配置最后一步,就是修改网站配置文件,在宝塔内,选择网站-点击网站-配置文件,更改并添加/_h5ai/public/index.php到index内:
配置文件保存后,即可访问:
访问5. 个性化更改个性化设置,包括:
显示文件二维码设置网站语言设置多文件打包下载这个我们另外在后文起个大标题讲讲。
手动编译如果你的服务器,安装宝塔有困难,或者不想安装宝塔,这里我教大家手动编译Nginx和PHP,并配置h5ai。
0. 编译Jpeg libh5ai需要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 install1. 编译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-fpm3. 编辑Nginx配置这个配置文件我不再赘述,我编译地址是/etc/nginx,所以Nginx默认配置文件为/etc/nginx/nginx.conf,在其中加入:
代码语言:txt复制 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 ziph5ai的自检就全绿了(和我的基金一样(。 ́︿ ̀。)):
自检5. 个性化更改个性化设置,包括:
显示文件二维码设置网站语言设置多文件打包下载这个我们另外在下面的大标题讲讲。
h5ai个性化设置一般,h5ai的配置文件是:_h5ai/private/conf/options.json。我们称这个为h5ai个性配置,方便下文称呼。
依赖于PHP的JIT(及时编译),以下配置不需要重启PHP FPM服务或Nginx。
1. 设置中文h5ai个性配置中110n为语言选项,可以选语言在_h5ai/private/conf/l10n内,这里我们设置成中文,更改us为zh-cn:
代码语言:txt复制"l10n": {
"enabled": true,
"lang": "zh-cn",
"useBrowserLang": true
},更改结果2. 二维码可以通过扫码的方式下载文件(其实就是文件直链生成二维码)。在配置文件中“info”项为true时,激活(当前版本都是默认激活的了)。
代码语言:txt复制"info": {
"enabled": true,
"show": true,
"qrcode": true,
"qrFill": "#999",
"qrBack": "#fff"
}, 打开侧栏信息按钮后,把鼠标悬停在文件上就可以看见h5ai右侧显示文件类型和二维码,手机扫码就可以下载文件。
3. 复选打包h5ai个性配置中select为复选功能,默认为开启:
代码语言:txt复制"select": {
"enabled": true,
"clickndrag": true,
"checkboxes": true
}, 复选打包,默认为tar压缩包,如果想改为zip压缩包,更改h5ai个性配置中download:
代码语言:txt复制 "download": {
"enabled": true,
"type": "shell-zip",
"packageName": null,
"alwaysVisible": false
},其中,type可选:"php-tar", "shell-tar" or "shell-zip"。
4. 搜索h5ai个性配置``中search`为搜索功能,开启后即可搜索当前文件夹下的文件(递归式):
代码语言:txt复制"search": {
"enabled": true,
"advanced": true,
"debounceTime": 300,
"ignorecase": true
},END本次h5ai目录映射的详解就到这里,如果想进一步自定义h5ai的其他样式,可以看h5ai官方文档,或者进入h5ai Github项目开源地址,使用node.js进行编译。