本文已经更新为 使用cloudreve和davfs 搭建多合1 文件中心 :https://dev.leiyanhui.com/pve/lxc-nas-core-cloudreve
2023年6月30日 补充:因cloudreve 的webui其实完成度并不高,office的wopi也有一些问题,issues基本停滞在你提你的作者自己有自己的想法,或者说压根无人处理的状态。 我最终选了filerun 并搭上了filerun的最后一班免费10用户的车。nextcloud 因为web界面一直卡卡的感觉处于备用状态。自己尝试用go 或者rust重写一个webui来用,但是尚未有太多进展。 核心的webdav sftp smb 我全部改为rclone server实现。具体站内搜索。
本文 是 pve lxc 搭建nas 的系列文章 的一部分。 因为篇幅较长,所以分开。
原文索引 :https://dev.leiyanhui.com/pve/lxc-nas
本文主要内容 是 直通 硬盘 以及配置 smb sftp webdav 相关 nas的基础应用。
alpine 容器的创建和基本配置
原文索引 :https://dev.leiyanhui.com/pve/lxc-nas
安装sudo nano
1
2
3
4
| # 用更加轻量的doas 替代sudo nano替代vi lxc 内运行
apk add doas nano
apk del vim
ln -s /usr/bin/doas /usr/bin/sudo #替代sudo
|
添加用户
先添加一个用户 作为 三个服务的登录用户 并给他sudo权限,lxc 内运行
1
2
3
| adduser -g yanhui
adduser yanhui -G wheel #添加用戶到wheel 输入密码
echo "permit persist :wheel">/etc/doas.d/doas.conf #把用户添加到doas
|
配置磁盘目录所有者权限
1
| chown -R yanhui:wheel /mnt/sda1
|
开启配置sftp smb webdav
sftp
直接安装openssh ,不推荐dropbear
1
2
3
| apk add openssh
rc-update add sshd boot
service sshd restart
|
smb
1
2
3
4
| apk add samba
rc-update add samba
smbpasswd -a yanhui # 配置用户的 smb密码
rm -rf /etc/samba/smb.conf && nano /etc/samba/smb.conf
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| # nano /etc/samba/smb.conf 编辑完成后重启 samba start
[global]
allow insecure wide links = yes
workgroup = WORKGROUP
dos charset = cp866
unix charset = utf-8
[cloudreve]
path = /mnt/sda1
writable = yes
write list = yanhui
valid users =yanhui
display charset = UTF-8
unix charset = UTF-8
dos charset = cp936
#下面这段给pve挂载用 mkdir /mnt/sda1/pve
[pve]
path = /mnt/sda1/pve
writable = yes
write list = yanhui
valid users =yanhui
display charset = UTF-8
unix charset = UTF-8
dos charset = cp936
|
1
| rc-service samba restart #重启
|
windows资源管理器 打开 \\10.1.1.80
即可访问,windows无法发现,是因为没有开始 wdds,需要的话继续
wsdd
wsdd 就是 是 smb的网络发现服务。alpine仓库自带
https://github.com/christgau/wsdd
1
2
3
| apk add wsdd
rc-update add wsdd boot
service wsdd restart
|
webdav
选择最熟悉的nginx来处理。nginx搭建的webdav有一些小问题。 推荐使用 cloudreve
cloudreve搭建网盘 :https://dev.leiyanhui.com/pve/lxc-cloudreve
1
2
| apk add nginx nginx-mod-http-dav-ext openssl nginx-mod-http-headers-more
echo "yanhui:$(openssl passwd 123456)" >/etc/nginx/.passwords.list # 这个用户和系统用户完全不相关,只是重名
|
配置nginx运行用户
1
| nano /etc/nginx/nginx.conf # 把 user nginx; 这行注释掉,添加一行 user yanhui wheel; access_log 这行如果不需要日志也注释掉
|
nginx一些小问题
首行添加一行
1
| load_module /usr/lib/nginx/modules/ngx_http_headers_more_filter_module.so;
|
后面添加一段,http部分
1
2
3
4
| map $http_destination $webdav_dest {
~*https://(.+) http://$1;
default $http_destination;
}
|
创建webdav用户,通过上面的ngin.conf 我们知道 alpine下配置文件 在 /etc/nginx/http.d/
1
2
| mv /etc/nginx/http.d/default.conf /etc/nginx/http.d/default.conf-bak
nano /etc/nginx/http.d/webdav.conf
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| server {
listen 80; #这个端口号如果要用80 需要另外处理一下/etc/nginx/nginx.conf
server_name localhost;
#打开目录浏览功能
autoindex on;
#默认为on,显示出文件的确切大小,单位是bytes
#显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_exact_size off;
#时间显示默认为off,显示的文件时间为GMT时间。
#改为on后,显示的文件时间为文件的服务器时间
autoindex_localtime on;
add_header Cache-Control no-store; #让浏览器不保存临时文件
# 设置使用utf-8编码,防止中文文件名乱码
charset utf-8;
# 默认存放文件的路径
root /mnt/sda1;
auth_basic realm_name;
# 用户密码文件存放位置
auth_basic_user_file /etc/nginx/.passwords.list;
# dav 允许的操作
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
# 创建文件的默认权限
dav_access user:rw group:rw all:r;
# 临时文件位置
client_body_temp_path /tmp;
# 最大上传文件限制, 0表示无限制
client_max_body_size 0;
# 允许自动创建文件夹(如果有需要的话)
create_full_put_path on;
}
|
1
2
3
| rc-update add nginx
rc-service nginx start
nginx -s reload # 重载
|
Windows下挂载webdav 建议用第三方工具 (RaiDrive CyberDuck WinSCP), 默认不支持 非https,大文件 写入有问题
清理和备份
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| echo "===========================" >> /etc/issue
echo "==== nas core ====" >> /etc/issue
echo "===========================" >> /etc/issue
echo "===========================" >> /etc/motd
echo "==== nas core ====" >> /etc/motd
echo "===========================" >> /etc/motd
echo "/etc/doas.d/doas.conf" >> /etc/motd
echo "/etc/samba/smb.conf " >> /etc/motd
echo "WebDav paswd /etc/nginx/.passwords.list ">> /etc/motd
echo "/etc/nginx/nginx.conf">> /etc/motd
echo "/etc/nginx/http.d/webdav.conf">> /etc/motd
echo "===========================" >> /etc/motd
echo "rc-service samba restart" >> /etc/motd
echo "rc-service nginx restart" >> /etc/motd
echo "rc-service sshd restart" >> /etc/motd
echo "===========================" >> /etc/motd
rm -rf /var/cache/apk/*
rm .ash_history
poweroff
|
lxc 关机备份,备份完成后 系统只有区区的 37M 舒服
webdav套ssl
我这里用一个单独的lxc运行 nginx和acme.sh
详情查看 :https://dev.leiyanhui.com/pve/lxc-ssl