之前一直在使用 ssh 来做文件存储与分享,因为 SSH 的特殊性,使用非常不便。便想建一个轻便的私人网盘。经过对开源私有云(ownCloud/nextCloud/kodExplorer/…)的查找、安装、卸载流程,最终留下了德国人 larsjung 开发的 h5ai。
更新:
- 2021-01-17 新增Caddy 2的配置
简介
h5ai 相对于其它私有云来说功能简单、体积轻便(1MB左右)、页面排版自动适应 PC 和移动端、支持包括中文在内的多语言显示,采用 NodeJs 框架开发,编译完成后为 PHP 程序。
h5ai 通过不同的视图来对服务器端的目录和文件进行查看。可以在线预览 PDF、文档、脚本(语言高亮)、图片、视频、下载(二维码)等等。
因为它重在文件索引与分享,所以不支持文件上传。
它有许多设置,可以对页面排版进行修改,如皮肤、侧边栏、搜索、下载,生成视频和图片缩略图等等。
作者提供的一个 Demo:H5ai - Demo
h5ai可以部署在 Apache / lighttpd / nginx / caddy 等等 Web 服务器上。
第一、WEB 环境和 H5ai 的准备
1、Web 环境
我们需要准备一个 WEB 环境,可以使用 Nginx、Lighttpd,Caddy, Apache 等等都可以。在这里,我们使用 Web 服务器界的新起之秀 Caddy。
- 安装 Caddy
- 安装 PHP
:~$ apt-get install php7.3-fpm php7.3-cgi php7.3-gd php7.3-json
2、h5ai 程序下载
h5ai 下载目录
v0.29.2,截止2019-09-22最新的正式版本。
v0.29.2+025~a1bb755,截止2019-09-22最新的开发版。
在这里,我们下载最新的开发版「v0.29.2+025~a1bb755」并解压至网站目录/var/www/
下。
:~$ 7z x h5ai-0.29.2+025~a1bb755.zip -o/var/www
第二、h5ai 的安装与部署
1、网站目录示意图
网站根目录
├──── _h5ai
├──── _h5ai ─── private
├──── _h5ai ─── public
├──── 分享的文件
├──── 分享的文件夹 ─── 分享的文件
└──── 分享的文件夹
将需要分享的文件放在网站根目录下即可,而 h5ai 程序全部在_h5ai
文件夹里。
程序默认 _h5ai
和 .
开头的文件不显示,可以修改配置options.json
文件来自定义不想分享的文件。
2、运行网站
h5ai 的index.php
不在根目录下,所以需要在服务器上指定它的路径。
- lighttptd,使用
index-file.names
来指定首页的路径。
index-file.names += ("/_h5ai/public/index.php")
- Caddy,使用
index
来指定首页的路径。
index "/_h5ai/public/index.php"
因为 h5ai 所有的 URI
都会在服务端重定向至 /_h5a/public/index.php
并由它来生成页面,所以在 Caddy 里使用 index
指定网站首页后,浏览我们的网站时会出现很多 404
错误。
这点在 lighttpd / nginx / apache 下默认自动修正了,所以不需要其它设置。
而 Caddy 与 PHP 存在一些兼容性问题,无法自动处理这个问题。所以这里需要而使用rewrite
指令来将所有的 URI
重写至 /_h5ai/public/index.php
。
假设我的网站域名为 www.shixuen.com
- Caddy V1的配置
:~$ cat >> /etc/caddy/Caddyfile <<EOF
www.shixuen.com:80 {
root /var/www
gzip
tls off
# index /_h5ai/public/index.php
fastcgi / /run/php/php7.3-fpm.sock php
rewrite {
# 将所有路径全部重写至首页
if {path} ends_with /
to /_h5ai/public/index.php
}
}
EOF
:~$ sudo systemctl start php7.3-fpm caddy
- Caddy V2的配置
:~$ cat > /etc/caddy/Caddyfile <<EOF
# -----------Global options---------------
# Note: This must be the first block of the Caddyfile
{
http_port 80
https_port 443
servers :443 {
protocol {
experimental_http3
}
}
servers :80 {
protocol {
allow_h2c
}
}
}
www.shixuen.com {
root * /var/www/h5ai
tls haven200@shixuen.com
file_server
php_fastcgi unix//run/php/php7.3-fpm.sock
# redirect to index.php with all request
@redirected {
not path /_h5ai/*
path */
}
rewrite @redirected /_h5ai/public/index.php
}
EOF
:~$ sudo systemctl start php7.3-fpm caddy
此时,在浏览器中输入网址 http://www.shixuen.com
即可浏览网站。
/run/php/php7.3-fpm.sock
即 php7.3-fpm 所绑定的网络端口,如果查找它?
:~$ netstat -anpl | grep php | grep LISTENING
unix 2 [ ACC ] STREAM LISTENING 816733 7346/php-fpm: pool /run/php/php7.3-fpm.sock
3、h5ai 环境与功能的自检
- 打开网址
http://www.shixuen.com/_h5ai/public/index.php
。
查看 h5ai 当前运行信息,即对当前运行环境与功能模块的自检结果。
默认密码为空,直接点击登录。
- 查看自我检测结果
- 绿色,即代表检测通过
- 红色,存在兼容性问题。如此处的
server software(服务器)
一栏 - 红色的no,即此功能缺失,需要安装依赖环境。
如此处的PDF thumbs(PDF缩略图)
,提示缺少convert(imagemagick)
程序,此功能为 PDF文档生成缩略图。
解决此问题只需在服务器安装imagemagick
:
:~$ apt-get install imagemagick
至此,我们私有云就布置完成了,可以为我们提供服务了。
第三、h5ai 的配置文件
h5ai 的配置文件为_h5ai/private/conf/options.json
,修改它对 h5ai 的功能进行增减。
1、功能自检页面的密码设置
/*
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
即 password hash 的缩写,它的值为密码经过 SHA512 hash 计算后的结果。
cf83e1357....da3e
这串字符为空字符的 SHA512 哈希值。
所以我们在上面 3、h5ai 环境与功能的自检 步骤里不用输入密码即可登录。
如何修改默认密码?
- 生成密码的 SHA512 hash 值。
- 将
cf83e1357....da3e
换成我们刚刚生成的 SHA512 值即可。
配置文件里给出的密码在线生成网址