快速搭建一个下载站:详解Linux上部署h5ai实现目录映射

2021-08-04 14:17:55 浏览数 (1)

作者: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系统:

使用Debian使用Debian

这样的轻量应用服务器,又多了新的功能~

PHP模块

其中,PHP需要扩展模块:

  • EXIF
  • GD
PHP需要的模块PHP需要的模块

Linux 依赖包

Linux需要工具包:

  • JPEG
  • zip
  • ffmpeg
  • convert
  • imagemagick

宝塔搭建

上次我发布投票,发现很多人的LEMP都是使用宝塔配置的,所以我这里也讲讲宝塔搭建的方法。

1. Nginx&PHP

我们到宝塔的软件商店,下载PHP和Nginx,编译安装或者快速安装都可以,但是需要注意PHP的版本:

安装PHP和Nginx安装PHP和Nginx

注意:安装PHP,需要2G以上的内存,如果你的服务器小于2G内存,可能安装不上(但是你可以通过增加swap以满足安装需求)

并允许使用putenv函数:

putenv函数putenv函数

2. 创建网站

之后,我们点击网站--添加站点,按提示添加:

添加站点添加站点

因为,h5ai的目录映射逻辑是:

代码语言:txt复制
网站根目录
 ├─ _h5ai
 ├─ 你的其他文件1
 └─ 你的其他文件1

所以,上传h5ai文件到网站根目录,并解压:

解压后效果解压后效果

这个时候,我们就可以通过刚刚设置的域名(或IP)进行访问了:

访问“自检”访问“自检”

如果你使用的是腾讯云轻量应用服务器的Debian,应该只有最后几项没过:

最后几项最后几项

别急,我们下面来解决。

3. 修复依赖

现在我们来修复依赖,首先是EXIF extension。我们使用宝塔自带的PHP工具,帮助我们动态编译:

动态编译EXIF动态编译EXIF

安装了以后,不要忘记PHP的重载配置:

重载配置重载配置

接下来几项,我们到Shell内操作:

腾讯云Web 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自检h5ai自检

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.confusergroup为有效用户、用户组

更改为有效用户组更改为有效用户组

最后,启动FPM即可:

代码语言:txt复制
# 我编译的路径是/etc/php7嗷
/etc/php7/sbin/php-fpm

3. 编辑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 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:

代码语言: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进行编译。

0 人点赞