搭建基于h5ai的文件共享空间:h5ai篇

最近重新弄了一下Minecraft的服务器,上次说到,HMCL启动器支持通过静态文件列表检查整合包完整性,实现自动更新的功能。

不过后续可能会分享更多的文件、图片等,NGINX自带的索引列表过于简陋,索性尝试一下热门的h5ai吧。于是,我基于h5ai搭建了本站的资源存放箱(File Cabinet)共享文件。

并且考虑到SFTP的速度很慢,实在不想上传几个文件还要打开WinSCP之类的运维工具,顺便也搭建了一个WebDAV服务端,用于管理上传的文件。后续再更新

在此之前我使用的是SSHFS-Win,就是下图这个,它可以在资源管理器(Explorer)挂载目录,类似于RaiDrive之类的第三方软件,不过它是自由免费的开源软件。奈何SFTP的文件传输效率还是太低了些……


安装h5ai

h5ai是一个基于PHP开发的文件共享索引程序,由德国人Lars Jung,全称是 HTML5 Apache Index,本是取代Apache自带的静态文件索引功能,不过也可以支持其他的Web服务器。

h5ai · modern HTTP web server index for Apache httpd, lighttpd, nginx and Cherokee · larsjung.de
modern HTTP web server index for Apache httpd, lighttpd, nginx and Cherokee
larsjung.de

h5ai很好安装,打开上面的项目主页,可以看到一个大大的版本号下载按钮,右键复制按钮的链接,通过wget就可以下载到服务器上。目前最新的版本号是0.30.0,用cd命令转到文件共享的虚拟主机(vhost)网站目录内下载并解压。

cd /var/www/[domain.ltd]/htdocs
wget https://release.larsjung.de/h5ai/h5ai-0.30.0.zip
unzip h5ai-0.30.0.zip

解压后会出现一个名为 _h5ai的文件夹,这是h5ai的程序目录,不过默认是隐藏的,下文会提到如何隐藏前缀文件。

然后编辑虚拟主机的配置文件,添加_h5ai路径的index.php索引程序:

root /var/www/[domain.ltd]/htdocs;

index index.php index.html /_h5ai/public/index.php;

location ~ .*\.(zip|ini|jar)?$ { 
     allow all; 
} 
...

由于我使用的Webinoly有安全模板限制,默认不能通过直链访问一些压缩包和可执行文件后缀的静态资源,因此也添加了特定的文件后缀赦免。

此时在浏览器中输入文件站的域名,在后方加入 /_h5ai/public/index.php/ 访问h5ai的自检(探针)页面,默认无密码就可以进入,编辑option文件添加访问密码。

根据自检页面的指示设定文件和目录的权限、安装需要的扩展等等。

一切就绪以后,h5ai就可以正常运行了。

配置h5ai

如果想达到上图域主的效果,还需要设定h5ai的配置。

h5ai的主要配置文件位于 _h5ai/private/conf/options.json ,可以设定的配置非常多,在此仅列出我主要修改的几项:

"view": {
    "binaryPrefix": false,
    "disableSidebar": false,
    "fallbackMode": false,
    "fastBrowsing": true,
    "fonts": ["Ubuntu", "Roboto", "Helvetica", "Arial", "sans-serif"],
    "fontsMono": ["Ubuntu Mono", "Monaco", "Lucida Sans Typewriter", "monospace"],
    "hidden": ["^\\.", "^_h5ai", "icon.ico"],
    "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",
    "unmanaged": ["index.html", "index.htm", "index.php"],
    "unmanagedInNewWindow": false
},

这里可以设置UI的显示模式、字体、隐藏文件、主题等等,比如hidden设置隐藏文件可以使用正则、也可以单独匹配文件名,这里我添加了 icon.ico 图标文件。

语言设置

"l10n": {
        "enabled": true,
        "lang": "zh-Hans",
        "useBrowserLang": true
 },

修改 lang 为简体中文 (zh-Hans) ,默认为英语 (en)。不过h5ai本身亦内置多种语言,useBrowserLang 可根据用户端浏览器自动切换显示的语言。

修改谷歌镜像

h5ai的界面默认使用Google Fonts,可以灵活更换字体,但在国内也可能会出现打不开的现象,好在可以替换成其他链接:

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

styles 中填写自定义字体的URL,使用Google Fonts的话可以把Ubuntu Mono换成其他的字体名称;

以及将 fonts.googleapis.com 替换为国内可用的字体镜像,比如 fonts.loli.net 的,这个是老生常谈了。

添加MD文件备注

还是在 options.json 中,找到 custom 开头,修改 enabletrue ,可开启文件页眉/页脚备注,支持Markdown和HTML格式。

"custom": {
"enabled": true,
"stopSearchingAtRoot": true
},

随后可在文件目录中添加 _h5ai.header.md(.html) 和 _h5ai.footer.md(.html) 文件

修改根目录标题

h5ai默认根目录标题显示为当前的域名,可以在 _h5ai/public/js/scripts.js 文件中修改自定义名称

找到PHP域名函数 ("/"===t?f.getDomain():n.name)

替换为自定义字符串 ("/"===t?'资源存放箱':n.name)

修改网页标题

网页标题 (Title) 位于 _h5ai/private/php/pages/index.php 文件中,以 <title> <title/> 开头/结尾的HTML代码:

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

此代码即为网页显示的标题,默认显示h5ai的版本、版权信息,可以将其替换成要显示的自定义文字。

需要在 options.json 关闭面包屑导航的动态标题功能。


域主顺便用Rclone搭建了额外的WebDAV文件传输和管理服务,天色已晚,待我吃完饭后,放到下篇再写……

嗯……如果在自己的服务器架设Jekyll、Hugo或Grav之类的Markdown博客引擎,也许可以用H5ai作为图床和视频站……

《搭建基于h5ai的文件共享空间:h5ai篇》上的一个想法

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注