thumbnail

前言

分享一些文件的时候,选择网盘是个头疼的事,最后选择搭建一个属于自己的网盘,分享一些自己收藏的软件和文件,不用注册,也没有下载限速问题。

目前个人站长用的较多的是AList程序,我也搭建过几次,免登录即可下载,也不限速,确实蛮不错的,而且支持的网盘也非常多。AList本身不保存文件,所有文件都在你自己注册的各个网盘里,他是把这些网盘整合在了一起,后台设置好对应的密码、刷新令牌、Cookie、key这些数据后,来读取你网盘的目录列表,把你自己网盘的文件在前端展示出来。

在使用AList过程中,也遇到过几次问题,好几次首页都是failed get objs:failed to list objs的错误提示,因为刷新令牌这类数值并不能保证永久有效,而且每次获取令牌数据的过程也很麻烦,想想还是算了。

最后选择了H5ai这个超轻量级项目(源码只有132kb),现在的服务器有200G硬盘,也够我分享一些收藏的文件和软件了,测试了一下网速,上传和下载也不限速。h5ai之前也搭建过几次,整个部署过程和美化过程还是很繁琐的,值得记录一下。

一、部署H5ai

宝塔面板部署NMP

部署h5ai之前,先要在服务器安装宝塔面板,然后在面板的软件商店安装Nginx+MySQL+PHP7.3

PHP配置

1、安装php扩展:fileinfo、imagemagick、exif

操作路径:宝塔面板 - 软件商店 - PHP7.3 - 设置 - 安装扩展:fileinfo、imagemagick、exif

2、禁用php函数:exec、passthru、scandir、putenv

操作路径:宝塔面板 - 软件商店 - PHP7.3 - 设置 - 禁用函数:找到以上4个函数,点击右侧的删除

3、安装Movie thumbs (ffmpeg)

用SSH工具(推荐Putty、Xshell 7)连接服务器的root账号,安装ffmpeg

#x86_64下载二进制文件
wget https://www.moerats.com/usr/down/ffmpeg/ffmpeg-git-64bit-static.tar.xz
#解压文件
tar xvf ffmpeg-git-64bit-static.tar.xz
#删除压缩包
rm -rf ffmpeg-git-64bit-static.tar.xz
#将可执行文件移至/usr/bin
mv ffmpeg-git-20180831-64bit-static/ffmpeg ffmpeg-git-20180831-64bit-static/ffprobe /usr/bin/

宝塔面板添加站点

1、添加站点

操作路径:宝塔面板 - 网站 - 添加站点:域名要填一下,PHP版本选择PHP-7.3,其他默认即可。

2、设置网站默认文档

操作路径:宝塔面板 - 网站 - 设置 - 默认文档:添加/_h5ai/public/index.php,记得点击添加。

部署H5ai

先了解一下H5ai的网站目录树结构

网站根目录

├─ _h5ai

├─ _h5ai ─ private

├─ _h5ai ─ public

├─ 展示文件

├─ 展示文件夹

└─ 展示文件夹 ─ 展示文件

1、下载h5ai压缩包

下载最新版的源码h5ai-0.30.0.zip,官方下载地址:https://release.larsjung.de/h5ai/

本站搭建的h5ai修改版下载:https://pan.zzzz.ooo/h5ai/,具体修改详见文末说明。

2、上传压缩包到服务器,设置目录权限

用宝塔面板把压缩包上传到网站根目录,解压文件,然后进入/_h5ai/目录,把privatepublic文件夹的权限设置为777。

3、查看功能自检页面

访问:你的域名/_h5ai/public/index.php,可以查看网站相关信息。初始密码为空,点击login直接进入自检页面。

自检页面如果还有功能是no的状态,请回到上面PHP配置设置,检查是否有遗漏。

配置H5ai

1、设置功能自检页面访问密码

功能自检访问地址:你的域名/_h5ai/public/index.php,上面说过了。

密码修改路径:_h5ai/private/conf/options.json,开头就是密码部分,下面是默认配置。

/*
Password hash.
SHA512 hash of the info page password, the preset password is the empty string.
Online hash generator: https://md5hashing.net/hash/sha512
*/
"passhash": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e",

需要修改就是"passhash"的值,它的值是经过 SHA512 hash 计算后的结果,这里的默认值是空值,所以在最开始功能自检页面不用输入密码,直接点击就能登录。

打开哈希值加密工具:https://www.lddgo.net/encrypt/hash,对想要设置的密码进行加密,注意哈希算法选择SHA512,然后把计算后的结果黏贴到上面的文件里面,替换掉原来的值就行。

2、设置/_h5ai/private目录访问返回404

操作路径:宝塔面板 - 网站 - 点击你的域名 - 配置文件:添加下面的内容即可。注意一下格式,对齐保持一致。

location = /_h5ai/private/
{
return 404;
}

3、设置网站访问密码

a.全局式密码

即访问网站需要先登录账号密码才能查看。

修改文件路径:/你的域名/_h5ai/public/index.php,将下面内容添加到末尾。

function auth () {
$valid_passwords = array ("账号" => "密码");
$valid_users = array_keys($valid_passwords);
$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
$validated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);
if (!$validated) {
header('WWW-Authenticate: Basic realm="Storage Server"');
header('HTTP/1.0 401 Unauthorized');
die ("Your permission is denied!");
}
}
auth();

修改代码内的“账号”和“密码”即可。

b.局部式密码

即可以针对某个文件夹进行加密访问,我这里采用了nignx的官方认证方式。

1.用宝塔面板在/www/wwwroot/目录下新建一个htpasswd文件(无任何后缀)

2.打开htpasswd加密工具:https://www.bejson.com/encrypt/htpasswd/,输入用户名和密码,注意选择Crypt算法,点击生成。然后把生成的字符串内容复制到上面新建的htpasswd文件。

3.修改网站配置文件

操作路径:宝塔面板 - 网站 - 点击你的域名 - 配置文件:添加下面的内容即可。

location ~ /图片收藏
{
auth_basic "please login!";
auth_basic_user_file /www/wwwroot/htpasswd;
}

/nvPress/图片收藏就是我设置的加密的文件夹。

二、功能设置和界面美化

基础功能设置

H5ai基本设置的配置文件路径是:你的域名/_h5ai/private/conf/options.json

1、设置默认语言。 找到“l10n”,将en改为zh-cn。

"l10n": {
"enabled": true, //是否允许更改界面语言
"lang": "en", //默认界面语言,en 为英文,zh-cn 为中文简体,zh-tw 为中文繁体。
"useBrowserLang": true //是否根据浏览器的语言来自动调整界面语言。
},

2、开启文件搜索功能。 找到“search”,将false改为true。

设置好后,网页左上角会有搜索按钮。

"search": {
"enabled": true,
"advanced": true,
"debounceTime": 300,
"ignorecase": true
},

3、打包下载功能

找到“download”,将false改为true,如果需要设置打包文件的格式为zip,则修改type的值为shell-zip。

"download": {
"enabled": false, //是否允许下载文件
"type": "php-tar", //选择压缩方式。php-tar使用php内置功能来下载文件,多线程,可以同时下载多个文件。shell-tar使用外部tar程序来下载文件,单线程,同一时间只能下载一个文件。shell-zip使用外部zip程序来下载文件,单线程,同一时间只能下载一个文件。
"packageName": null, //默认压缩包名称,为 null 时压缩包名称当前文件夹的名称,
"alwaysVisible": false //下载按钮是否动态显示(只能选中文件后显示)。
},

多文件选择设置,即复选框☑️,找到“select”,将false改为true。

"select": {
"enabled": true, //是否允许文件选择,如果禁止文件选择,那么文件就无法下载。
"clickndrag": true, //是否允许左键拖动来进行文件多选。
"checkboxes": false //当鼠标悬浮在文件名上时是否显示选择框。
},

4、显示文件信息与二维码下载

找到"info",将false改为true。H5ai可以通过扫码的方式下载文件。打开后,网页右侧显示文件类型和二维码,手机扫码即可下载。

"info": {
"enabled": false, //是否显示右侧边栏(详情栏)。
"show": false, //是否一直显示右侧边栏。
"qrcode": true, //是否在右侧边栏生成下载链接的二维码以方便移动端下载。
"qrFill": "#999",
"qrBack": "#fff"
},

5、字体加速,替换google字体库为本地加载

由于h5ai是直接引用的google字体库,而google字体在国内的访问速度较慢,建议修改为国内第3方加速的google字库或者替换为本地字库。

下面是替换为本地加载的方法:

a.下载Google字体:

下载链接

b.上传到:你的域名/_h5ai/pluble/文件夹下面,直接解压,替换到原来的ext文件夹内容即可。

c.配置文件:你的域名/_h5ai/private/conf/options.json,找到"resources",替换成fonts.google.css,设置为本地加载

"resources": {
"scripts": [],
"styles": [
"//http://fonts.googleapis.com/css?family=Ubuntu:300,400,700%7CUbuntu+Mono:400,700"
]
},

6、view功能说明

"view": {
"binaryPrefix": false,
"disableSidebar": true, //是否显示左侧边栏(功能栏)
"fallbackMode": false,
"fastBrowsing": true,
"fonts": ["Ubuntu", "Roboto", "Helvetica", "Arial", "sans-serif"],
"fontsMono": ["Ubuntu Mono", "Monaco", "Lucida Sans Typewriter", "monospace"],
"hidden": ["^\\.", "^_h5ai"], //此参数可以指定文件夹列表里隐藏哪些文件,可以使用正则来匹配文件名称。
"hideFolders": false,
"hideIf403": true,
"hideParentFolder": false,
"maxIconSize": 40,
"modes": ["details", "grid", "icons"],
"modeToggle": false,
"setParentFolderLabels": true,
"sizes": [20, 40, 60, 80, 100, 140, 180, 220, 260, 300],
"theme": "comity", //图标选择有default和comity两种
"unmanaged": ["index.html", "index.htm", "index.php"], //如果某个文件夹里包含数组里的文件,则将拒绝显示此文件夹里的所有内容。
"unmanagedInNewWindow": false
},

hidden详细说明

  • ^\.:隐藏名称以 . 开头的文件,如 .htaccess,.gitignor 等等。
  • ^_h5ai:隐藏名称以 _h5ai 开头的文件或文件夹,如 _h5ai,_h5ai.header.html 等等。
  • ^:隐藏名称以开头的文件或文件夹,如tmp,__aaa等等。
  • \.sh$:隐藏名称以.sh结尾的文件或文件夹,如 bash.sh,scripts.sh 等等。
  • ^robots.txt:隐藏名称以 robots.txt 开头的文件或文件夹,如 robots.txt, robots.txt.bak 等等。
  • hideFolders:是否在文件列表中只显示文件而隐藏文件夹。
  • theme:默认的文件类型图标,_h5ai/public/images/theme 里的每个文件夹都是一种图标,默认带了 2 套,另一套图标名为 comity。

界面美化修改

1、页眉和页脚

为 h5ai 添加页眉和页脚,只需要在对应目录下放置好 _h5ai.header(s).html(页眉) 或 _h5ai.footer(s).html(页脚)即可,设置将应用于该目录或该目录的所有子目录。

同时H5ai支持Markdown格式页面,可以放置 _h5ai.header(s).md 和 _h5ai.footer(s).md 。

不同文件名称以及不同的存放位置会呈现不同的效果:

只在当前目录显示

页眉:_h5ai.header.html

页脚:_h5ai.footer.html

在当前及子目录显示

页眉:_h5ai.headers.html

页脚:_h5ai.footers.html

a.页眉

在文件夹下新建 _h5ai.header.html,下面是我的示例。

<h2 style="text-align:center">我的私人网盘</h2>

b.页脚

在文件夹下新建 _h5ai.footer.html,下面是我的示例。

<p style="text-align:center">
本站发布的资源来源于网络,版权争议与本站无关,仅作为自己收藏学习和研究所用,不得将资源下载后用于商业或者非法用途,访问和下载本站内容,说明您已同意上述条款。
</p>

2、修改网站标题

a.先修改配置文件options.json中的title部分内容为false

/*
Replace window title with current breadcrumb.
*/
"title": {
"enabled": false //默认是true,改为false
},

b.修改 _h5ai/private/php/pages/index.php 文件

<title>index - powered by h5ai v0.29.2 (https://larsjung.de/h5ai/)</title>

先找到上面 找到这部分内容,再替换title中间部分内容,修改后浏览器标签页就会变了。

3、修改首页默认的域名显示

修改 _h5ai/public/js/scripts.js 文件,Ctrl+F搜索 下面内容

"/"===t?p.getDomain():n.name

修改替换 p.getDomain() 为'你想显示的内容',示例修改如下:

"/"===t?'我的网盘':n.name

4、修改右上角版权信息

建议保留这部分版权信息,只是作为学习参考资料。

修改 _h5ai/public/js/scripts.js 文件,Ctrl+F搜索 下面内容进行修改

<a id="backlink" href="https://larsjung.de/h5ai/" title="powered by h5ai - https://larsjung.de/h5ai/">\n <div>powered</div>\n <div>by h5ai</div>\n </a>\n

示例修改如下:

<a id="backlink" href="https://pan.zzzz.000/" title="pan.zzzz.ooo - https://pan.zzzz.ooo/">\n <div>pan.zzzz.ooo</div>\n <div>Cloud</div>\n </a>\n

H5ai相关资源下载

下载地址:https://pan.zzzz.ooo/h5ai/

其实也没什么大的修改,就是上面文中提到就几个配置的开关,只要完整的走一遍上面的修改过程,自己就能轻松搞定。

最大的修改应该就是集成了google字体本地加载了。

修改内容:(修改的地方下面图片已标注)
  • 左上角开启文件搜索功能
  • 开启了文件复选框功能
  • 开启了文件打包下载功能
  • 增加了全局显示的页眉文件
  • 增加了全局显示的页脚文件
  • 关闭了左侧功能栏的显示
  • 右侧显示文件信息和二维码下载
  • 更改默认语言为简体中文
  • 替换google字体为本地加载

浏览器网站标题 tetle默认显示域名,首页顶部默认显示域名,左侧菜单栏根目录默认显示域名,还有右上角保留了版权信息。如果这4处信息需要修改,请自行参照上面的界面美化部分进行修改。