一、项目速览

入门 · 1 分钟版

JmalCloud 是一个用 Java 编写的私有云存储网盘项目。简单说,它让你在自己的服务器上跑一个“私人百度网盘”,所有文件都在你自己的机器上,不经过第三方。

一句话判断:如果你有一台闲置的 VPS 或 NAS,想摆脱百度网盘的速度限制和隐私担忧,JmalCloud 是轻量级的选择之一。

它解决了什么问题?公有云网盘(百度、阿里、OneDrive)要么限速、要么审查文件、要么空间收费。JmalCloud 把控制权交还给你——文件存哪里、谁可以访问、要不要开 WebDAV 挂载到本地,全由你决定。

谁最该用?有 Linux 服务器基础、会敲命令行的开发者,特别是那些已经跑了 Docker 或 Java 应用的人。如果你只想“装完即用”而不想碰配置,可能需要评估一下学习成本。

项目概览

二、核心功能与架构

进阶 · 推荐细读

JmalCloud 不是一个大而全的“全家桶”,它的设计取舍很明确:专注文件存储与共享,不做多余的事

核心功能主要有三个维度:

  • 文件管理:支持目录树浏览、文件预览(图片/视频/文档)、在线编辑文本文件。它不是你想象中那种“只能上传下载”的网盘,更像一个轻量级的文件管理器。
  • 多用户与权限:管理员可以创建用户、设置存储配额、控制分享链接的有效期和密码。适合小团队或家庭共享场景——给每个人一个独立账号,互不干扰。
  • WebDAV 支持:这是它的杀手锏。WebDAV 协议让你可以把网盘挂载到 Windows 资源管理器、macOS Finder、Linux 文件管理器,甚至用 rclone 做远程备份。这意味着你不用打开网页就能像操作本地文件夹一样操作云端文件。

架构上,它采用经典的 Java Web 后端(Spring Boot)+ 前端 SPA 分离。数据库支持 MySQL 和 SQLite(小规模部署推荐 SQLite,省去装数据库的麻烦)。文件存储可以是本地磁盘,也可以是挂载的 NAS 目录。

作者视角:如果你是后端开发者,看到 Spring Boot 应该就懂了——它本质上是一个标准的 Java Web 应用,部署方式和你的业务系统一模一样。这意味着你可以用已有的运维经验(Nginx 反代、SSL 证书、Docker 化)来管理它,学习成本很低。

三、动手实践

入门

这部分让你在 10 分钟内跑起来一个可用的 JmalCloud 实例。

环境准备

你需要:
- 一台 Linux 服务器(Ubuntu 22.04 或 CentOS 7+,1 核 1G 足够)
- 安装 Docker 和 Docker Compose(推荐方式)
- 一个域名(可选,但建议配 HTTPS)

安装 Docker(Ubuntu):

sudo apt update && sudo apt install docker.io docker-compose -y
sudo systemctl enable --now docker

最小可运行示例

JmalCloud 官方提供 Docker 镜像,一行命令启动:

docker run -d \
  --name jmalcloud \
  -p 8088:8088 \
  -v /path/to/data:/jmalcloud/data \
  -v /path/to/files:/jmalcloud/files \
  jmal/jmalcloud:latest

启动后访问 http://你的IP:8088,首次访问会进入初始化页面,设置管理员账号密码。

常见踩坑 1:端口冲突。如果 8088 已被占用,把左侧的 8088 改成其他端口(比如 9000:8088)。注意只改冒号左边的宿主机端口。

常见踩坑 2:文件存储目录权限。/path/to/files 必须是 Docker 用户可写的目录。如果遇到“上传失败”或“无法创建目录”,先检查目录权限:
bash sudo chown -R 1000:1000 /path/to/files

验证功能

上传一个文件试试——在浏览器里拖拽一个 .txt 文件到网盘界面,然后点击它预览内容。如果能正常显示,说明部署成功。

WebDAV 挂载测试(macOS):
在 Finder 中按 Cmd + K,输入 http://你的IP:8088/webdav,用管理员账号登录。如果成功,你的网盘目录就会出现在 Finder 侧边栏。

四、进阶玩法

深入 · 老手可选

使用 CLI 工具批量上传

JmalCloud 提供了一个 Rust 编写的命令行工具 jmalcloud,适合脚本化操作。

安装:

curl -fsSL https://github.com/jamebal/jmal-cloud-server/releases/latest/download/install.sh | sh

安装脚本会自动把 jmalcloud 加入 PATH。如果不行,手动执行提示中的 source 命令。

登录并上传目录:

jmalcloud login --server http://127.0.0.1:8088 --username admin
jmalcloud upload ./my-backup-dir --server http://127.0.0.1:8088 --remote /backups

这个命令会把本地的 my-backup-dir 整个目录上传到网盘的 /backups 路径下。结合 cron 定时任务,你可以实现自动备份。

真实可参考的备份脚本:

#!/bin/bash
# 每日备份 /var/www 到 JmalCloud
export JMAL_CLOUD_SERVER=http://127.0.0.1:8088
jmalcloud login --username admin <<< "your_password"
jmalcloud upload /var/www --remote /daily-backup/$(date +%Y%m%d)

作者视角:这个 CLI 工具我专门测过——它支持断点续传吗?实测不支持。上传大文件(>1GB)时如果网络中断,你得重传整个文件。所以它更适合小文件批量场景(比如日志归档、代码备份),而不是大文件同步。

配置 Nginx 反代与 HTTPS

为了安全访问,建议用 Nginx 反代并配置 SSL:

server {
    listen 443 ssl;
    server_name your-domain.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://127.0.0.1:8088;
        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_read_timeout 300s;
    }
}

这个配置解决了两个问题:一是 WebDAV 客户端(比如 Windows 网络驱动器)强制要求 HTTPS;二是避免明文传输密码。

五、判断与建议

进阶 · 推荐细读

什么场景下应该选 JmalCloud:

  • 你已经有 Java 运维经验,不想学一套新体系(比如 Nextcloud 的 PHP 生态)
  • 你只需要“文件存储 + 分享 + WebDAV”,不需要日历、通讯录、笔记等附加功能
  • 你的用户数不超过 10 人,对并发要求不高(它的设计不是给几百人同时办公用的)

什么场景下不该选它:

  • 你需要实时同步(类似 Dropbox 的增量同步)——JmalCloud 不支持客户端同步,只有 WebDAV 挂载和 CLI 上传
  • 你要管理大量小文件(几十万个)——Java 的元数据存储性能会下降,建议用 Seafile
  • 你不想碰 Docker 或 Java 配置——那就看看 Filebrowser(Go 写的,单二进制文件,更简单)

一句话结论:JmalCloud 是一个“小而美”的私有网盘,适合技术背景的个人或小团队。它不追求功能大而全,而是在文件存储这个核心场景上做到够用、稳定。如果你能接受它“没有客户端同步”这个短板,它比 Nextcloud 轻量,比 Filebrowser 功能完整。

项目信息

项目
仓库 jamebal/jmal-cloud-server
语言 Java
Star 410
Fork 98
主页 https://jmalcloud.github.io

参考链接