写在最前面

众所周知,当前使用最广泛的云盘是百度网盘,而百度各种骚操作真让人无法忍受,倍速看视频还要开会员,真是恶心他妈给恶心开门。而号称不限速的阿里云盘也开始限速了,后面可能也和百度一个德行。其实各种体验问题都可以容忍,最无法忍受的是数据安全,我们上传到百度网盘的每一个文件,都已经被备份了 n 份了,尽管有些文件已经被我们删除了,但是这些文件仍然在百度的服务器里,个人隐私极不安全;可能有些人不太清楚,很久之前百度网盘有一个秒传功能,为什么一个几 G 的文件能秒传,那是因为百度的服务器里已经有了一个相同的文件了,你上传的文件其实并不是你的文件,如果你删除了这个文件,其实你也并没有删除这个文件。而且百度还有人工审核(偷窥)用户隐私图片的前科。还有另一个非常严重的问题是自己好不容易收藏的电影,结果变成了 8s 的教育片。

既然这么多问题,那我就不用你了,那要存储文件怎么办,可以自己部署一个私有云盘呀。目前免费的比较好的私有云盘有: 国外的有 Nextcloud、ownCloud,这两个出自一脉,免费版的基本功能都有,但有一个致命的问题是慢,非常占用服务器资源,网上一堆提高性能的攻略都没用(可能我水平不行,没有 get 到点);国内的有可道云,免费版的也是基本功能都有,很多想用的功能都需要收费。以上网盘虽然免费使用基础功能,但它们本质上还是商业网盘,至于有没有后门就不清楚了。于是我就自己写了这个网盘并开源出来,网盘的前端是在开源Windows12网页版项目的基础上进行了大量的增删改,后端纯个人开发。

如果按照后面推荐的部署方案部署该网盘,成本比开百度会员要低很多,且可以保证数据安全。

功能概览

本项目的所有功能如下:

  • 文件夹的新建、删除、重命名、移动、导出
  • 文件的上传、下载、新建、删除、移动、重命名、分享
  • 支持 OnlyOffice (Word、Excel、PowerPoint) 在线编辑和多人协作
  • 支持 txt、markdown、xmind脑图、表格、文档的在线编辑功能
  • 支持 python 脚本在线编辑和运行
  • 支持给文件添加桌面快捷方式
  • 支持自动备份指定文件夹中的所有文件
  • 支持远程连接 Linux 服务器
  • 支持点对点语音/视频聊天和屏幕分享(基于 WebRTC)
  • 音乐播放器,支持播放云盘(服务端)和本地(客户端)的音乐
  • 支持 Karaoke,自建曲库,在家想唱就唱
  • 集成 aria2,支持 HTTP、FTP、BT等多种下载协议
  • 增加游戏中心,支持贪吃蛇、俄罗斯方块、套圈圈游戏(会陆续支持更多小游戏)
  • 支持服务重启,支持自动更新系统
  • 支持多语言,支持配置多语言
  • 单点登录,不同用户的数据完全隔离
  • 支持 PWA,可以“安装”到手机上
  • 可任意挂载多个磁盘

功能介绍

系统的核心功能就是一个网盘(和百度网盘的功能类似),还提供了比普通网盘更多的功能,且可任意扩展功能。在页面上看到的文件和文件夹的目录层级结构在本地服务器/电脑的磁盘里是真实存在的,即使你以后觉得我这个系统不好用了,我也会给你留下一个完整有序的目录文件,而不是乱序的。最终目标是把它做成一个“操作系统”。

创建用户

进入 swagger-ui 页面(地址:http://IP:Port/mycloud/swagger-ui),找到 createUser 接口,点击 Try it out,然后设置用户名、昵称、密码,点击 Execute 即可。注意:用户名用于登录,是唯一的;昵称用于展示,可任意设置。

create_user.jpg

登录页面

login.jpg

在登陆页面左上角可以切换语言。登录页面的默认背景图片的路径是web/img/pictures/undefined/background.jpg,如需修改默认登录背景图片,可直接替换掉这个图片即可,注意:图片名必须是background.jpg;如果只需要修改自己的登陆页面背景图片,那么可以在设置->个性化里上传背景图片。

页面总概览

桌面背景图片可以在设置->个性化里上传图片更换。

desktop.jpg

设置

设置里包含系统、账号、个性化、多媒体、游戏、终端、系统更新等多个功能。

系统

可以查看教程、重启服务、查看系统资源使用情况、设备相关信息、备份文件、清理临时文件,如下:

system_about.jpg system_resource.jpg

账号

可以修改用户昵称、修改用户头像、修改用户登陆密码和退出登陆,其中上传的头像的格式必须是jpg,图像的长宽最好一样。

setting_user.jpg

个性化

可以设置桌面背景图片、切换明暗主题、切换窗口透明度、设置页面语言等,其中上传的桌面背景图片的格式必须是jpg

setting_personal.jpg

多媒体

可以视频/语音聊天,播放本地视频,也可以打开音乐播放器听歌,更可以 K 歌哦。

setting_media.jpg

游戏

可以玩一些网页版的小游戏,如:贪吃蛇、俄罗斯方块、套圈圈,更多小游戏会陆续支持。

setting_game.jpg

终端

可以添加服务器用于远程连接 Linux,可以执行 Shell 命令和上传下载文件。

setting_terminal.jpg

系统更新

可以检查系统更新,并更新系统,查看系统更新日志

system_update.jpg

文件资源管理器

上边一排工具栏依次是新建文件、新建文件夹、重命名、移动、复制、上传、下载、分享、删除、列表展示/图标展示,这些图标均来源Windows10的系统图标。文件列表可按照名称、创建时间、修改时间排序。文件资源管理器中的所有文件,除了支持在线编辑的文件外,其他格式的文件会直接用浏览器打开,浏览器能打开预览的文件可以直接在浏览器中预览,浏览器不支持预览的文件则直接下载到本地。

使用文件上传功能上传文件时,会首先检测网盘是否存在相同的文件,如果存在则不上传,这就是类似一些网盘的秒传的功能。

file.jpg

图标展示时,一般展示的是默认图标,只有图片才会展示图片的缩略图,在图片比较多的情况下可以直接快速预览图片,而不必一张张的打开关闭寻找图片了。说白了,这个功能就是专门为了快速浏览大量的图片,但在图片较多时,可能会存在性能问题(列表展示就不会存在性能问题)。

icon_view.jpg

回收站

上边一排工具栏依次是还原文件、删除文件、清空回收站,基本上和Windows系统的回收站操作一样。

garbage.jpg

我的分享

当分享文件时,可设置分享链接的打开次数,超过次数会返回 Nginx 默认页面,如果不想限制分享链接的打开次数,可设置打开次数为 0。其中:markdown、表格、文档 和 xmind 分享链接打开后页面虽然可以编辑,但数据不会保存,仅支持导出数据。

分享功能的常规使用场景是分享文件给别人,还要一个场景就是去打印店打印文档,通过浏览器调用打印机后,刷新页面到指定的次数,这个链接就失效了,有效降低了文档泄漏的风险和使用U盘被病毒感染的风险。

share.jpg

添加快捷方式

我们在使用电脑时,通常会把常用的文件放在桌面上以方便使用,这个网盘同样也支持该功能。参考 Windows 的快捷方式的功能,当在文件上右键时(只支持文件,不支持文件夹),可添加桌面快捷方式,刷新页面即可在桌面上看到文件;在桌面上右键快捷方式,可以选删除快捷方式,或者打开文件所在位置,是不是和在 Windows 上操作几乎一样。

shortcuts.jpg

自动备份

现在的电子设备或多或少都会在使用过程中出现故障,导致重要数据丢失,因此对重要的数据进行备份就显得极其重要。本网盘支持将数据自动备份到另一块磁盘上。

网盘支持备份指定文件夹中的所有数据,为什么要指定文件夹而不是默认备份所有文件呢?因为,如果数据全部备份,那么就需要两块很大的磁盘,这不是浪费吗。我们存在磁盘中的文件,很多并不是重要的文件,没必要为了不重要的文件而占用过多的存储资源,因此,只需要将你认为重要的文件夹进行备份就可以了。如果你是土豪,就想备份所有文件,那么请把根目录下的文件夹全部设置成自动备份。

在需要备份的文件夹上右键,点击开启自动备份,然后每天(可设置每天、每两天、每 n 天...)凌晨 5:20 开始自动备份文件,如果你删除了文件,自动备份时,也会同步删除备份的文件。在文件夹上右键,点击取消自动备份,那么则不会再自动备份了,但是已经备份的文件不会被自动删除,需要手动去删除。

当然了,也可以手动立即开始备份数据。在设置->系统里,点击备份文件,即可立即开始备份,同时可以看到所有开启了自动备份的文件夹,在列表中可以打开文件夹所在位置和取消自动备份。

清理临时文件

临时文件是一些功能的中间过程产生的文件,主要有以下功能会读写临时文件:xmind 文件读取和导出、OnlyOffice文件保存、SSH 上传文件、Karaoke 的音视频格式转换、aria2c 下载临时存储。因此,需要有自动和手动的方式清理临时文件。

自动清理临时文件的任务是每天凌晨 5:20 运行,清理文件时,会先获取文件的修改时间,如果最近 30 分钟文件被修改过,则不会清理,这就避免了清理掉正在使用的文件了。也可以在设置里手动清理临时文件,这里会清理掉所有的临时文件,正常情况下尽量不要手动清理,可能网盘正在读取/写入临时文件,然后就被你手动清理掉了,就会影响功能。

计算器

一个很鸡肋的小工具,感觉还不如用 python 命令行计算。

calc.jpg

Whiteboard 画板

没事的时候可以用鼠标涂鸦画画,放松一下。

wihteboard.jpg

浏览器

功能简单的浏览器,只支持允许嵌套的网页。经测试,仅支持必应搜索。这里使用的是iframe嵌套的方式,百度和Google搜索不允许 iframe 嵌套,所以用不了;后面可考虑接入后端进行请求转发,解决跨域和嵌套的问题。

edge.jpg

连接 Linux

设置里添加服务器,在列表中点击打开即可远程连接 Linux,支持上传和下载文件,支持 Ctrl+C(复制)Ctrl+V(粘贴) 快捷键,同时 Ctrl+C 还保留结束当前进程的功能。为节省服务器资源,对“挂机”超过10分钟的连接进行关闭。

setting_terminal.jpg shell2.jpg

语音/视频聊天

我们常用的视频聊天软件是 QQ 和微信,常用的会议软件有腾讯会议、钉钉、飞书等,使用它们的话,你的聊天内容和会议内容就会被它们监控和保存,隐私严重受到威胁,特别是腾讯,你的 QQ 号、微信号、以及数据等都不是属于你的,腾讯可以向某些人提供你的所有数据,而你还不知道。这就是为什么大公司都自建内部通讯和会议软件,而作为个人,需要有一种通信方式来交流重要敏感的信息。

WebRTC 是一项开源的基于网页的应用技术,它允许用户在不安装任何插件的情况下就可以发送实时媒体流,实现浏览器之间的点对点通信,它的安全性远超任何软件。基本上现代浏览器都支持 WebRTC,不限任何设备,所以只要有浏览器,就可以进行视频聊天。

在设置里点击视频聊天,首先需要创建聊天室,然后所有用户可通过聊天室加入聊天。系统会对加入聊天的用户进行验证,避免未登陆的用户进入聊天室;用户通过验证后,系统会辅助用户之间建立连接,然后就是用户之间的点对点通信了,和系统就没有任何联系了。

chatting.jpg

支持多个聊天室同时聊天,支持多对多的用户视频聊天;支持禁用麦克风、禁用摄像头、切换前后置摄像头、禁扬声器、分享屏幕的功能。理论上支持无限多用户在一个聊天室进行聊天,实际支持的用户数受限于设备的性能和网络带宽。一个聊天室只能使用一次,如果未使用,2天后也不能再使用了。

分享屏幕时,支持分享浏览器标签页、分享窗口和分享整个屏幕,特别注意:分享屏幕时,需要勾选同时分享系统音频,否则在分享屏幕时,无法关闭自己的麦克风。特别提醒:手机浏览器不支持分享屏幕。

chat_share_screen.jpg

虽然视频聊天理论上可以支持很多很多用户同时聊天,但是每增加一个用户,带宽就会显著增加,所以为了支持更多用户同时聊天,增加了语音聊天的功能,可以大大减少带宽的占用。

如果需要在非局域网的场景下进行视频聊天,那么需要部署 TURN 服务器,需要有公网 IP。

播放本地视频

播放本地视频不使用流量,支持记录播放进度;做这个功能的原因是:我的手机上没有安装视频软件,只能用相册自带的功能看视频,但是它记不住播放进度,每次手误碰退出视频,就得重新看,贼麻烦。所以这个功能就是用来记录视频播放进度的。

setting_media.jpg

音乐播放器

音乐播放器只支持 mp3 格式的歌曲和 .lrc 格式的歌词,如果要展示歌词,需要歌曲名和歌词名一样。只有当一首歌播放进度超过 30% 时,才会被添加到播放历史中;歌曲被添加到历史记录中时,播放次数就会 +1

打开音乐播放器的方式和在 windows 上使用一样:

1、点击桌面音乐播放器的图标,进入音乐播放器界面,然后导入音乐;

2、进入文件资源管理器,找到mp3格式的歌曲,双击打开即可播放刚打开的歌曲;

music.jpg

Python 命令行

支持 python 命令行,支持导入 python 官方库,可以用来做一些简单的计算,或者处理一些简单的数据。

python.jpg

下载工具

aria2 是一个轻量级的多协议命令行下载工具,支持 HTTP、FTP、BT 等多种协议,支持多连接下载和断点续传。

进入需要下载文件的目录,然后点击 新建文件 -> 新建下载任务,在输入框中填入下载的 URL 或者 magnet 种子链接即可,如果需要 cookie 才能下载,则需要填入 cookie,否则可以不填 cookie。如果你已经有了 torrent 格式的种子文件,那么先把种子文件上传至网盘,然后双击即可。

download-new.jpg

下载 BT 种子文件时,会去先获取可用的 tracker 列表,默认使用的是这个地址,但是这个地址国内大部分时间是无法访问的,可以使用以下两个地址替换:地址1地址2。然后会自动解析 BT 种子文件,如下图,请选择文件进行下载(一次只能选一个)。

bt.jpg

m3u8 是一种广泛用在互联网视频和音频流的文件格式,m3u8 文件通常用于定义多媒体播放列表(内容如下),很多视频网站播放视频用的就是 m3u8 格式。如需下载 m3u8 格式的视频流,可直接 新建下载任务 并将 m3u8 文件的链接粘贴进来,就会下载视频流并自动合并成 mp4 视频。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:19
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="/G1131016/500kb/hls/key.key"
#EXTINF:10.36,
/G1131016/500kb/hls/Lf3Ryo8k.js
#EXTINF:9.92,
/G1131016/500kb/hls/yGTGe1Pc.js
......

如需查看当前正在下载的任务,点击 下载列表 即可。点击暂停可以暂停下载任务,点击取消可以取消下载,下载完成后,即可在目录里看到下载的文件。注意:m3u8 文件下载无法在列表中查看。

download-list.jpg

Karaoke(卡拉OK)

自建曲库,可以从网上下载自己喜欢的 MV 或者歌曲视频,经过一系列处理后就可以用来 K 歌了,任何互联网上能找到的歌曲,都可以进入你的曲库,再也不用担心曲库里没有你想唱的歌。具体介绍详见自建家庭 KTV

网页版游戏

在设置里增加了网页版游戏,现支持贪吃蛇(支持方向键控制)、俄罗斯方块(支持方向键控制)、套圈圈游戏,后续会陆续支持其他网页版的小游戏

snake.jpg rings.png

自动更新系统

考虑到大家在使用这个系统时,无法感知系统是否有更新,且手动下载更新很麻烦,所以增加了系统更新的功能,很像 Windows 系统的更新。首先需要点击 检查更新,如果检测到有更新,下载 按钮会点亮,点击下载最新版本;下载完成后,重启更新 按钮会点亮,点击 重启更新 即可自动完成系统更新。

强烈建议自动更新前,先查看系统更新日志,万一自动更新失败,可以手动去更新。

system_update.jpg

自动更新的功能已全面支持 Windows、Linux、MacOS 等操作系统,在第一次部署的时候需要按照后面的部署步骤操作,就像 Windows 系统一样,第一次安装比较麻烦,后面更新就很方便了。

自动更新功能需要访问 github 查询最新版本以及下载最新版本,由于众所周知的原因,中国国内有时可以访问,有时不可以访问,如果宽带不能访问,可尝试手机 wifi 热点,切换不同的网络运营商。

多语言设置

目前多语言已支持中文简体和英文,可能存在翻译不正确,或者漏翻译的,请自行修改。

多语言切换有2个地方:一个地方是登陆页面左上角;另一个地方是 设置->个性化->设置语言。多语言配置分为前端配置和后端配置,前端配置的多语言主要是页面文案展示,后端配置的多语言主要是接口返回信息和日志。

1、前端多语言配置在 web->language 目录下面,每一种语言对应一个 json 文件,json 文件里对应的是多语言字段的 key 和翻译,如需新增多语言,请先复制一份 json 文件,然后修改翻译,不能修改 key。

2、后端多语言配置在 common->messages.py 文件中,如需新增多语言,可按照规范新增。

OnlyOffice

打开 office 文件,会使用 onlyoffice 打开,可在线编辑并实时保存,关闭窗口可退出编辑,onlyoffice 默认设置是:用户退出编辑 10s 后,才会自动把文件保存到本地。

多人协作编辑文档:可通过在文件列表中需要协作编辑的文件上右键,获取协作编辑的链接,然后把链接发送给协作编辑的人。如果其中一个用户退出编辑,然后再通过链接进入编辑状态,此时不会协作编辑,必须所有用户全部重新进入编辑状态才可以协作编辑。

查看历史版本:可从历史记录中查看文档的改动,并可从历史记录中恢复。

word.jpg excel.jpg powerpoint.jpg history.jpg

OnlyOffice 和 这个插件 搭配只用效果更好哦 ~

在线编辑功能

所有在线编辑功能:每隔10秒自动保存,标题栏文件名旁会展示自动保存的时间,点击关闭按钮也会自动保存。其中txtmarkdown文档的在线编辑支持导出成html格式,用浏览器打开导出的html后,可通过浏览器自带的打印功能把文件转成PDF格式。

txt 文件

点击右上角的下载按钮,可以直接将当前文档转成 html,并下载。如需下载原 txt 文件,可在文件资源管理器中选中文件并点击下载。

txt.jpg

markdown 文件

点击右上角的下载按钮,可以直接将当前文档转成 html,并在新标签页打开,如需下载这个 html,可在新打开的标签页右键下载。需要注意:这里使用的是第三方工具转的 html,一些样式在转换时会丢失。如需保留所有的 html 样式,可在工具栏点击全窗口预览HTML即可。

markdown.jpg

表格

由于表格功能太多,暂不支持导出功能,可用于在线存储一些数据,可手动复制表格中的数据,并粘贴到本地 excel 表格中。

sheet.jpg

文档

该文档左侧带有目录,支持目录定位页面到指定位置。可导出成 html 格式的文件,用浏览器打开 html 文件,调用浏览器自带的打印功能,调整打印页边距,可把文档转成页面布局合适的 PDF 文件。

docx.jpg

xmind 脑图

支持标准的 xmind 文件(xmind8xmind zen(xmind 2020))在线编辑,文件打开后,原文件格式已经转换,只能通过页面工具栏中的导出功能才能导出 xmind8(只支持导出 xmind8,不支持导出 xmind zen)。在线编辑的脑图中添加的样式、颜色、优先级、完成进度、备注等也支持导出到 xmind8 中。

xmind.jpg

Python 脚本

支持在线编辑 py 文件,点击运行后可直接在浏览器上看到结果。如果想导入第三方库,需要专门打包,具体可查阅相关资料。

pythonEditor.jpg

导入已有文件

如果想把当前电脑/服务器上已有的文件导入系统中,可访问后台 swagger-ui 接口页面,找到 file/import 接口,请求参数分别是需要导入的文件夹的绝对路径和目标的目录Id。

定时任务

当前系统所有定时任务均在凌晨 5:20 执行,共有以下几个定时任务:

1、自动清理缓存文件任务:一些操作的中间步骤可能会产生临时文件,需要定时清理它们;

2、自动清理未使用的聊天室任务:创建的聊天室可能从未使用,也需要定时清理它们;

3、自动备份文件任务:自动备份可以避免文件丢失,需要有定时任务触发;

4、自动更新系统任务:保持系统始终是最新的版本,提高用户体验;

PWA应用

因为每次使用网盘都需要打开浏览器,而且浏览器还有标题栏和地址栏,为了更好的使用体验,本网盘支持了 PWA,可以把这个网站“安装”到手机上,像使用 APP 一样使用网盘,手机横屏使用,体验还是可以的。

当前主流浏览器基本上都支持 PWA,但是支持最好的是 Chrome 浏览器,其次是 Edge 浏览器。手机浏览器打开网站,一般会提醒安装应用,如果没有提醒,可在网站设置里把网站添加到主屏幕即可。如果你使用其他浏览器安装 PWA,出现了页面跳转返回等异常,那么建议使用 Edge 或 Chrome 浏览器。注意:安装 PWA 需要网站地址是本地地址(127.0.0.1)或者是 https 协议。

其他

1、支持 LinuxWindowsIOS 等多个平台,建议在 Linux 系统部署;可尝试在国产操作系统上部署,如有问题,欢迎提出。

2、因为是在操作本地文件,所以不支持集群部署和分布式存储。

3、在线播放视频,基本上都是用的是流式播放(边缓存边播放),这就要求视频的元数据必须在视频文件的最前面,而有些视频的元数据在视频文件的末尾,这就需要浏览器把整个视频加载完成后才能播放,体验极差。因此需要手动将视频的元数据移动到视频文件的最前面,然后再上传至云盘,这里使用 ffmpeg 工具移动视频的元数据,命令:ffmpeg -i input_video.mp4 -map_metadata 0 -c:v copy -c:a copy -movflags +faststart output_video.mp4

4、所有页面和操作已尽可能的适配手机端了,使用手机浏览器打开页面,手机横屏展示,使用体验还是不错的。

5、更好的使用体验建议:不管你用的是 PC 端浏览器还是手机端浏览器,设置浏览器全屏展示,使用体验更好。

部署

克隆项目

克隆项目,然后进入项目的目录

git clone https://github.com/leeyoshinari/WinHub.git
cd WinHub

修改配置文件

先将配置文件 .env.example 复制一份,然后重命名成 .env,然后按需修改 .env 中的变量。更多配置解释详见 README.md

安装第三方依赖包

Windows 用户执行 pip install -r requirements.txt,如果提示命令不存在,请把可执行程序所在的目录添加到系统环境变量中。Linux 和 MacOS 用户执行 pip3 install -r requirements.txt,如果提示命令不存在,请把 pip3 命令软连接到 /user/bin/pip3

初始化数据库

依次执行下面的命令:

aerich init -t settings.TORTOISE_ORM
aerich init-db

如果提示命令不存在,Windows 用户请把可执行程序所在的目录添加到系统环境变量中,Linux 和 MacOS 用户请把 aerich 命令软连接到 /user/bin/aerich

安装 aria2c

安装文件下载工具 aria2,执行 aria2c -v 验证是否安装成功。

安装部署 Nginx

部署nginx,并修改配置,location 相关配置如下:(ps: 下面 location 中的mycloud就是配置文件config.conf中的winHubBackEndPrefixWindows就是配置文件config.conf中的winHubFrontEndPrefix,可根据自己需要修改)。如果您不了解 Nginx 的配置,那么请参考本项目提供的 nginx.conf 文件;

(1)前端配置:前端文件在 web 目录里, /Windows可任意修改成你喜欢的名字

location /Windows {
alias /home/WinHub/web/;
index index.html;
}

(2)后端请求:proxy_pass 是配置文件 config.conf 中的 IP 和 端口, /mycloud可任意修改成你喜欢的名字

location /mycloud {
proxy_pass http://127.0.0.1:15200;
proxy_set_header Host $proxy_host;
proxy_set_header lang $http_lang;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

(3)在 http 模块中,需要添加一个映射关系

map $http_upgrade $proxy_connection {
default upgrade;
"" close;
}

(4)访问 Swagger 接口页面

location /api/openapi {
proxy_pass http://127.0.0.1:15200;
}

通常nginx会限制请求体大小,需要增加配置client_max_body_size 4096M;,还有其他超时时间的配置,可自行上网查找资料修改;

启动服务

可以先尝试启动,查看能否正常启动。Windows 用户执行 python main.py,Linux 和 MacOS 用户执行 python3 main.py。如果服务正常启动,页面能正常访问,那么可以正式按照生产环境的方式启动了。

Linux 和 MacOS 用户执行sh startup.sh,如果提示 gunicorn 命令不存在,请把 gunicorn 命令软连接到 /user/bin/gunicorn。停止请执行 sh shutdown.sh

Windows 用户部署起来比较麻烦,需要添加启动服务。首先需要修改 generate_service.py 代码中的端口号,在代码中的第14、15行,按需修改即可;然后需要安装 pywin32 包,执行 pip install pywin32;最后直接在 start.bat 文件右键->以管理员身份运行,运行成功后等 30s 即可,此时可以在 Windows 服务列表中找到一个名叫 WinHubService 的服务。如需删除服务,可直接在delete.bat 文件右键->以管理员身份运行。

手动一步一步部署:以管理员身份打开 CMD,进入到项目所在的目录,执行 python generate_service.py install 生成 Windows 服务,此时查看 Windows 服务,可以看到一个名叫 WinHubService 的服务,然后可以执行以下命令:

# 启动服务
sc start WinHubService 或者 python generate_service.py start

# 停止服务
sc stop WinHubService 或者 python generate_service.py stop

# 删除服务
sc delete WinHubService 或者 python generate_service.py remove

注意:Windows 下执行这些命令时,必须以管理员身份打开 CMD 执行。由于种种原因,Windows 下该服务不支持停止,手动停止后,还会自动拉起,但是可以在任务管理器中停止掉。

由于不知道的原因,Windows 下启动服务后,需要等 30s 左右,系统才可用,Linux 和 MacOS 则无此问题。

用户创建

为了避免被其他人恶意创建账号,页面未放开创建账号的入口,具体详见 3.1 创建用户

http://IP:Port/mycloud/swagger-ui

访问页面

url 是 http://IP:Port/Windows(这里的 IP 和 端口是 Nginx 中设置的 IP 和 端口。Windows 就是第 4.6 步中的前端配置的 location)

安装 FFmpeg

如果你需要使用 Karaoke 的功能自建曲库,那么还需要安装 FFmpeg,具体配置流程可参考《自建家庭 KTV》中的安装 FFmpeg 的部分。

如果你需要下载 m3u8 文件并合成视频,那么你也需要使用 FFmpeg。

部署 TURN 服务

如果你需要基于 WebRTC 的视频聊天功能,那么你需要安装 TURN 服务器

推荐部署方案

1、首先要有公网 IP,IPv4 地址有限,很难分配到固定的 IP,但是 IPv6 地址无限多,可以要求宽带运营商给你分配公网 IPv6,使用 IPv6 的一个弊端是:如果你连接的 WIFI 的路由器关闭了 IPv6,那么就无法访问;但现在手机网络是默认支持 IPv6 的。如果你有带公网 IP 的云服务器那就更好了,买云服务器的钱比开百度网盘会员的钱要便宜的多得多,而且有公网 IP,还可以干其他很多有趣的事情;

2、树莓派,用于部署网盘服务,可根据自己的需求买对应配置的树莓派,500 元左右就可以买一个差不多配置的树莓派了,咸鱼上可能更便宜。树莓派 24h 开机,一个星期的耗电量大约不到 1 度电;高配置的树莓派还可以用来当电脑、电视、机顶盒用哦,就看你的动手能力有多强了;当然了,其他主机/服务器也是可以用的;

3、硬盘,自己可以买一个几T的机械硬盘存储数据,现在机械硬盘也很便宜;土豪可以用固态硬盘,也不是很贵;



……