社区主页 文章详情

debian + nextcloud 想说爱你不容易

Kyriosli 11-28 21:57 + 关注

小编注:此篇文章来自#原创新人#活动,成功参与活动将获得额外100金币奖励。

前言

在我心目中一直有一个完美的 NAS,它与众不同最时尚(跳舞一定棒),既能满足我的折腾欲望,又可以丰富日常生活,传传照片听听音乐岂不美哉。然鹅从N年前买 Gen8 然后弃坑到今年重拾起来接盘蜗牛并折腾了好久黑裙,总感觉差点意思(在这里不得不吐槽 DS Photo 的渣体验,直接劝退),个中纠结踩坑不足为外人道也。

直到前两天,决定转开源 NAS,先是试了下水 freenas,准备装 nextcloud 试试,结果被插件安装不上劝退,然后重拾了我最爱的 debian

啊~回到了熟悉的 debian 怀抱,一切都变得那么顺其自然,无论是磁盘挂载、远程登录、安装软件等(一开始我还哼哧哼哧装了 OMV,最后发现并不是我想要的,于是就纯命令行了)。

本文会记录为了达到最佳体验,折腾中的方方面面,值友们请自取所需,不必墨守成规一步步来。

一、公网 IP + 动态解析

要达到最佳体验,肯定还是公网 IP 最好。无论是转发式还是打洞式的内网穿透(包括白裙的 quickconnect),体验都比不上有一个公网 IP。我因为用的联通光纤所以问题非常简单:打 10010 要求改成公网 IP,搞定。

最早用联通和电信的光纤都是有公网 IP 的,不过后来联通鸡贼了,给用户默认是 10.xx.xx.xx 的内网地址,不过还好打客服就能改回去,客服很痛快,看起来也不是第一次被提这个要求了,很快就搞定了

至于动态解析我是采用的阿里云 DNS。道理很简单,就是通过调用 API 来更新解析记录。最早在折腾 Gen8 年代,我就写过一个脚本,后来还封成插件挂到了 KoolShare 上(没错第一版 aliddns 就是我写的)。不过因为 KoolShare 的插件运行机制有问题经常挂掉,所以后来就还是直接走脚本了。

当然,阿里云 DNS 其实是动态解析里的 hard 模式,easy 模式还是很多的,很多路由器都自带这个功能,好不好用另说,肯定没这么折腾。这里简单做个对比:

那么下面我们就简单概括下阿里云 DNS 做动态解析的过程和原理:

第一步 拥有一个自己的域名

是的!这是一切的前提。当然这不会花太多钱。只要不选主流的 .com/.net/.cn 域名,你只需要花一顿盒饭的钱,就能买下一个域名 1 年的使用权。具体报价可以参考这里

建议一次性买断10年,.press 只要 ¥149,.site/.website/.space 也只要 ¥179。

debian + nextcloud 想说爱你不容易

第二步 设置 DNS 解析

如果以前没有在阿里云买过域名,新注册的域名需要过实名认证才能开通解析。实名认证也很简单,支付宝扫一下就可以了。

必须实名认证才能解析必须实名认证才能解析

接下来打开云解析控制台,应该可以看到你的域名,已经可以解析了。

自动更新 IP 就是通过调用云解析的 API 来设置域名的解析。API 认证通过 AccessKey 实现,我们可以打开阿里云的 AccessKey 界面,创建新的 AccessKey,记录下 key 和 secret,用在下一步的脚本里。

第三步 自动更新 IP

不愿意折腾脚本的同学可以看下自己的路由器应用市场有没有 aliddns。没有的话也没关系,可以自己在路由器上或者 nas 服务器上布置一个定时脚本。定时脚本的功能就是定时的取本机的公网 IP,跟 DNS 服务器设置的 IP 对比,如果不匹配,就更新一下。

脚本的内容可以从这里得到,你需要手动修改一些配置并进行测试。具体的如何远程登录、编辑或上传文件到路由器或服务器等在这里不再赘述。

需要注意两点:

  1. 这个脚本是在路由器的 shell 环境里测试通过的,在别的平台上没有详细测试过,或许会有兼容性问题。如果你想移植到别的平台,或者用其它语言改写,可以联系我

  2. 路由器的文件系统一般是只读的 squashfs,也就是说直接将文件上传到普通目录是不允许的,或者断电会丢失。这时候需要配合 jffs 分区或者外部存储(如 u 盘、SD 卡等)来进行持久化存储。

测试成功后,需要设置定时触发脚本。一般有 crontab 等方法。需要注意的是,一般路由器的 crontab 也是断电不可保存的,所以需要使用系统的定时脚本等功能。

二、安装 debian

debian 的安装教程很多,在这也不再赘述。我推荐的方案是网络安装,只装系统基础组件和 ssh server。作为一个装 debian 老手,在这里只告诉你们一点人生的经验:

选择镜像

安装的时候一定要选好镜像,可以预先测一下速度,看国内的哪个镜像最快。可选的镜像有:

分区的时候建议把 /boot、/home、/var 都分割出去,方便系统重装。以一个 128G 的启动盘为例,可以大致这样去分割:

安装必须软件

安装完成后,一些趁手的工具是必要的,下面是一些系统默认不会装的软件,且都不大,可以自行无脑安装:

NAT 穿透

很多时候服务器放在路由器的后面,为了让服务在外网可以访问,需要做 NAT 穿透配置。在这里我只想说:DMZ 大法好!只需要在路由器里设置一下服务器的内网 IP,就可以一键转发所有服务了

在联通光猫上设置 DMZ 的地方在联通光猫上设置 DMZ 的地方

三、安装 nextcloud

致到此还没被劝退的值友一句话:恭喜你终于坚持到了这一步,下面的步骤可能更麻烦!nextcloud 虽然架构简单,但是要玩转还是需要一些功夫,我们一步步来看一下:

安装 nginx

虽然网上的教程倾向于使用 Apache,但是我建议使用 nginx,毕竟效率更高,配置逻辑更简单,而且对 HTTP/2 支持更好:

sudo apt-get install -y nginx-light

安装完成后,可以试试访问下服务器的 80 端口是否启动成功。nginx 要想达到最佳效果,需要设置 worker thread 等,但默认设置已经很好用了,所以在这里就不再赘述。

申请 HTTPS 证书

很久很久以前,这是一个可以当恐怖故事讲的事情,但是现在不用了,我们有 letsencrypt ! letsencrypt 是一个免费证书提供网站,网上有很多教程。通过上一步安装的 nginx 可以完成你的域名的所有权认证,从而发给你证书,不过这个对我不适用,因为联通不允许 80 端口提供服务。所以我使用了 DNS 认证方法。

讲真,证书的申请是一件非常麻烦的事情,需要生成私钥、创建证书签发请求、签名等步骤,非常适合劝退初学者。不过现在好了,letsencrypt 提供一个命令行工具 certbot 来完成所有工作:

apt-get install -y certbot

certbot certonly --manual --preferred-challenges dns -d kyrios.site

上面的命令会本地生成私钥和签发所需的文件,并向服务器请求签发。服务器会随机生成一段文本,并让你设置到你的 DNS 服务器上

certbot 请求证书certbot 请求证书

下面,打开阿里云的云解析控制台,在域名里添加一条 TXT 记录,子域名为 _acme-challenge,值为上面的验证文本:

debian + nextcloud 想说爱你不容易

使用其它 DNS 提供商的同学可以用相应的方法进行设置。

设置成功后,可以在另一个终端通过命令行验证一下:

nslookup -q=txt _acme-challenge.kyrios.site

验证通过后,按回车继续证书生成过程。生成好的证书会放在 /etc/letsencrypt/ 下面。建议将证书拷贝到其它目录以供使用和备份:

cp -R /etc/letsencrypt/archive/kyrios.site/ /var/www/

我们在 nginx 默认服务器里改一下配置,试试能不能通过浏览器验证:

nginx 配置证书nginx 配置证书

配置成功后,运行 systemctl reload nginx.service,如果启动成功,可以访问下 https://你的域名:8443 试下是否配置成功了,证书是否有效:

证书有效期只有3个月,到期需要重新更新证书证书有效期只有3个月,到期需要重新更新证书

如果你的机器和 nas 在同一子网内,因为域名解析的地址是路由器的外网地址,所以相当于请求从路由器的外网接口上走了一圈又回到内网,这种技术叫 NAT loopback,有的路由器是不支持的。如果你发现内网无法 ping 通路由器的外网 IP,可以在机器上改 hosts 文件,将你的域名解析改为 nas 服务器的内网地址。当然,如果使用 OpenWrt 等智能路由器,也可以在路由器上设置一下 DNS 解析强制覆盖,让内网环境内始终解析为内网 IP

安装数据库

nextcloud 使用 mysql 存储文件索引等信息,当然在 debian 里面我们需要安装 mariadb。运行以下命令安装 mariadb:

  1. 安装数据库服务
    apt-get install -y mariadb-server

  2. 优化数据库安全性
    mysql_secure_installation

  3. 创建数据库
    CREATE DATABASE nextcloud;

  4. 添加数据库用户
    CREATE USER nextcloud@localhost identified by 'nextcloud';

  5. 设置数据库用户权限
    GRANT ALL PRIVILEGES on nextcloud.* to nextcloud@localhost;
    FLUSH privileges;

安装 php

废话不多说:

apt-get install -y php php-cgi php-fpm php-curl php-apcu php-gd php-imagick php-intl php-mbstring php-mysql php-xml php-zip

当前的 php 版本是 7.3,所以生成的配置文件在 /etc/php/7.3/ 下面。我们需要修改以下配置:

/etc/php/7.3/fpm/pool.d/nextcloud.conf:

[nextcloud]
user =www-data
group =www-data
listen = /run/php/php7.3-fpm-nextcloud.sock
listen.owner =www-data
listen.group =www-data
listen.mode = 0600

pm = ondemand

pm.max_children = 25

pm.process_idle_timeout = 10s

chdir = /var/www/nextcloud


php_value[include_path] = ".:/usr/share/php:/var/www/nextcloud"
php_value[upload_max_filesize] =1024M
php_value[post_max_size] =1024M
php_value[expose_php] = Off
php_value[default_socket_timeout] = 300
php_value[max_execution_time] = 300
php_value[memory_limit] = 512M

php_value 也可以通过 php.ini 进行配置,不过我们写在了一起,方便维护

然后,修改 nginx 配置文件,让你的域名指向 php:

/etc/nginx/sites-available/nextcloud:

server {

listen 8080;
listen 8443 ssl http2;
server_name kyrios.site;
ssl_certificate /var/www/kyrios.site/cert1.pem;

ssl_certificate_key /var/www/kyrios.site/privkey1.pem;
root /var/www/nextcloud;

location / {

index index.php;

}

location ~ .php {

fastcgi_intercept_errors on;


fastcgi_split_path_info ^(.+.php)(/.+)$;

fastcgi_pass unix:/run/php/php7.3-fpm-nextcloud.sock;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi.conf;

}

}

然后,分别重启 php-fpm 和 nginx:

systemctl restart php7.3-fpm.service ; systemctl reload nginx.service

如果 php-fpm restart 不成功,有可能是之前的 sock 文件是其它用户创建的,www-data 用户无法修改。手动删除文件即可

安装 nextcloud

终于到了这一步!由于 nextcloud 网上安装教程非常多,我们这里就不浪费大家流量贴一堆图片了,简述下安装过程。由于软件版本随时可能升级,请大家自行下载最新版

  1. 下载安装脚本
    cd /var/www/
    wget https://download.nextcloud.com/server/releases/nextcloud-17.0.1.zip
    unzip nextcloud-17.0.1.zip
    chown -Rwww-data:www-data nextcloud

  2. 访问你的域名完成安装

  3. 修改 /var/www/nextcloud/config/config.php 完成优化

检查安装

完成配置后,可以打开 nextcloud 的设置->概览页面,看看有没有一些没配好的或可以优化的选项。具体的优化选项可以根据自己的需求进行配置

四、安装插件

nextcloud 配置好后,一些好用的插件就可以安排上了。这里分享一个插件安装的技巧:如果在设置界面安装超时,可以手动下载后,解压到 nextcloud 的目录中。以 music 为例:

wget https://github.com/paulijar/music/files/3876662/music_0.11.1_nc-signed.tar.gz
tar zxf music_0.11.1_nc-signed.tar.gz -C /var/www/nextcloud/apps/

Music

在线听音乐必备,可以对音乐文件进行索引

debian + nextcloud 想说爱你不容易

Camera RAW Previews

单反/微单用户必备,可以在线浏览 ARW、RAF 等文件格式。注意服务器必须安装 ufraw-batch 软件包才能正常工作。

Preview Generator

离线生成预览工具,导入一大票文件后,通过这个插件可以主动生成缩略图,提升访问体验。具体使用方式是:

cd /var/www/nextcloud/; sudo -uwww-data ./occ preview:generate-all [--path xxx]

可以手动指定要更新的路径以加快扫描,如 --path kyrios/files/Photos

OwnBackup

将 nextcloud 的数据库表备份到文件

五、最后...再来一点人生经验

写到这里,基本上就可以用了,下面再分享一些最佳实践:

批量导入文件

如果图片或其它文件太多,一张张上传效率太低,我们可以通过文件操作批量导入进去:

  1. 将文件拷贝到 nextcloud 的 files 中,如:
    cp -R /media/usb/xxxx /media/storage/nextcloud/data/kyrios/files/Photos/

  2. 修改权限,将刚拷入的文件所有权改为www-data:
    chown -Rwww-data:www-data /media/storage/nextcloud/data/kyrios/files/Photos/

  3. 修改文件修改时间
    nextcloud 通过文件的修改时间来对文件进行索引,不会读取图片、视频的 EXIF 信息,我们可以用 exiftool 来将文件的修改时间改为 EXIF 中的创建时间:
    exiftool "-FileModifyDate

  4. 更新 nextcloud 索引
    cd /var/www/nextcloud/; sudo -uwww-data ./occ files:scan kyrios
    这里 files:scan 命令可以指定用户或者路径,如 kyrios/files/Photos.

  5. 重新生成缩略图
    如上,不再赘述


其它

由于我用的时间也不太久,暂时只有这些内容,欢迎值友们补充分享,我会加到这里

展开阅读全文

打开App,查看更多好文内容
全部评论 (48)
o铜锣烧o
2
11-29 00:01

直接dmz 你是外行还是勇士??除非你的数据根本无所谓 否则还是别这么玩

nickluchen
1
11-29 19:48

好奇为啥不用Nextcloud的Docker镜像部署啊?

BusyBox
1
11-28 22:43

和作者的折腾过程神似,不同点在于1.没用ovm是因为kernel版本的兼容问题,当时的omv在我的j3455上卡出翔,装了一晚上都没装好。2.我没作者那么幸运,联通强硬不给公网ip ,正好有台便宜的vps,只能frp曲线救国,这样就没用DDNS。3.买的阿里的便宜域名,顺便搞了个免费证书,用openssl转了pem格式(感觉lets encypt 和 self encypt像是捏着鼻子哄眼睛>。4.最终用的是ubuntu server nextcloud 我用的snap装的,简直方便一劈,不过后来挂硬盘好像碰到点麻烦,花了点时间。

njack
0
21小时前

我一开始也是想在Debian10上装pve6和omv4,一堆依赖实在没搞定。现在是直接装pve6,起omv虚机

ArthurZhou
0
21小时前

用了近一年的nextcloud,文件数量在17000+左右,上周崩了。继续转回seafile了 说到稳定和巨量文件处理 seafile是真的狠

打开App,查看更多好文和评论
猜你喜欢
编辑精选
21
241
48
你已经点过赞了
新浪微博 QQ空间 微信好友 豆瓣
当前为触屏版
热门搜索