nextcloud.jpg
nextcloud.jpg

因为工作需要的关系,前不久让父亲大人把我房间内积灰已久的群晖D216+寄回了杭州,折腾的心又一次在燃烧,于是才有今天的这篇教程。

nextcloud2.jpg
nextcloud2.jpg

本篇文章部分内容出于篇幅考虑,暂时略过。但有人需要,后期会考虑尽可能补充。

一些准备

1、套件安装

首先,确保群晖安装了 webstation 套件,还有php7.0套件,phpmyadmin套件,Apache2.4套件(这里我选择Apache2.4),数据库Mariadb5Mariadb10套件。不多赘述请自行去套件中心安装。

2、安装 ipkg

打开套件中心,进入设置页面,常规设置中将信任层级调整为任何开发者

1.jpeg
1.jpeg

添加ipkg的软件源。位置填写为http://www.cphub.net 名称随意。

2.jpeg
2.jpeg

套件中心搜索ipkg安装。

5.jpeg
5.jpeg

NextCloud安装

1、使用ssh终端工具登陆群晖系统后切换为root用户),进入web目录
提示:输入sudo -i切换为root用户。参考文章《群晖Nas获取root权限教程》

#这里以web目录所在的实际路径为准
cd /volume1/web/

2、下载nextcloud安装包

#安装解压工具
ipkg install unzip
#下载
wget --no-check-certificate https://download.nextcloud.com/server/releases/nextcloud-15.0.5.zip 
#解压
unzip nextcloud-15.0.5.zip

3、权限设置

将nextcloud目录所属用户和组为更改为 http 并设置0755 权限

chown -R http:http nextcloud      
chmod -R 0755  nextcloud

4、配置虚拟主机

接下来就是进入webstation设置网站信息了,端口可以自己指定,没有安装证书的,可以先用http端口。如下图:

nextcloud99.jpeg
nextcloud99.jpeg

5、创建数据库

打开phpmyadmin创建nextcloud需要的数据库,如果安装了MariaDB5MariaDB10,建议选Mariadb10

7.jpeg
7.jpeg

打开浏览器输入http://ip:端口进入安装页面,填写管理员账号密码、数据库相关信息,完成安装。需要注意:Mariadb10 端口为3307。数据库地址可以填写为 127.0.0.1:3307

8.jpeg
8.jpeg

安装完毕。

一些优化

1、建议在PHP7 核心配置文件php.ini中开启opcacheopcache file cache,对于网站性能有一定的帮助。

opcache.enable=1                          # 1→1
opcache.enable_cli=1                      # 0→1
opcache.interned_strings_buffer=8         # 4→8
opcache.max_accelerated_files=10000       # 2000→10000
opcache.memory_consumption=128            # 64→128
opcache.save_comments=1                   # 1→1
opcache.revalidate_freq=1                 # 2→1
; 指定目录生成缓存
opcache.file_cache=/tmp/cache

2、启用会话保持。修改/volume1/web/nextcloud/config/config.php在末尾);前增加下面两行。

  'session_lifetime' => 60 * 60 * 24,        #Session 保留时间
  'session_keepalive' => true,        #保持 Session 活跃

3、启用Memcached&APCu缓存

请确保群晖已经安装 Memcached 套件,PHP7.2 套件默认自带memcached&apcu模块但需要在指定PHP版本的php.ini手动添加路径->查看如何添加扩展,然后修改 /volume1/web/nextcloud/config/config.php 文件,在最后一行);前添加配置:

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcached_servers' => array(
   array('localhost', 11211),
   ),

4、Nextcloud 文件扫描

  • 手动扫描:可以在命令行使用 php occ files:scan --all 命令执行文件扫描。
  • 自动扫描(推荐):只需要修改 /volume1/web/nextcloud/config/config.php 文件,在文件最后一行);前添加配置: 'filesystem_check_changes' => 1, 选项实现文件夹的自动扫描,实测效果很理想。

5、清理已删除的文件

# 群晖这里使用http的用户身份运行下面命令
sudo -u http:http php /nextcloud路径/occ trashbin:cleanup <username>

用于移除特定用户<username>已删除的文件,多个用户名使用空格隔开。如果要删除所有用户的已删除文件需加上 --all-users,建议配合cron计划自动定时执行。

更新OCC使用说明,请运行 sudo -u http:http php occ 命令进行查看。

端口转发/端口映射

1、外网访问首先要在控制面板 - 外网访问中做端口转发。
2、如果没有公网IP,请阅读文章《LanProxy 使用教程》以及《Frp内网穿透加速方案》。将本地端口映射到可以正常进行外网访问的VPS服务器,以达到内网穿透的目的。

反向代理

完成端口映射、内网穿透相关操作后,接下来就是反向代理绑定域名。将xx.com(用于绑定Nextcloud的域名)解析到lanproxy服务器的IP地址上。

这里以Nginx为例,假设我们拥有一台闲置的美国VPS服务器。首先要在这台闲置的服务器中安装nginx,觉得麻烦可以直接安装使用军哥的LNMP一键安装脚本。

wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && ./install.sh lnmp

具体安装步骤不赘述,请参考->安装步骤

添加一个Vhots的配置文件 xx.com.conf

server {
        listen      80;
        #填写用于绑定Nextcloud的域名
        server_name xx.com ; 
        #301跳转到https,如果不使用https协议可删除这行。
        return 301 https://xx.com$request_uri; 
        location / {
        proxy_pass http://127.0.0.1:7088; #lanproxy服务端转发nas,http所对应的端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
# 如果不使用https协议的下面部分可以略过。
server {
    listen 443 ssl http2;
    #填写用于绑定Nextcloud的域名
    server_name xx.com ; 
        ssl_certificate /usr/local/nginx/fullchain.cer; #SSL证书路径
        ssl_certificate_key  /usr/local/nginx/domain.key;#证书密钥路径
        ssl_stapling on;
        ssl_stapling_verify on;
        resolver 1.1.1.1 1.0.0.1 valid=300s;
        resolver_timeout 5s;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers 'TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:SSLCipherSuiteECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256;';
        ssl_prefer_server_ciphers on;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Content-Type-Options "nosniff";
        location / {
        proxy_pass https://127.0.0.1:7443; #lanproxy服务端转发nas,https所对应的端口。
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Remote-Port $remote_port;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect off;
    }
}

重启nginx

/etc/init.d/nginx restart

任务计划

有时候我们发现从本地上传数据到nextclouddata目录后,网盘页面中却不显示,那可能是因为没有刷新。默认的AJAX方式加载反而让页面更加缓慢。当然其实还有另外两种任务执行方式。这里我推荐使用 cron

登陆NextCloud,进入设置->基本设置,将后台任务设置为cron

cron-php.jpg
cron-php.jpg

然后使用ssh终端工具登陆群晖系统后切换为root用户,使用nanovi工具编辑 /etc/crontab文件

vi /etc/crontab

添加一条任务计划,并保存

*/5 * * * * sudo -u http php -f /volume1/web/nextcloud/cron.php

重启群晖的 crontab 服务,即可

# DSM 6+
synoservice --restart crond

# DSM 7+
synosystemctl restart crond

说明:表示每隔5分钟,自动执行一次任务。

一点尾巴

DSM系统里安装私有云盘可能会被人认为是一件多此一举的事情,我们本不该对任何一个人的个人喜好做评价,喜欢本来就是一件主观的事情。