pve下使用lxc 直通硬盘搭建 nas 服务 全面替代群晖 freenas OMV 等 核心 之 smb sftp webdav

本文已经更新为 使用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

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计