得益于MiniPC 24小时不间断加班,太适合在上面部署一些自动化下载上传以及文件管理功能了,这篇文章主要讲使用Docker来部署这些服务:
- Samba:Linux上运行它,可以把Linux映射成一个Windows磁盘,访问MiniPC文件只需要打开Windows的资源管理器
- FileBrowser:图形化文件管理器,可以部署网页管理界面到公网,相当于自建云盘
- BaiduPCS Go:命令行控制上传和下载文件到百度云
- OpenList:AList的开源版,可以挂载一系列云盘,也可以挂载本地
Samba
使用Samba可以将Linux映射为Windows的一个本地磁盘,这样Windows的软件就可以直接打开Linux的文件夹了,大大方便了我们使用命令行来管理Linux文件。
之前部署Samba是直接安装在Linux上的,后来试了试用Docker也完全可以。
Linux直接安装
-
安装Samba
sudo apt update sudo apt install samba -
编辑Samba配置文件
sudo nano /etc/samba/smb.conf首先建议把
[homes]下的所有内容注释掉,否则会自动把所有用户的~目录也一起共享出,我们可以在文本末尾添加内容来手动控制需要共享的目录[Name] path = /home/user1 browsable = yes read only = no guest ok = yes[Name]是共享文件夹的名称,会显示在Windows磁盘上 -
设置Samba账户密码
sudo smbpasswd -a user1 sudo smbpasswd -e user1 -
重启Samba服务
sudo systemctl restart smbd
Docker
-
使用Docker Compose安装Samba
services: samba: image: dperson/samba container_name: samba restart: unless-stopped ports: - "137:137/udp" - "138:138/udp" - "139:139/tcp" - "445:445/tcp" volumes: - [host_path]:/mount/home # 替换成宿主机要共享的目录路径 environment: - USERID=[your_uid] # 替换成宿主机对应用户的UID,运行`id -u`获取 - GROUPID=[your_gid] # 替换成宿主机对应用户的GID,运行`id -g`获取 command: > -u "[username];[password]" -s "[Name];/mount/home;yes;no;no;[username]"替换
[username],[password],[Name]为自己想要的值 -
Docker容器运行后会产生一些匿名卷,是正常现象
Windows
- 打开文件资源管理器
- 右键点击“此电脑”,选择“映射网络驱动器”
- 选择一个驱动器字母(例如Z:)
- 在文件夹栏中输入:
\\Linux IP Address\[Name]
FileBrowser
File Browser是一个文件浏览器,可以用于图形化地管理MiniPC上的文件。但是我比较习惯用Samba,平时还是习惯用Window的文件管理器直接打开MiniPC上的文件。
然而FileBrowser相较于Samba有一个Web管理器,因此可以将服务暴露到公网,这样我们就相当于自建了一个网盘了。假设和朋友出去玩拍了好多照片,分享的时候嫌微信无法传大文件,就可以用这个了。这样我们每次拍完照把U盘在MiniPC上一插即可。
由于是部署在公网,我们可以只把SD卡的内容挂载进去,就算被黑了MiniPC本身的文件也不会被涉及。
部署
-
本地创建一个文件夹,然后新建一个文件
database.db,修改权限touch ./database.db chown 1000:1000 ./database.db chmod 664 ./database.db -
创建
docker-compose.yml,我打算由cloudflared托管,因此接入它的网络services: filebrowser: image: filebrowser/filebrowser container_name: filebrowser restart: unless-stopped volumes: - ./data:/srv - ./database.db:/database.db expose: - "80" environment: - PUID=1000 - PGID=1000 - UMASK=022 - TZ=America/Toronto user: "1000:1000" networks: - cloudflared networks: cloudflared: external: true -
启动容器,默认用户名密码为
admin和admindocker compose up -d
修改密码
-
先停掉容器
docker compose down -
重置密码
docker run --rm \ -v $(pwd)/database.db:/database.db \ filebrowser/filebrowser \ users update User --password 12345678 --database /database.db
挂载U盘 / SD卡
-
先停止容器
docker compose down -
首先需要把U盘挂载到miniPC,如果希望手动挂载,请继续往下看,但是这里建议自动挂载(详见:使用udev自动挂载U盘 | Kunyang’s Blog),U盘插入后直接挂载到对应的文件夹。下面是手动挂载的流程:
-
假设U盘名称(Label)为
Nikon-1,我们先手动挂载在~/filebrowser/Nikon-1下,这样我们访问~/filebrowser/Nikon-1这个文件夹就是在访问我们的U盘 -
得到设备名
lsblk一般就叫
/dev/sdb1 -
创建挂载点目录
sudo mkdir -p ~/filebrowser/nikon-1 -
挂载设备
sudo mount /dev/sdb1 ~/filebrowser/nikon-1
-
-
假设我的尼康相机有两个SD卡,大疆有一个SD卡,SD卡都分别被我命名为了
nikon-1,nikon-2和dji-1。本地的miniPC挂载完成后,修改File Browser的docker-compose.yml,把逻辑卷加入volumes: - ./data:/srv - ./database.db:/database.db # 挂载SD卡 - ./nikon-1/DCIM/102NZ_FC:/srv/nikon/SD1 - ./nikon-2/DCIM/102NZ_FC:/srv/nikon/SD2 - ./dji-1/DCIM/DJI_001:/srv/dji/SD1 # 挂载服务器,不建议,如果用户名密码被破解很危险,建议使用VPN访问 - /home/username/:/srv/debian -
重启容器
docker compose up -d
BaiduPCS Go
虽然百度网盘经常被吐槽限速,但是我一直没有放弃使用百度云,因为我是比较早期的用户,一直有 2T 的存储空间,所以它非常适合用来备份一些“电子鸡肋”(比如现在相机拍一张RAW格式照片动辄就是30MB,拍的大疆视频好几个G,剪视频能有的片段很少),正好可以利用这个空间长期存放。2T的空间我现在才用了不到300G,且这种正常的视频百度云一般不会和谐。
但是百度云盘无法直接运行在Linux上,况且我的服务器连GUI都没有,因此需要一个Docker + 命令行版本的百度网盘,查了一下还真有,可以使用BaiduPCS Go。我把这个做成了Docker镜像:kyxie/baidupcs-go - Docker Image | Docker Hub
部署
-
直接运行
docker run -d -it --name baidupcs-go \ -v $(pwd)/data:/data \ -v $(pwd)/upload:/upload \ -v $(pwd)/config:/root/.config/BaiduPCS-Go \ -w /upload \ kyxie/baidupcs-go:latest -
使用Docker Compose部署(推荐)
services: baidupcs-go: image: kyxie/baidupcs-go:latest container_name: baidupcs-go stdin_open: true tty: true volumes: - ./data:/data - ./upload:/upload - ./config:/root/.config/BaiduPCS-Go # 挂载其他目录,比如U盘的目录 - /mnt/usb:/u working_dir: /upload
常见命令
-
查看容器内部文件
docker exec -it baidupcs-go /bin/sh -
进入容器,登录后显示网盘的文件
docker exec -it baidupcs-go BaiduPCS-Go -
登录
-
使用浏览器登录百度网盘
-
键盘
F12→ Application → Cookies →https://pan.baidu.com→ 找到BDUSS字段,复制
-
输入命令
login -bduss=<BDUSS>
-
-
上传,建议使用
screen,因为关闭终端有可能会暂停上传screen -S pcs-upload docker exec baidupcs-go \ BaiduPCS-Go upload <本地路径> <云盘路径> # 举例 docker exec baidupcs-go \ BaiduPCS-Go upload /nikon-1 "/照片和视频/来自:Nikon Zfc/2025 花瓶岛" docker exec baidupcs-go \ BaiduPCS-Go upload /dji-1/MP4 "/照片和视频/来自:DJI/2025 花瓶岛"可以登录到云盘之后
pwd显示云盘的路径,如果带有中文可以添加双引号。Ctrl + a,然后按d,暂时退出,不影响上传任务 -
其余详见:GitHub - qjfoidnh/BaiduPCS-Go: iikira/BaiduPCS-Go原版基础上集成了分享链接/秒传链接转存功能
MacOS文件分类命令
-
Nikon:在Mac上自动把混在一起的
.NEF文件和.JPG文件归类成两个文件夹/NEF和/JPGmkdir -p RAW JPG && mv *.NEF RAW/ && mv *.JPG JPG/ -
DJI:在Mac上自动把混在一起的
.LRF文件和.MP4文件归类成两个文件夹/LRF和/MP4mkdir -p LRF MP4 && mv *.LRF LRF/ && mv *.MP4 MP4/
OpenList
因为之前也没怎么用过AList,它被卖了之后打算试一下OpenList,使用它可以挂载不同的云盘,方便我们在一个地方管理不同云盘的内容,还可以自动下载和上传云盘的内容。相当于结合了BaiduPCS和FileBrowser吧。
部署
-
在之前Cloudflare ZeroTrust创建的Tunnel再创建一个新的public hostname,一个Example:
Subdomain: cloud Domain: example.com Type: HTTP URL: openlist:5244 -
OpenList官网有很详细的文档:Use Docker - OpenList Docs
-
同样的本地创建一个文件夹,然后创建
docker-compose.ymlservices: openlist: image: 'openlistteam/openlist:latest-aio' container_name: openlist volumes: - './data:/opt/openlist/data' - './storage:/opt/openlist/storage' environment: - PUID=1000 - PGID=1000 - UMASK=022 - TZ=America/Toronto restart: unless-stopped networks: - cloudflared networks: cloudflared: external: truelastest-aio镜像打包了一个Aria2在里面,作为默认的下载器,在OpenList里也可以配置本机自带的其他的下载器。我并没有集中用一个下载器,影音部分用的是qbit,这里用的Aria2,一方面下载电影确实适合P2P,挂在网盘则不是。另一方面qBit挂载的目录Sonarr和Radarr也得有权限访问,一旦OpenList使用qBit挂载目录配置错了会影响Sonarr的访问,因此干脆直接用两个 -
根据这篇文章:使用udev自动挂载U盘 | Kunyang’s Blog,我们可以修改
/usr/local/bin/auto-mount-usb.sh脚本,把mount_base改为~/openlist/storage -
启动容器
docker compose up -d -
产生一个临时的随机密码,使用这个密码就可以登录了,登录之后再在网页端修改密码,建议开启2FA
docker exec -it openlist ./openlist admin random
挂载本地
- 我们插入SD卡或者U盘后就会自动挂载到
storage目录下 - 在网页端 → Storage → 添加 → 本地储存
- 挂载路径就是网页内要展示的路径,比如
/SD,还可以使用多级目录,比如/SD/Nikon-2 - WebDAV策略默认本地代理
- 根文件夹目录就是容器内的目录,我设置为
/opt/openlist/storage,这样就把U盘映射出去了 - 如果没找到,则重启容器,需要在启动容器前挂载SD卡
- 挂载路径就是网页内要展示的路径,比如
挂载云盘
-
挂载百度网盘:Baidu Netdisk - OpenList Docs
- 在百度云盘点击上传打开的还是Windows的管理器,如果想直接从SD卡上传到百度云可以使用复制,从一个储存复制到另外一个,网盘见互传也可以这样,这样的话可以退役BaiduPCS Go了
-
挂载Google Drive:Google Drive - OpenList Docs
目前我只使用了这两个,文档里也有很详细的挂载其他网盘的教程。