最近重新弄了一下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很好安装,打开上面的项目主页,可以看到一个大大的版本号下载按钮,右键复制按钮的链接,通过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
开头,修改 enable
为 true
,可开启文件页眉/页脚备注,支持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篇》上的一个想法