lxc alpine下使用cloudreve替代nginx搭建webdav 并开启smb/nfs和sftp

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
vi /etc/profile

末尾添加

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
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计