NAS+闲置笔记本局域网下组服务器

在部署了N个docker服务后,我的极空间Z4CPU性能终于是被榨的一点不剩了,还想继续折腾怎么办,一是升级新款Z423,看了眼价格还是算了;二是服务和存储分开,搞个专门的服务器用来部署服务,NAS回归到它原本的定位上只用来做网络存储,刚好有台闲置的Windows笔记本搞起!

Windows 11 docker安装和使用

安装docker

安装流程可以参考官方文档, 安装完wsl里会多出两个docker的linux分发版,如过自己没有用wsl安装过分发版,后续拉取镜像启动镜像都会基于这两个分发版,默认是arm架构的,有些镜像可能没有支持arm架构芯片,所以我又用wsl安装了Ubuntu。

C:Usersvector>wsl -l -v NAME STATE VERSION * Ubuntu Stopped 2 docker-desktop Stopped 2 docker-desktop-data Stopped 2

wsl需要访问github可能需要代理或者绑定host,安装完后在docker设置里打开

NAS+闲置笔记本局域网下组服务器-图1

打开后进入Linux命令行就可以直接使用docker了,在命令行拉取启动镜像,windows下docker管理界面会同步更新。

C:Usersvector>wsl

Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.133.1-microsoft-standard-WSL2 x86_64)
vector@DESKTOP-62URPQ2:/mnt/c/Users/vector$docker --version

Docker version 25.0.1, build 29cf629

挂载smb

这里安装ubuntu还有一个原因:默认的那两个docker分发版不支持挂载远程smb。ubuntu下执行下面两条命令用来安装挂载smb相关的依赖:

sudo apt update sudo apt-get install smbclient cifs-utils

执行以下命令进行挂载,挂载时需要指定权限,不然会导致只有root用户有写权限,其他用户包括docker服务都没有写权限:

mkdir /mnt/zkj // 创建挂载目录 sudo mount.cifs //192.168.1.4/nvme2-1XXXXXXXXX7/docker /mnt/zkj -o username=1XXXXXXXXX7,password="xxxxxx",uid=1000,gid=1000,iocharset=utf8,rw,dir_mode=0777,file_mode=0777 //执行挂载

挂载完后就可以正常映射目录到docker镜像里了,比如启动的wikijs的镜像,这样服务运行在windows服务器上, 存储在局域网下的NAS上

docker run -d -p 3080:3000 --name wiki --restart unless-stopped -v /mnt/zkj/docker/wikijs/data/db:/wiki/data/db -v /mnt/zkj/docker/wikijs/data/content:/wiki/data/content -e "DB_TYPE=sqlite" -e "DB_FILEPATH=/wiki/data/db/db-back.sqlite" requarks/wiki:latest

权限问题

上面wsl下的Linux直接挂载smb会有个文件权限问题,导致sqlite无法使用,就上面那个例子容器启动会一直报[SQLITE_BUSY] The database file is locked,解决办法是使用Widows的文件系统

  • 在windows下先挂载smb

NAS+闲置笔记本局域网下组服务器-图2
  • 映射到磁盘

右键此电脑唤出菜单,点击将刚挂载的smb映射到磁盘上

NAS+闲置笔记本局域网下组服务器-图3NAS+闲置笔记本局域网下组服务器-图4

映射为windows磁盘后,在wsl ubuntu里挂载这个磁盘

mkdir /mnt/e sudo mount -t drvfs E: /mnt/e

启动后自动挂载:编辑sudo vi /etc/fstab添加一行下面的内容

E: /mnt/e drvfs defaults 0 0

使用新的目录映射启动容器就可以了,如果没有识别的挂载的目录,可以重启下windows的docker服务

docker run -d -p 3080:3000 --name wiki --restart unless-stopped -v /mnt/e/wikijs/data/db:/wiki/data/db -v /mnt/e/wikijs/data/content:/wiki/data/content -e "DB_TYPE=sqlite" -e "DB_FILEPATH=/wiki/data/db/db-back.sqlite" requarks/wiki:latest

总结

如果NAS性能跟得上,完全可以都在NAS上搞,不过这种性能的NAS也就不是传统意义的上的NAS了,更像是定制化的服务器。如过NAS性能不足又不想花钱搞升级可以整个单独的服务器,使用闲置的笔记本或者mini主机跟NAS组个局域网。

参考

  • https://github.com/microsoft/WSL/issues/4689

  • https://github.com/sqlitebrowser/sqlitebrowser/issues/2142

  • WSL 上的 Docker 容器入门 | Microsoft Learn

  • wsL2中挂载windows下的网络硬盘 | madgd's blog

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

转载请说明出处 内容投诉内容投诉
南趣百科 » NAS+闲置笔记本局域网下组服务器

南趣百科分享生活经验知识,是您实用的生活科普指南。

查看演示 官网购买