centos7.9+宝塔Nginx+php7.4+mysql8+安装nextcloud网盘系统+解决常见错误提示+安装ffmpeg+安装previewgenerator插件+外部从机存储全程设置方法记录

服务器使用的是阿里云服务器:2核CPU+8G内存+4M带宽 nextcloud好像8G内存是最低要求,再低的还没测试。

一、系统安装centos7.9系统

二、安装宝塔

三、安装服务器环境LNMP,Nginx+php7.4+mysql8

四、从宝塔面板安装PHP扩展

 

bt_safe
fileinfo
opcache
memcached
redis
apcu
imagemagick
exif
intl
xsl
bz2
gmp

 

五、环境性能调整

1、nginx管理/性能调整

如下图

2、php7.4管理/配置修改

如下图

3、php7.4管理/超时限制

如下图

4、php7.4管理/FPM配置文件修改

如下图


此步主机环境调整没有经过严格的测试,相关数据放得比较开,请以自己的服务器配置做相应的修改
因为我在不做环境调整的情况下安装nextcloud一般情况下都会报502错误,经过上边的调整之后就可以顺利安装了。
502错误初步测试是因为ngix和php的超时时长配置出的问题,稍微调高点就可以正常安装了。

 

五、宝塔新建网站+FTP+mysql数据库

设置SSL,我用的是dnspod的证书,一年免费的,申请特别快,申请好了之后下载nginx证书
配置证书,选择其他证书
分别填上密钥和证书,然后保存
打开强制https

 

修改配置文件,参考如下:

我的网站域名为nextcloud.chajianhe.com,需要把配置文件中的所有这个域名全部修改为你的域名
最安全的方法,先把自己网站的配置文件复制出来,这个配置文件里边都是宝塔自动生成的,不能改动,需要用到
然后把下边的参考文件里边重复的部分用自动生成的替换掉
另外还一定要注意参考配置文件里边的路径部分要替换成自己服务器的路径

server
{
    listen 80;
	listen 443 ssl http2;
    server_name nextcloud.chajianhe.com;
	index index.php index.html index.htm /index.php$request_uri; #(》》》重要《《《)
    root /www/wwwroot/nextcloud.chajianhe.com;

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #HTTP_TO_HTTPS_START
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END
    ssl_certificate    /www/server/panel/vhost/cert/nextcloud.chajianhe.com/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/nextcloud.chajianhe.com/privkey.pem;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    error_page 497  https://$host$request_uri;

    #SSL-END


    # Enable gzip but do not remove ETag headers
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;


    add_header Referrer-Policy                      "no-referrer"   always;
    add_header X-Content-Type-Options               "nosniff"       always;
    add_header X-Download-Options                   "noopen"        always;
    add_header X-Frame-Options                      "SAMEORIGIN"    always;
    add_header X-Permitted-Cross-Domain-Policies    "none"          always;
    add_header X-Robots-Tag                         "none"          always;
    add_header X-XSS-Protection                     "1; mode=block" always;

    # Remove X-Powered-By, which is an information leak
    fastcgi_hide_header X-Powered-By;


    # Rule borrowed from `.htaccess` to handle Microsoft DAV clients
   location = / {
        if ( $http_user_agent ~ ^DavClnt ) {
            return 302 /remote.php/webdav/$is_args$args;
        }
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Make a regex exception for `/.well-known` so that clients can still
    # access it despite the existence of the regex rule
    # `location ~ /(\.|autotest|...)` which would otherwise handle requests
    # for `/.well-known`.
    location ^~ /.well-known {
        # The rules in this block are an adaptation of the rules
        # in `.htaccess` that concern `/.well-known`.

        location = /.well-known/carddav { return 301 /remote.php/dav/; }
        location = /.well-known/caldav  { return 301 /remote.php/dav/; }

        location /.well-known/acme-challenge    { try_files $uri $uri/ =404; }
        location /.well-known/pki-validation    { try_files $uri $uri/ =404; }

        # Let Nextcloud's API for `/.well-known` URIs handle all other
        # requests by passing them to the front-end controller.
        return 301 /index.php$request_uri;
    }


    # Rules borrowed from `.htaccess` to hide certain paths from clients
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)  { return 404; }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)              { return 404; }

    location ~ \.php(?:$|/) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        set $path_info $fastcgi_path_info;

        try_files $fastcgi_script_name =404;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;

        fastcgi_param modHeadersAvailable true;         # Avoid sending the security headers twice
        fastcgi_param front_controller_active true; #(》》》重要《《《)
        fastcgi_pass unix:/tmp/php-cgi-74.sock;  #(》》》重要《《《)

        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ \.(?:css|js|svg|gif|png|jpg|ico)$ {
        try_files $uri /index.php$request_uri;
        expires 6M;         # Cache-Control policy borrowed from `.htaccess`
        access_log off;     # Optional: Don't log access to assets
    }

    location ~ \.woff2?$ {
        try_files $uri /index.php$request_uri;
        expires 7d;         # Cache-Control policy borrowed from `.htaccess`
        access_log off;     # Optional: Don't log access to assets
    }

    # Rule borrowed from `.htaccess`
    location /remote {
        return 301 /remote.php$request_uri;
    }

    location / {
        try_files $uri $uri/ /index.php$request_uri;
    }


    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    #清理缓存规则
    location ~ /purge(/.*) {
        proxy_cache_purge cache_one $host$1$is_args$args;
        #access_log  /www/wwwlogs/nextcloud.chajianhe.com_purge_cache.log;
    }
	#引用反向代理规则,注释后配置的反向代理将无效
	include /www/server/panel/vhost/nginx/proxy/nextcloud.chajianhe.com/*.conf;

	##SECURITY-START 防盗链配置
   location ~ .*\.(jpg|jpeg|gif|png|js|css)$
    {
        expires      30d;
        access_log /dev/null;
        valid_referers nextcloud.chajianhe.com;
        if ($invalid_referer){
           return 404;
        }
    }
    #SECURITY-END
    include enable-php-74.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/nextcloud.chajianhe.com.conf;
    #REWRITE-END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)  { return 404; }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)              { return 404; }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }
    
    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log /dev/null;
        access_log /dev/null; 
    }
    access_log  /www/wwwlogs/nextcloud.chajianhe.com.log;
    error_log  /www/wwwlogs/nextcloud.chajianhe.com.error.log;
} 

接下来删除网站根目录中的所有文件
上传下载下来的nextcloud安装文件压缩包,并上传到网站根目录

 

六、安装nextcloud需要注意的问题

 


创建管理员账号,自已设置
数据目录
将数据目录设置到网站根目录以外,有利于以后的外部存储
先把需要设置成数据目录的文件夹建立好,权限设置为755
如果用的是宝塔的话建议如下
如网站根目录为:

/www/wwwroot/nextcloud.chajianhe.com

那么就在wwwroot之下,新建一个文件夹,这时这个文件夹的所有者为www, 权限即为755, 不用修改就可以用了
如下:

/www/wwwroot/nextclouddata

此时在数据目录中填上这个地址就行了
配置数据库选择【MySQL/MariaDB
用户名、密码、数据库名就是刚才新建网站时一起新建的数据库
主机名称和端口号如果数据库跟网站是同一服务器的话不用修改就用【localhost】就可以
如果是其他服务器的数据库就需要填写完整的主机地址和端口号
安装完成即可。
不出意外的话可顺利完成安装

 

七、安装好了之后先解决后台的错误提示

如下,一条一条的解决就可以了

 

1、内存缓存未配置。为了提升性能,请尽量配置内存缓存。

修改nextcloud安装目录/config/config.php
在最后的   );  之前添加以下文本:
适合小型/私人家庭服务器

'memcache.local' => '\OC\Memcache\APCu',

或者:
适合小型组织,单服务器设置

'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => array(
    'host' => 'localhost',
    'port' => 6379,
      ),

或者:
适合大型组织,集群设置

'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.local' => '\OC\Memcache\APCu',
'redis' => array(
  'host' => 'localhost',
  'port' => 6379,
    ),

 

2、您的安装没有设置默认的电话区域。这对验证配置设定中没有国家代码的电话号码而言是必需的。要允许没有国家代码的电话号码,请添加带区域相应的 ISO 3166-1 code ↗ 的“默认_电话_区域”到你的配置文件中。

编辑 Nextcloud config 目录中的 config.php 文件,在文件最下方, ); 前添加如下代码。

'default_phone_region' => 'CN',

 

3、安装完成后,后台的日志中报PHP错误:shell_exec() has been disabled for security reasons

那么打开 php配置文件
搜索 disable_functions= 就会看到 shell_exec 这段字,
如下图:

删掉, 重启 php-fpm 就可以了。

 

4、PHP 的安装似乎不正确,无法访问系统环境变量。getenv (“PATH”) 函数测试返回了一个空值。 请参照安装说明文档 ↗中的 PHP 配置说明查阅您服务器的 PHP 配置信息,特别是在使用 php-fpm 时。

 

宝塔/PHP7.4管理/FPM配置文件
最后添加

env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin

完成后重启PHP

 

5、宝塔/PHP7.4管理/配置文件

大概215行

output_buffering = 4096

修改为

; output_buffering = 4096

 

6、如果出现以下错误:

HTTP的请求头 “Strict-Transport-Security” 未设置为至少 “15552000” 秒. 为了提高安全性,建议参照security tips ↗中的说明启用HSTS.
HTTP 头 “Referrer-Policy” 未设置成 “no-referrer”,”no-referrer-when-downgrade”,”strict-origin”,”strict-origin-when-cross-origin” 或 “same-origin”。这会泄露更多的信息。请查阅 W3C 建议↗。

打开你的Nginx配置文件,添加以下规则:

add_header Strict-Transport-Security max-age=15768000;
add_header X-Frame-Options 'SAMEORIGIN';
add_header Referrer-Policy "no-referrer";

重启PHP和Nginx,刷新一下,你就可以看到NextCloud配置完成了。

 

7、Nextcloud 后台提示的:PHP 的组件 OPcache 没有正确配置。 为了提供更好的性能,在PHP配置文件中添加:

在 [opcache] 段的末尾加入如下内容:

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

完整的如下,配置比较高的服务器:

;opcache
[Zend Opcache]
zend_extension=/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/opcache.so
opcache.enable = 1
opcache.memory_consumption=128
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=80000
opcache.revalidate_freq=3
opcache.fast_shutdown=1
opcache.enable_cli=1

 

8、Cron 计划任务

如果是用的宝塔面板的话非常简单,直接用宝塔的计划任务就可以

类型:shell

任务名:随意

执行周期:每5分钟

脚本内容:

sudo -u www /www/server/php/74/bin/php /www/wwwroot/xxxx.com/cron.php

这样就可以了

注:命令中的/www/server/php/74/bin/php,即为服务器上安装的PHP的路径,替换为自己的PHP路径

/www/wwwroot/xxxx.com/cron.php ,即为nextcloud的cron.php文件的路径,替换为自己的。


在 Nextcloud 中默认是 AJAX 的模式,这个模式是性能最低下,也最不推荐的,官方推荐的是使用 Linux 自带的 Crontab 来执行,所以这里我们稍作修改。
执行如下命令以 www-data 用户运行 crontab:

crontab -u www -e
i
*/5 * * * * php -f /www/wwwroot/nextcloud.chajianhe.com/cron.php

 

按ESC键

:wq

 

保存并退出

注:路径改为你自己的路径
回到后台修改计划任务方式为 Cron如下图

 

9、接下来是 MySQL 的性能调优,mysql管理/性能调整

 

innodb_buffer_pool_size=1024mb

或者直接选择优化方案为8-16GB

保存--重启数据库

 

10、调整 PHP 的进程数

php管理/性能调整,如下图所示

按照官方的推荐应该修改为

pm = dynamic
pm.max_children = 120
pm.start_servers = 12
pm.min_spare_servers = 6
pm.max_spare_servers = 18

如果你的服务器配置比较高的话可以直接选择并发方案,如16GB, 对比官方推荐的数据更大即可
重启PHP

 

11、提高nextcloud的上传速度(解除块大小限制)

 

在nextcloud目录下执行以下命令

sudo -u www php occ config:app:set files max_chunk_size --value 0

或者登录ssh终端后直接执行以下命令(其中的nextcloud路径部分要按自己的路径修改)

sudo -u www php /www/wwwroot/nextcloud.chajianhe.com/occ config:app:set files max_chunk_size --value 0

 

 

八、nextcloud安装视频预览图

 

https://uefeng.com/nextcloud-generate-thumbnails.html

 

在CentOS7上安装使用ffmpeg

Nux存储库依赖于Epel软件存储库。如果您的系统启用EPEL存储库,请键入以下命令将其启用:

sudo yum install epel-release

接下来,导入Repository GPG密钥并通过安装rpm软件包启用Nux存储库:

sudo rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

一旦上述仓库启用,就可开始安装ffmpeg:

sudo yum install ffmpeg ffmpeg-devel

检查看装是否成功,输入以下指令

ffmpeg -version

现在,Nux Dextop存储库中可用的FFmpeg的当前版本是2.8.15。所以输出内容大概如下:

ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-28)

这就算是安装完成了。

还需要在 php 禁用函数里删除 exec、system 两个函数。
打开宝塔/软件商店/PHP7.4管理/禁用函数,如下图
把exec和system两个函数删掉就行了

然后在 nextcloud安装目录的config 目录下的 config.php 添加:

 'enabledPreviewProviders' =>
  array (
    0 => 'OC\\Preview\\PNG',
    1 => 'OC\\Preview\\JPEG',
    2 => 'OC\\Preview\\GIF',
    3 => 'OC\\Preview\\HEIC',
    4 => 'OC\\Preview\\BMP',
    5 => 'OC\\Preview\\XBitmap',
    6 => 'OC\\Preview\\MP3',
    7 => 'OC\\Preview\\TXT',
    8 => 'OC\\Preview\\MarkDown',
    9 => 'OC\\Preview\\Movie'
  ),

重启nginx

刷新页面,就能看到视频缩略图已经生成,不过有点奇怪的是,一些较短的视频还是无法生成缩略图。

 

在centos8/rockylinux上安装ffmpeg

Negativo17软件源依赖EPEL 和 PowerTools 软件源。

sudo dnf install epel-release
sudo yum config-manager --set-enabled PowerTools
sudo yum config-manager --add-repo=https://negativo17.org/repos/epel-multimedia.repo

如果提示:

yum-config-manager: command not found

这个是因为系统默认没有安装这个命令,这个命令在yum-utils 包里,
可以通过命令

yum -y install yum-utils

安装就可以了。
一旦软件源被启用,安装FFmpeg:

yum install ffmpeg

yum发行的仓库,都有两个版本,一个是name是可执行文件的仓库,用于cli命令行(运维);一个是name-devel,用于二次开发调用和编译链接(开发人员需要安装词库)。

安装ffmpeg开发库:

yum -y install ffmpeg-devel

检查FFmpeg在CentOS8上的安装

ffmpeg -version

 

九、previewgenerator插件的安装及配置:

 

1、直接从后台/应用里边搜索previewgenerator,安装并开启,因为是国外地址,所以速度会特别慢,而且一般情况下会超时安装失败

 

2、手动下载源码安装

下载地址:

https://github.com/nextcloud-releases/previewgenerator

下载之后解压,然后上传到nextcloud安装文件夹的apps文件夹

下载源码版本的,上传至APPS文件夹中并解压后,把文件夹名称修改为【previewgenerator】

并把previewgenerator文件夹权限用户设置为www,不然后台会报警

登录后台/应用找到previewgenerator开启
插件就安装好了

如果升级nexcloud版本后忘记备份的话,还按以上方法重新下载解压就可以了。

 

接下来配置插件

 

宝塔/软件商店,找到安装的PHP,设置/配置文件
在最下边添加如下代码:

apc.enable_cli =1
apc.shm_size = 256M

注:此步是为了解决 【Memcache \OC\Memcache\APCu 不适用于本地缓存】错误

打开SSH终端

先设置好生成缩略图的尺寸:
依次输入如下命令:

sudo -u www /www/wwwroot/nextcloud.chajianhe.com/occ config:app:set --value="64 256 1024"  previewgenerator squareSizes
sudo -u www /www/wwwroot/nextcloud.chajianhe.com/occ config:app:set --value="64 256" previewgenerator widthSizes
sudo -u www /www/wwwroot/nextcloud.chajianhe.com/occ config:app:set --value="64 256" previewgenerator heightSizes
sudo -u www /www/wwwroot/nextcloud.chajianhe.com/occ config:system:set preview_max_x --value 2000
sudo -u www /www/wwwroot/nextcloud.chajianhe.com/occ config:system:set preview_max_y --value 2000
sudo -u www /www/wwwroot/nextcloud.chajianhe.com/occ config:app:set preview jpeg_quality --value="60"

命令解释:

sudo -u www                                                           【以www用户执行sudo命令】
/www/wwwroot/nextcloud.chajianhe.com/occ                              【OCC文件的地址,找不到的可以到宝塔里边搜索一下就能看到路径了】
config:app:set --value="64 256 1024"  previewgenerator squareSizes    【方形预览:64x64、256x256 和 1024x1024】
config:app:set --value="64 256" previewgenerator widthSizes           【宽高比预览,宽度为:64、256】
config:app:set --value="64 256" previewgenerator heightSizes          【高度为 64、256的纵横比预览】
config:system:set preview_max_x --value 2000                          【最大宽度为2000】
config:system:set preview_max_y --value 2000                          【最大高度为2000】
config:app:set preview jpeg_quality --value="60"                      【JPEG质量为60】

再全部扫描生成一次,生成一次就可以了,文件比较多的话用时比较长:

sudo -u www /www/wwwroot/nextcloud.chajianhe.com/occ preview:generate-all -vvv

最后设置一个自动执行任务:
每天凌晨3点15分执行一下最新上传的文件生成缩略图的命令:
命令窗口执行:

crontab -u www -e

【i】键插入如下命令

15 3 * * * php /www/wwwroot/nextcloud.chajianhe.com/occ preview:pre-generate -vvv

Esc键

:wq

保存退出

如果使用的是宝塔的话直接从宝塔面板新建计划任务

任务类型:shell脚本

任务名称:随意

执行周期:建议每天凌晨3-5点之间执行

脚本内容:

sudo -u www /www/server/php/74/bin/php /www/wwwroot/xxx.com/occ preview:pre-generate -vvv

注:脚 本内容说明

sudo -u www  ,使用www用户运行

/www/server/php/74/bin/php  ,服务器上PHP的安装路径

/www/wwwroot/xxx.com  ,服务器上nextcloud的安装路径。

把以上内容替换为自己的内容。

0

评论0

请先

社交账号快速登录