说明:比较推荐,通过openlist上传的文件可以在系统中正常查看,在系统内创建的文件也会显示在openlist中,在openlist中无法看到磁盘使用情况,可以挂载其他网盘
1 安装openlist
1.1 下载openlist
wget https://github.com/OpenListTeam/OpenList/releases/latest/download/openlist-linux-amd64.tar.gz
#https://github.com/OpenListTeam/OpenList/releases 查看最新版本
tar -zxvf openlist-linux-amd64.tar.gz
1.2 设置安装路径
#必须建立openlist目录,因为移动过去的openlist只是一个文件,运行openlist会在当前目录生成文件
mkdir -p /app/openlist
mv openlist /app/openlist
chmod +x /app/openlist/openlist
1.3 启动程序
一定要在/app/openlist
目录下启动程序,这样openlist的data
目录才会在/app/openlist
下生成。
cd /app/openlist
./openlist admin
./openlist server
当你看到 {start server@0.0.0.0:5244} 的输出,之后没有报错,说明操作成功。 第一次运行时会输出初始密码。程序默认监听 5244 端口。 现在打开 {http://ip:5244} 可以看到登录页面
如果忘记密码可以用以下命令重置密码,修改密码之前要先停止openlist程序
#./openlist admin random
1.4 守护进程
创建用户和组
groupadd --system openlist
useradd --system \
--gid openlist \
--create-home \
--shell /usr/sbin/nologin \
--comment "openlist" \
openlist
#--system 创建系统用户,系统账户的用户id一般是小于一千的;其实就是给UID一个确定的代号,它不能用于登录,一般是给程序来使用;
#--gid 加入到指定组
#--create-home 其实这是一个临时开关,表示如果不存在用户主目录,则生成用户主目录(/home/[用户名])
#--shell /usr/sbin/nologin 拒绝用户登录
#--comment 加上备注文字
#openlist 要创建的组名和用户名
编辑 /etc/systemd/system/openlist.service
nano /etc/systemd/system/openlist.service
添加如下内容
[Unit]
Description=openlist
After=network.target
[Service]
User=openlist
Group=openlist
Type=simple
WorkingDirectory=/app/openlist
ExecStart=/app/openlist/openlist server
Restart=on-failure
[Install]
WantedBy=multi-user.target
设置权限
chown -R openlist:openlist /app/openlist
#本地存储权限
chown -R openlist:openlist /html/网盘
开机自启
systemctl daemon-reload
systemctl enable openlist
启动
systemctl start openlist
查看状态
systemctl status openlist
1.5 修改端口
nano /app/openlist/data/config.json
重启程序
systemctl restart openlist
systemctl status openlist
2 配置反代
2.1 申请证书
#nginx -s stop
systemctl stop nginx
apt-get install socat curl cron
curl https://get.acme.sh | sh
#证书申请
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
~/.acme.sh/acme.sh --issue -d www.kkiikk.top --standalone -k ec-256 --force --test
rm -rf ~/.acme.sh/www.kkiikk.top_ecc
#以上是测试
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
~/.acme.sh/acme.sh --issue -d www.kkiikk.top --standalone -k ec-256 --force
mkdir /etc/nginx/ssl/
~/.acme.sh/acme.sh --installcert -d www.kkiikk.top --fullchainpath /etc/nginx/ssl/www.kkiikk.top.crt --keypath /etc/nginx/ssl/www.kkiikk.top.key --ecc --force
2.2 配置nginx
nginx.conf配置
nano /etc/nginx/conf/nginx.conf
#nano /etc/nginx/nginx.conf
编辑nginx.conf
user www-data;
worker_processes auto;
error_log /etc/nginx/error.log warn;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/conf/mime.types; #注意路径,必须写,否则可能造成css无法加载
#include /etc/nginx/mime.types; #注意路径,必须写,否则可能造成css无法加载
default_type application/octet-stream;
log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" '
'\$status \$body_bytes_sent "\$http_referer" '
'"\$http_user_agent" "\$http_x_forwarded_for"';
access_log /etc/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 120;
client_max_body_size 20m;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
www.conf配置
nano /etc/nginx/conf.d/www.conf
编辑www.conf
server {
listen 443 ssl;
listen [::]:443 ssl; #没有ipv6的话要注释掉这行
server_name www.kkiikk.top;
ssl_certificate /etc/nginx/ssl/www.kkiikk.top.crt;
ssl_certificate_key /etc/nginx/ssl/www.kkiikk.top.key;
# 支持 TLS1.2 和 TLS1.3(兼容更多客户端)
ssl_protocols TLSv1.2 TLSv1.3;
# 供 TLS1.2 使用的强加密套件,TLS1.3 由 OpenSSL 自行处理
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_pass http://127.0.0.1:55245;
# the max size of file to upload
client_max_body_size 20000m;
}
# Config for 0-RTT in TLSv1.3
ssl_early_data on;
proxy_set_header Early-Data $ssl_early_data;
add_header Strict-Transport-Security "max-age=31536000";
}
server {
listen 80;
listen [::]:80; #没有ipv6的话要注释掉这行
server_name www.kkiikk.top kkiikk.top;
return 301 https://www.kkiikk.top$request_uri;
}
server {
listen 443;
listen [::]:443; #没有ipv6的话要注释掉这行
server_name kkiikk.top;
return 301 https://www.kkiikk.top$request_uri;
}
重启nginx
systemctl restart nginx
关闭允许挂载
将绝对路径填写到根文件夹路径
下面
2.4 以https方式转发OpenList,设置证书权限
创建组(若已存在不会报错)
groupadd -f ssl-cert
把私钥设为 root:ssl-cert,权限 640;证书设为 root:root 644(证书通常可公开读)
chown root:ssl-cert /etc/nginx/ssl/www.mydisk2.com.key
chmod 640 /etc/nginx/ssl/www.mydisk2.com.key
chown root:root /etc/nginx/ssl/www.mydisk2.com.crt
chmod 644 /etc/nginx/ssl/www.mydisk2.com.crt
把需要读取私钥的用户加入 ssl-cert(加入 openlist,以及 nginx 运行用户)
usermod -aG ssl-cert openlist
# 假设 nginx 运行用户是 www-data(若不是,请替换成实际用户)
usermod -aG ssl-cert www-data
确保目录允许进入(组可执行),否则即使文件权限正确也无法读取
chown root:ssl-cert /etc/nginx/ssl
chmod 750 /etc/nginx/ssl
重启相关服务使组成员关系生效(让服务进程继承新组)
systemctl restart nginx
systemctl restart openlist
2.5 Nginx转发OpenList的conf配置
upstream kkiikk_upstream {
#注意kkiikk_upstream可以任意命名,但不同conf中的名称不能相同
server www.kkiikk.top:5244;
keepalive 64;
}
server {
listen 443 ssl http2; # HTTP/2 可提升 TLS 客户端连接复用(视客户端支持)
server_name is.kkiikk.top;
ssl_certificate /etc/nginx/ssl/is.kkiikk.top.crt;
ssl_certificate_key /etc/nginx/ssl/is.kkiikk.top.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 如果你确实想使用 0-RTT,请确保 upstream 支持并了解风险。默认先关:
ssl_early_data off;
# 建议把上传大小限制放在 server 级别,避免不同 location 冲突
client_max_body_size 100G; # 允许最大上传 100G,按需调整;设为 0 表示无限制(慎用)
client_body_timeout 3600s;
client_header_timeout 60s;
client_body_buffer_size 256k;
location / {
proxy_pass https://kkiikk_upstream; # 使用 upstream 保持连接复用
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
# 流式传输,避免写磁盘临时文件
proxy_buffering off;
proxy_request_buffering off;
proxy_max_temp_file_size 0;
# 超时设置适当延长,避免大文件下载中断
proxy_connect_timeout 10s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
# 如果你的 upstream 是 HTTPS,确保 SSL session reuse 开启(nginx 默认通常开启)
proxy_ssl_session_reuse on;
}
}
3 美化及显示磁盘容量
3.1 openlist美化设置
在openlist根目录中新建本地磁盘空间.txt
文件
在'设置'-'全局'-'自定义内容'内输入以下内容,将xhttp.open
后面修改为TXT的下载地址
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--以下是禁止缓存,否则磁盘容量不会及时更新-->
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<!--1.延迟加载,以下内容都要放到延迟加载内-->
<div id="customize" style="display: none;">
<!--2.显示txt内容-->
<div id="content" style="text-align: center ; "></div>
<!--3.隐藏版权、管理,移除搜索栏中的键盘图标-->
<style>
/*隐藏版权*/
.footer span,.footer a:nth-of-type(1){
display:none;
}
/*隐藏管理字眼*/
.footer span,.footer a:nth-of-type(2){
display:none;
}
/*移除搜索栏中的键盘图*/
.hope-stack.hope-c-dhzjXW.hope-c-PJLV.hope-c-PJLV-ihYBJPK-css {
display: none !important;
}
</style>
<!-- 4.增加底部文字 -->
<div style="text-align: center ; ">
<p align="center">
<a target="_blank" href="https://openlist.nn.ci/zh/" > © Powered by openlist</a>
<span>|</span>
<a target="_blank" href="/@manage" >管理</a>
</p>
</div>
</div>
<!--下面是配套的JS-->
<!--1.延迟加载配套使用JS-->
<script>
let interval = setInterval(() => {
if (document.querySelector(".footer")) {
document.querySelector("#customize").style.display = "";
clearInterval(interval);
}
}, 200);
</script>
<!--2.显示txt内容配套使用JS-->
<script>
// 创建 XMLHttpRequest 对象
var xhttp = new XMLHttpRequest();
// 设置请求方式和文件路径,注意此处的网址为TXT文件的下载地址
xhttp.open("GET", "https://www.网址.com/xx.txt", true);
// 定义请求完成时的回调函数
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// 将读取的文本内容存储到变量中
var text = this.responseText;
// 将文本内容插入到 HTML 页面中
document.getElementById("content").innerHTML = text;
}
};
// 发送请求
xhttp.send();
</script>
</head>
3.2 显示磁盘容量设置
3.2.1 创建sh文件
nano /app/openlist/显示磁盘剩余空间.sh
输入以下内容
#!/bin/bash
all=$(df -h | grep -w /dev/vda1 | awk '{ print $2 }') #注意将/dev/vda1修改为当前磁盘的路径 -w为完全匹配,避免返回多个结果
free=$(df -h | grep -w /dev/vda1 | awk '{ print $4 }') #注意将/dev/vda1修改为当前磁盘的路径 -w为完全匹配,避免返回多个结果
if [ ${free}x != $(awk '{print $2}' /html/网盘/本地磁盘空间.txt)x ]
then
sed -i "1c 本地磁盘可用空间: ${free} / ${all}" /html/网盘/本地磁盘空间.txt #此处是前面建立的存储磁盘容量信息的TXT文件的路径
fi
给与权限
chmod +x /app/openlist/显示磁盘剩余空间.sh
3.2.2 设置定时器
1、创建服务
nano /etc/systemd/system/checkspace.service
写入以下内容
[Unit]
Description=Check Space
After=network.target
[Service]
Type=simple
ExecStart=/app/openlist/显示磁盘剩余空间.sh
2、创建定时器
nano /etc/systemd/system/checkspace.timer
输入以下内容
注意:OnUnitActiveSec的单位为秒
[Unit]
Description=CheckSpaceTimer
[Timer]
OnBootSec=1
OnUnitActiveSec=20
Unit=checkspace.service
[Install]
WantedBy=multi-user.target
3、将定时器加入自启动
systemctl daemon-reload
systemctl enable checkspace.timer
systemctl start checkspace.timer
可以在设置
-全局
-隐藏文件
中加入/\/本地磁盘空间.txt/i
来隐藏TXT文件
可以在设置
-源信息
-隐藏
中加入^文件夹名称$
来隐藏文件夹,在用户
中关闭可以看到隐藏
选项。如果是将^文件夹名称$
直接复制过去的话,需要回车,否则可能不生效。
4 安装epub.js和pdf.js
4.1 安装epub.js
4.1.1 在openlist文件夹下创建epub文件夹
mkdir /app/openlist/epub_js
cd /app/openlist/epub_js
4.1.2 下载jszip.min.js
、epub.min.js
、examples.css
、spreads.html
wget https://cdnjs.cloudflare.com/ajax/libs/jszip/3.5.0/jszip.min.js
wget https://github.com/futurepress/epub.js/releases/download/v0.3.88/epub.min.js
wget https://raw.githubusercontent.com/futurepress/epub.js/master/examples/examples.css
wget https://raw.githubusercontent.com/futurepress/epub.js/master/examples/spreads.html
4.1.3 修改spreads.html
文件
nano spreads.html
第一部分
找到下面内容:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.5/jszip.min.js"></script>
<script src="../dist/epub.js"></script>
<link rel="stylesheet" type="text/css" href="examples.css">
修改为:
<script src="./jszip.min.js"></script>
<script src="./epub.min.js"></script>
<link rel="stylesheet" type="text/css" href="examples.css">
第二部分
找到下面的内容:
var params = URLSearchParams && new URLSearchParams(document.location.search.substring(1));
var url = params && params.get("url") && decodeURIComponent(params.get("url"));
var currentSectionIndex = (params && params.get("loc")) ? params.get("loc") : undefined;
var book = ePub(url || "https://s3.amazonaws.com/moby-dick/moby-dick.epub");
修改为:
var params = URLSearchParams && new URLSearchParams(document.location.search.substring(1));
var currentURL = window.location.href;
var urlPrefix = "https://网址.com/epub_js/spreads.html?url=";
var url = currentURL.substring(urlPrefix.length);
var currentSectionIndex = (params && params.get("loc")) ? params.get("loc") : undefined;
let blob = fetch(url).then((res) => res.blob());
var book = ePub(blob.then((blob) => blob.arrayBuffer()), {
restore: true,
reload: true,
spreads: true
});
4.1.4 修改epub页面大小
修改spreads.html文件
nano spreads.html
找到
height: 600,
修改为
height: "100%",
修改examples.css文件
nano examples.css
修改#viewer.spreads
内的内容
width: 90%;
height: 90%;
4.1.5 设置反代
将如下内容添加到nginx的conf
root /app/openlist;
location /epub_js/ {}
重启nginx
systemctl restart nginx
4.1.6 修改openlist预览设置
在原预览设置的json文件内添加如下键值对,注意修改网址.com
为你自己的openlist域名,注意是https还是http。
"epub": {
"epub.js":"https://网址.com/epub_js/spreads.html?url=$url"
},
4.2 安装pdf.js
4.2.1 建立pdf文件夹
mkdir /app/openlist/pdf_js
cd /app/openlist/pdf_js
4.2.2 下载
wget https://github.com/mozilla/pdf.js/releases/download/v3.9.179/pdfjs-3.9.179-dist.zip
unzip pdfjs*.zip
rm -rf pdfjs*
4.2.3 设置反代
nano /etc/nginx/conf.d/www.conf
加入以下内容:
root /app/openlist;
location /pdf_js/ {}
重启nginx
systemctl restart nginx
4.2.4 测试pdf.js
https://自己网站的网址.com/pdf_js/web/viewer.html
4.2.5 修改openlist预览设置
在原预览设置的json文件内添加如下键值对,注意修改网址.com
为你自己的openlist域名,注意是https还是http。
"pdf": {
"PDF.js":"https://网址.com/pdf_js/web/viewer.html?file=$e_url"
},