2023年6月30日 补充:因cloudreve 的webui其实完成度并不高,office的wopi也有一些问题,issues基本停滞在你提你的作者自己有自己的想法,或者说压根无人处理的状态。 我最终选了filerun 并搭上了filerun的最后一班免费10用户的车。nextcloud 因为web界面一直卡卡的感觉处于备用状态。自己尝试用go 或者rust重写一个webui来用,但是尚未有太多进展。 核心的webdav sftp smb 我全部改为rclone server实现。具体站内搜索。
cloudreve 是优秀的国产开源程序,使用golang写的,轻量高性能,3.7版本以后开始支持 wopi扩展office在线编辑。而且可以直接加ssl 以及对象储存支持等
要说缺点。。。就是ios客户端 收费。。。不过有第三方webdav 客户端这个也不算太大缺点。
但是 cloudreve 貌似不支持默认路径储存,也就是无法和smb无缝配合,而且他的数据库功能也就限制了,你要使用smb的话,就必须要要 先挂载webdav 再开启smb套娃…
买断的话 实际最少价格 是 399 + 398 不便宜,不过好在免费版本也可以用
本文主要内容
利用 几个开源golang程序 搭建 轻量但是灵活高性能nas
cloudreve 搭建在线web网盘和webdav,acme.sh获取域名证书,rclone挂载到本地,samba wsdd搭建smb,openssh搭建sftp
alpine的配置
宿主机器 依旧是使用lxc的alpine alpine 容器的创建和基本配置 :https://dev.leiyanhui.com/pve/lxc-nas
创建特权容器 10000 ,模板 alpine 3.17 ,磁盘0.5G cpu12核 ,内存 1024 swap 0 开dhcp 并且在选项里面 打开 嵌套 和fuse。
挂载 pve上的物理过来
1
2
| pct set 10000 -mp0 /dev/sda1,mp=/mnt/sda1
pct start 10000 #启动
|
其他修改源 时区 还有常用工具安装 参考 https://dev.leiyanhui.com/pve/lxc-nas
安装 cloudreve
1
2
3
4
5
6
| cd /mnt/sda1
apk add wget
wget https://github.com/cloudreve/Cloudreve/releases/download/3.7.0/cloudreve_3.7.0_linux_amd64.tar.gz
tar -zxvf cloudreve*.tar.gz
rm -rf LICENSE README* cloudreve*.tar.gz
./cloudreve
|
启动后会自动显示 端口和 用户密码等
1
2
| [Info] 02-13 14:38:39 Admin user name: admin@cloudreve.org
[Info] 2023-02-13 14:38:39 Admin password: HMLXclhK
|
cloudreve 的本机储存 是放在同目录的upload目录下,所以。。cloudreve 可以直接放到 lxc直通硬盘里面。
配置cloudreve本地储存路径
这个步骤可以省略,我这里直接放到了/mnt/sda1/ 并在 另外一个容器中用duplicati+alist 整体备份sda1 到阿里云盘
1、增加一个本地储存策略 名称“本地机械硬盘” /mnt/sda1/cloudreve/{uid}/{path}
2、修改对应用户组 储存策略 为 “本地机械硬盘”
alpine下配置自动启动和守护
用supervisor 更简单一些
1
2
3
| apk add supervisor nano
rc-update add supervisord boot
service supervisord restart
|
初始化配置文件
1
2
| echo_supervisord_conf > /etc/supervisord.conf
nano /etc/supervisord.conf
|
编辑或者添加文件末尾两行
1
2
| [include]
files = /mnt/sda1/conf/supervisor/*.ini
|
1
2
| mkdir -p /mnt/sda1/conf/supervisor/
nano /mnt/sda1/conf/supervisor/cloudreve.ini
|
根据自己的情况配置 注意这个文件是ini格式的
1
2
3
4
5
6
7
8
| [program:cloudreve]
directory=/mnt/sda1/
command=/mnt/sda1/cloudreve
autostart=true
autorestart=true
;stderr_logfile=/tmp/cloudreve.err
;stdout_logfile=/tmp/cloudreve.log
environment=CODENATION_ENV=prod
|
管理
1
2
3
4
5
| supervisord -c /etc/supervisord.conf
supervisorctl start cloudreve
supervisorctl restart cloudreve
supervisorctl stop cloudreve
supervisorctl status cloudreve
|
配置ssl
我这里为了避免麻烦,直接用cloudreve+acme.sh
acme.sh
安装
1
2
| apk add curl openssl
curl https://get.acme.sh | sh -s email=joyanhui@qq.com
|
acme.sh 依赖openssl,国内手动安装
1
2
3
4
5
6
| apk add wget unzip
cd ~
wget https://ghproxy.com/https://github.com/acmesh-official/acme.sh/archive/refs/heads/master.zip
unzip
mv acme.sh-master .acme.sh
rm -rf master.zip .acme.sh/.githu
|
配置dns
我这里用的dnspod,先登录到 dnspod 账号, 生成你的 api id 和 api key, 这个简单,自己看dnspod操作即可
末尾添加
1
2
3
| export DP_Id="1243354"
export DP_Key="XXXXXXXXXXXXXXXXXXXX"
alias acme.sh=/root/.acme.sh/acme.sh
|
启用和测试
1
2
| source /etc/profile
echo $DP_Id
|
创建证书
1
| acme.sh --register-account -m joyanhui@qq.com --issue --dns dns_dp -d jia.leiyanhui.com -d *.jia.leiyanhui.com
|
其他参数
1
| --server letsencrypt # 更换letsencrypt证书,默认是zerossl的
|
检查计划任务, 顺带修改一下时间,避开高峰期。
1
2
3
| crontab -e
========
20 14 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
|
配置cloudreve 使用ssl证书
conf.ini
添加一段
1
2
3
4
| [SSL]
Listen = :5213
CertPath = /root/.acme.sh/jia.leiyanhui.com_ecc/fullchain.cer
KeyPath = /root/.acme.sh/jia.leiyanhui.com_ecc/jia.leiyanhui.com.key
|
重启 supervisorctl restart cloudreve
打开 https://10.1.1.80:5213/
查看 当然证书肯定是有问题的,但是可以看到证书对应到域名了。
进阶
数据库
文件多,或者用户数比较多的情况下,最好启用mysql数据库。
在线编辑office
使用wopi https://dev.leiyanhui.com/pve/lxc-nas-office
其他问题
目前cloudreve webdav上传的文件不能自动创建缩略图,作者表示3.8版本会修复。
本机挂载webdav 为smb和sftp准备
创建webdav密码
cloudreve的webdav密码是独立的,帐号是和用户名的邮箱通用的。
前台登录后,点击 链接 webdav 创建新帐号,输入备注,然后密码是自动生成的,用户名是当前用户。
挂载
rclone
davfs2 的挂载后有一些小问题,不太确定原因。推荐使用rclone
1
2
3
4
5
6
7
| curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
cd rclone-*-linux-amd64
cp rclone /usr/bin/
chown root:root /usr/bin/rclone
chmod 755 /usr/bin/rclone
rclone config #按照提示创建一个webdav节点 名称 cloudreve,vendor选择nextcloud就行,按照提示配置账户密码,其他默认
|
rclone的配置文件如下
1
2
3
4
5
6
| [cloudreve]
type = webdav
url = https://外网地址:5213/dav
vendor = nextcloud
user = 你的邮箱
pass = 加密后的密码
|
手动挂载
1
2
3
| mkdir /mnt/dav
apk add fuse
rclone mount cloudreve:/ /mnt/dav
|
开机自动挂载
这里一方面 需要开机自动运行,一方面还需要cloudreve启动后 才可以。
证书忽略 --insecure
或者 -k
1
2
| serv_http_code=`curl -I -k -m 10 -o /dev/null -s -w %{http_code} https://localhost:5213/`
echo $serv_http_code
|
创建一个脚本 nano /etc/local.d/mount_webdav.start
后台启动一个脚本
1
| sh /mnt/sda1/mount_webdav.sh &
|
chmod +x /etc/local.d/mount_webdav.start
以及一个shell用来判断cloudreve的状态,如果没启动 那么尝试去启动,代码很简单。
nano /mnt/sda1/mount_webdav.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| while :
do
serv_http_code=`curl -I -k -m 10 -o /dev/null -s -w %{http_code} https://localhost:5213/`
echo "检查cloudreve状态:"${serv_http_code}
if [ "$serv_http_code" -eq "200" ];then
if grep -qs '/mnt/dav' /proc/mounts; then
echo "已经挂载 不需要做任何事情"
echo "备份数据库文件" && cp /root/cloudreve.db /mnt/dav/
else
echo "未曾挂载,尝试挂载"
nohup rclone mount cloudreve:/ /mnt/dav &
sleep 3
#echo "备份数据库文件" && cp /root/cloudreve.db /mnt/dav/
fi
else
umount /mnt/dav
supervisorctl restart cloudreve
fi
sleep 10
done
|
1
2
| rc-update add local #添加一个local
service local restart
|
重启测试,ls /mnt/dav
应该可以看到 lost+found 那就是没问题了。
配置smb
1
2
3
4
5
6
7
8
| apk add samba
rc-update add samba
smbpasswd -a root # 配置用户的 smb密码 注意这个用户和运行cloudreve的用户 必须是同一个 否则会有权限冲突。
apk add wsdd #发现服务
rc-update add wsdd boot
service wsdd restart
# 创建一个文件夹给 pve用 `mkdir /mnt/dav/pve-node`
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
24
25
26
27
28
29
30
31
| # nano /etc/samba/smb.conf 编辑完成后重启 samba start
[global]
allow insecure wide links = yes
workgroup = WORKGROUP
dos charset = cp866
unix charset = utf-8
[webdav]
path = /mnt/dav
writable = yes
write list = root
valid users = root
display charset = UTF-8
unix charset = UTF-8
dos charset = cp936
[sda1]
path = /mnt/sda1
writable = yes
write list = root
valid users = root
display charset = UTF-8
unix charset = UTF-8
dos charset = cp936
#下面这段给pve挂载用 mkdir /mnt/sda1/pve
[pve-node]
path = /mnt/dav/pve-node
writable = yes
write list = root
valid users = root
display charset = UTF-8
unix charset = UTF-8
dos charset = cp936
|
1
| rc-service samba restart #重启
|
windows下应该可以直接能访问了。如果不可以 可能需要 重启几次。
sftp配置
1
2
3
| apk add openssh
rc-update add sshd boot
service sshd restart
|
允许root 密码登录
1
2
| # nano /etc/ssh/sshd_config 添加或者编辑下面内容 然后重启 service sshd restart
PermitRootLogin yes
|