个人网盘搭建


张登友,张登友的博客,张登友的网站——

由于之前的网盘不支持上传功能,现项目已更换为JmalCloud ,同时记录下部署记录

JmalCloud私有网盘

官方文档介绍

JmalCloud 是一款私有云存储网盘项目,能够简单安全管理您的云端文件

✅ 支持图片,音频,视频等文件的在线预览

✅ 提供强大的在线文本编辑器

✅ 支持超大文件上传,断点续传

✅ 支持webDAV

Docker部署

/www/jmalcloud-docker 是我自定义的文件存储位置

docker run --restart=always --name jmalcloud -p 7070:80 -p 7071:8080 -p 7072:8088 -v /www/jmalcloud-docker/files/:/jmalcloud/files/ -v /www/jmalcloud-docker/db/:/data/db/ -d registry.cn-guangzhou.aliyuncs.com/jmalcloud/jmalcloud:latest
启动参数说明 : 
暴露端口 : 
`80` : 网盘入口
`8080` : 博客入口
`8088` : 网盘服务入口
磁盘映射 :
`/jmalcloud/files/` : 网盘文件存储目录
`/data/db/` : mongodb数据存储目录

此时可通过IP地址+7070端口访问服务

NGINX反向代理域名访问

在NGINX的字段添加以下字段
server {
      listen 80;
      server_name  localhost;

      location / {
              proxy_pass   http://localhost:7070;
              proxy_set_header Host $proxy_host;
              #下边是为获取真实IP所做的设置
              proxy_set_header X-real-ip $remote_addr;
              proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
              proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;
              proxy_set_header    X-Forwarded-Proto $scheme;
              proxy_redirect      default;
      }

      location /mq {
              proxy_pass   http://localhost:7070/mq/;
              #websocket额外配置开始
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection "upgrade";
              proxy_connect_timeout 60s;#l连接超时时间,不能设置太长会浪费连接资源
              proxy_read_timeout 500s;#读超时时间
              proxy_send_timeout 500s;#写超时时间
              #websocket额外配置结束
      }
}
完整配置

如果需要强制重定向到https域名,需要添加字段location / {}字段添加return 301 https://$host$request_uri;

server
    {
        listen 80;
        #listen [::]:80;
        server_name pan.zdynb.cn ;
	return 301 https://pan.zdynb.cn$request_uri;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /www/jmalcloud-docker/dist; #若无法访问则需要去项目地址下载release解压并添加静态文件目录
        location / {
										return 301 https://$host$request_uri; #强制跳转到https
                    proxy_pass   http://localhost:7070;
                    proxy_set_header Host $proxy_host;
                    #下边是为获取真实IP所做的设置
                    proxy_set_header X-real-ip $remote_addr;
                    proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
                    proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;
                    proxy_set_header    X-Forwarded-Proto $scheme;
                    proxy_redirect      default;
            }

            location /mq {
                    proxy_pass   http://localhost:7070/mq/;
                    #websocket额外配置开始
                    proxy_http_version 1.1;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "upgrade";
                    proxy_connect_timeout 60s;#l连接超时时间,不能设置太长会浪费连接资源
                    proxy_read_timeout 500s;#读超时时间
                    proxy_send_timeout 500s;#写超时时间
                    #websocket额外配置结束
            }

        access_log  /home/wwwlogs/pan.zdynb.cn.log;
    }

server
    {
        listen 443 ssl http2;
        server_name pan.zdynb.cn ;
        root  /www/jmalcloud-docker/dist;

        ssl_certificate /usr/nginx/conf/ssl/pan.zdynb.cn/fullchain.cer;
        ssl_certificate_key /usr/nginx/conf/ssl/pan.zdynb.cn/pan.zdynb.cn.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "此处为ssl配置,详细信息已删除:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
        ssl_dhparam /usr/nginx/conf/ssl/dhparam.pem;

        include rewrite/none.conf;
        #error_page   404   /404.html;

                location / {
                    proxy_pass   http://localhost:7070;
                    proxy_set_header Host $proxy_host;
                    #下边是为获取真实IP所做的设置
                    proxy_set_header X-real-ip $remote_addr;
                    proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
                    proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;
                    proxy_set_header    X-Forwarded-Proto $scheme;
                    proxy_redirect      default;
            }

            location /mq {
                    proxy_pass   http://localhost:7070/mq/;
                    #websocket额外配置开始
                    proxy_http_version 1.1;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "upgrade";
                    proxy_connect_timeout 60s;#l连接超时时间,不能设置太长会浪费连接资源
                    proxy_read_timeout 500s;#读超时时间
                    proxy_send_timeout 500s;#写超时时间
                    #websocket额外配置结束
            }

        access_log  /home/wwwlogs/pan.zdynb.cn.log;
    }

配置完成重启nginx即可通过域名进行访问

测试效果

PC端测试效果

移动端测试效果

z-file私有网盘

程序介绍

github项目地址

这个项目是一个在线文件目录(私人网盘)的程序, 支持各种对象存储和本地存储, 使用定位是个人放常用工具下载, 或做公共的文件库. 不会向多账户方向开发.前端基于 h5ai 的原有功能使用 Vue 重新开发了一遍. 后端采用 SpringBoot, 数据库采用内嵌数据库.

系统特色

  • 内存缓存 (免安装)
  • 内存数据库 (免安装)
  • 个性化配置
  • 自定义目录的 header 说明文件
  • 自定义 JS, CSS
  • 文件夹密码
  • 支持在线浏览文本文件, 视频, 图片, 音乐. (支持 FLV 和 HLS)
  • 文件/目录二维码
  • 缓存动态开启, 缓存自动刷新
  • 全局搜索
  • 支持 阿里云 OSS, FTP, 华为云 OBS, 本地存储, MINIO, OneDrive 国际/家庭/个人版, OneDrive 世纪互联版, 七牛云 KODO, 腾讯云 COS, 又拍云 USS.

演示地址

我的网盘:http://pan.zdynb.cn

私人网盘

安装教程

如为更新程序, 则可跳过此步骤, 但要执行命令, 停止服务并清理上个版本的程序: ~/zfile/bin/stop.sh && rm -rf ~/zfile (不会删除数据文件)

对于 root 用户, 在 /root/ 路径下, 对于其他用户, 在 /home/用户名/ 路径下。如需更改安装路径, 请自行修改。

此处建议服务器内存大于512m,我的服务器配置为

核心:2核

内存:4g

磁盘:40g

运行环境

  • JDK: 1.8
  • 缓存: caffeine
  • 数据库: h2/mysql

服务器配置:标准的lnmp环境,当然除了NGINX和mariadb(MySQL)其他的这个网盘程序可能用不上

  • Cent OS 7
  • NGINX 1.71
  • MariaDB 10.1.44
  • PHP 7.0

Linux

安装依赖环境

如为更新程序, 则可跳过此步骤, 但要执行命令, 停止服务并清理上个版本的程序: ~/zfile/bin/stop.sh && rm -rf ~/zfile (不会删除数据文件)

# CentOS系统
yum install -y java-1.8.0-openjdk unzip

# Debian/Ubuntu系统
apt update
apt install -y openjdk-8-jre-headless unzip

下载项目

#下载包
wget -P ~ https://c.jun6.net/ZFILE/zfile-release.war
#切换到home目录
cd ~
#创建文件夹并解压
mkdir zfile && unzip zfile-release.war -d zfile && rm -rf zfile-release.war
#添加执行权限
chmod +x ~/zfile/bin/*.sh

使用到的命令

这是安装在默认目录的前提下,如果在其他目录则需要切换至安装目录的bin目录下再来执行

~/zfile/bin/start.sh       # 启动项目
~/zfile/bin/stop.sh        # 停止项目
~/zfile/bin/restart.sh     # 重启项目

Windows

安装依赖

安装 JDK8, 并配置环境变量, 可参考: https://jingyan.baidu.com/article/ce09321b85e8d62bff858f93.html

下载项目

下载文件 https://c.jun6.net/ZFILE/zfile-release.jar

启动项目

然后在文件所在路径下, 使用 cmd 执行命令 (不支持 powershell):

java -Dfile.encoding=utf-8 -jar -Dserver.port=8080 .\zfile-release.jar

如需要修改配置文件, 可去 Github 复制一份配置文件, 放到 jar 文件同路径即可.

密码文件夹

在需要密码访问的文件夹,添加 password。txt,文件内容为文件夹密码,如为中文密码,请保证文件为 UTF8 编码。

此文件不会显示,但无法防止被下载,可指定密码文件名,在配置文件 application。ymlzfile -> conconstant -> password 修改。

文档区

在需要添加文档的文件夹,添加 readme。txt,文件内容为文件夹密码,如包含中文,请保证文件为 UTF8 编码。

此文件不会显示,可指定文档文件名,在配置文件 application。ymlzfile -> conconstant -> readme 修改。

自定义 CSS JS

在对应的框内,写 CSS、JS 代码即可,无需写 <style>script 标签。

缓存功能

开启缓存后,会缓存文件夹中的内容,可以加快访问速度,但同样也可能会导致数据不一致。缓存每 30 分钟刷新一次。

搜索功能

可全局搜索整个存储引擎中的内容。搜索功能,需开启缓存后,才可生效。

搜索包含加密文件

如关闭此选项,如文件夹中需要密码访问,则此文件夹及其子文件夹中的内容,不会出现在搜索结果中。搜索忽略大小写。

OneDrive 令牌
  • OneDrive 令牌,会在以下情况下自动刷新:
  • 项目启动 30 秒后,每 15 分钟自动刷新一次 (令牌有效期为 1 小时)。
  • 保存存储策略时
  • 切换到 OneDrive 策略时

如何更改端口

vim ~/zfile/WEB-INF/classes/application.yml

server:
    port: 8080      # 修改此处.

默认启动端口为 8080, 如需请配置文件请编辑上述文件, 修改后重启程序生效.

为什么启动后无法访问
可能是防火墙没开启. 下面介绍如何防火墙开启端口. 对于阿里云、腾讯云、谷歌云等厂商, 可能还需要额外去后台开启防火墙.

# CentOS 7.x
firewall-cmd --zone=public --add-port=8080/tcp --permanent # 开放 8080 端口
firewall-cmd --reload                                      # 重启firewall
Copy to clipboardErrorCopied

# Ubuntu 16.x / Debian 9.x
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
iptables-save
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload

如何使用域名进行访问

方式1: 将域名 A 记录解析到服务器 IP, 即可通过 域名:端口 访问 (80 端口即可免输入端口).

方式2: 使用 nginx 或 caddy 等工具反向代理. 以下以宝塔面板为例:

首先点击 网站 -> 新增站点:

添加网站

设置反向代理:

设置反向代理

访问地址:

在安装完成之后使用./start.sh启动,之后便可以访问,

http://127.0.0.1:8080这个替换为自己的域名以及端口号

用户前台: http://127.0.0.1:8080/#/main

初始安装: http://127.0.0.1:8080/#/install

管理后台: http://127.0.0.1:8080/#/admin

OneDrive 使用教程.

访问地址进行授权, 获取 accessToken 和 refreshToken:

国际/家庭/个人版:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=09939809-c617-43c8-a220-a93c1513c5d4&response_type=code&redirect_uri=https://zfile.jun6.net/onedirve/callback&scope=offline_access%20User.Read%20Files.ReadWrite.All

世纪互联版:

https://login.chinacloudapi.cn/common/oauth2/v2.0/authorize?client_id=4a72d927-1907-488d-9eb2-1b465c53c1c5&response_type=code&redirect_uri=https://zfile.jun6.net/onedirve/china-callback&scope=offline_access%20User.Read%20Files.ReadWrite.All

然后分别填写至访问令牌和刷新令牌即可

常见问题

数据库

缓存默认支持 h2mysql, 前者为嵌入式数据库, 无需安装, 但后者相对性能更好.

默认路径

默认 H2 数据库文件地址: ~/.zfile/db/, ~ 表示用户目录, windows 为 C:/Users/用户名/, linux 为 /home/用户名/, root 用户为 /root/

头尾文件和加密文件
  • 目录头部显示文件名为 header.md
  • 目录需要密码访问, 添加文件 password.txt (无法拦截此文件被下载, 但可以改名文件)
为什么提示密码错误

请检查密码文件中是否包含中文,如果包含,请保持文件编码为 UTF8。
请检查密码文件中是否包含空格, 换行符等不可见字符.

前后端分离如何部署

下载 https://github.com/zhaojun1998/zfile/tree/master/src/main/resources/static 路径下的所有文件, 或在程序运行后的相对路径:WEB-INF/classes/static.

修改 zfile.config.json 内文件指向后端地址, 然后放到静态资源服务器, 或对象存储即可:

{
  "baseUrl": "http://xx.xxx.cn:8080"
}

文章作者: 张登友
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 张登友 !
  目录