返回
Featured image of post docker实现windows系统下的NAS

docker实现windows系统下的NAS

在谈及游戏时,我们往往会说到某某某游戏是某某某公司做的,但是从steam可以看到游戏同时存在着发行商和开发商,那么这两者有什么关系呢?

因为之后可以有深度学习的需求,所以想要搞一块硬盘,结果好巧不巧在淘宝上发现了一个210的4TB日立硬盘,这性价比应该是香的不得了了,所以忽视了ITX机箱的体积限制直接就下单并在昨天收到装了上去,由于体积过大,所以只能把机箱内部的线引出来外接,而且也没有固定措施,不过这些都不是重点。

所以现在我有一个公网、一个大硬盘、一个主机,那么能做的事情就显而易见了——做NAS!

前置任务

虽然很多人主流的nas是基于Linux系统或是群晖,但是windows下也并非不可以搞nas,这里要用到的就是docker和nextcloud这两个东西。

关于docker的安装就不多说明了,要注意的一点是windows下使用的是docker-desktop,需要安装WSL并升级到WSL2、Hyper-V(在程序与功能中开启)、bios开启虚拟化并执行虚拟化内核指令,(可能还会要求重置代理)但是上述的这些就没必要说太多了。

另一个需要的是nextcloud,作为一个开源的网盘,功能相当完整且支持各种插件(相较于群晖还是有所差距),为了减少部署中的麻烦,我们直接使用nextcloud的官方容器部署到docker中。

公网IP的需求(也可以用其它方法代替)就不需要说明了。

具体流程

拉取nextcloud镜像并运行

打开powershell,执行:

docker pull nextcloud

拉取最新版的镜像,之后运行:

docker run -d -v D:\CloudDrive\:/var/www/html -p 8080:80 nextcloud
  • -d表示后台运行
  • -v D:\CloudDrive:/var/www/html 表示将容器内的/var/www/html路径挂载到本机的D:\CloudDrive\的路径下(参考官方容器说明)
  • -p 将容器内的80端口暴露到8080

运行后等待一段时间,访问http://localhost:8080即可看到启动的网盘,稍作配置即可。

实际上部署的内容到这里就已经足够了,剩余的主要是信任域名、多次访问限制的相关内容,后面一一说明。

小问题

IP不同限制登录

直接进入挂载的目录,找到config目录下的config.php文件,在trusted-domain中添加当前访问的网址。

多次访问后被限制登录

同样是上面的配置文件,加上一行:

'auth.bruteforce.protection.enabled' => false,

即可

增加离线下载功能

网盘缺失了这个功能就不能叫网盘了,好在nextcloud也有开源的应用提供了这个功能,登入管理员账户,可以在应用搜索ocdownloader(如果找不到可以在搜索引擎中搜索nextcloud应用商店,之后将下载的tar.gz压缩包解压在app目录下)。

在完成上述操作之后就可以在应用中看到可以启用的ocdownload应用了,但是这个应用的操作是需要aria2后端的。所以还需要进入容器中安装aria2。首先需要修改nextcloud源代码中东西,具体的issue:https://github.com/e-alfred/ocdownloader/pull/247

image-20220926221959488
image-20220926221959488

完成这一步之后安装aria2,首先在powershell内进入容器:

docker exec -it 容器名 /bin/bash 
apt-get install aria2 curl php-curl
apt-get install python-pip
pip install youtube-dl
//这里可能会提示一些版本问题
mkdir /var/log/aria2c /var/local/aria2c
mkdir /root/.cache/aria2
//在该目录下载一个名为dht.dat的“索引文件”用于指明下载链接
touch /var/log/aria2c/aria2c.log
touch /var/local/aria2c/aria2c.sess
chown www-data.www-data -R /var/log/aria2c /var/local/aria2c
chmod 770 -R /var/log/aria2c /var/local/aria2c

sudo -u www-data aria2c --enable-rpc --rpc-allow-origin-all -c -D --log=/var/log/aria2c/aria2c.log --check-certificate=false --save-session=/var/local/aria2c/aria2c.sess --save-session-interval=2 --continue=true --input-file=/var/local/aria2c/aria2c.sess --rpc-save-upload-metadata=true --force-save=true --log-level=warn --disable-ipv6

执行上述指令后即可高速离线下载了,乐

RaiDrive映射到本地

这一步同样算是额外的操作了,下载RaiDrive,添加,在NAS中找到nextcloud,将自己的用户名和密码填好,唯一要注意的是路径,需要填:/remote.php/dav/files/用户名完成上述操作即可在本地看到一个大容量的磁盘:

image-20220928110804737
image-20220928110804737

在nextcloud页面端功能完善的情况下,这一操作貌似是不需要的,但是这种映射好就好在网速快的情况下可以直接运行程序和进行预览、解压缩等操作,有这种需求的可以好好试一试。

Licensed under CC BY-NC-SA 4.0