vlambda博客
学习文章列表

宝塔面板LNMP从零开始配置NextCloud超详细教程,同时配置外部七牛云存储

又是一篇几千字的文章,终于写完了,都是我的亲身经历......

前言

无奈死了,网络上完全没有对于宝塔面板LNMP对于NextCloud的配置教程,官方也没有任何中文文档,不披马甲官网慢得要死,这里给各位排排坑,科普一下。

准备

  1. 马甲一个,用来下载最新的NextCloud安装包,注意不要运行包和其他需要依赖的包,最简单的php包就可以。当然,如果你没有马甲,但是能上官网的话也可以直接去下,就是速度慢成蚂蚁......

  2. 在整个配置过程中,关闭宝塔当前站点的防火墙,关总开关,不要一个一个关。

  3. 宝塔面板php安装好7.1-7.3版本,低于该版本不能运行。

  4. 完全按照教程操作,不要少步骤。

开始配置

在宝塔面板中准备好空壳网站

主要内容:

  1. 数据库:MySQL数据库。

  2. PHP:7.1及以上版本。

    在宝塔面板——软件商店,找到php 7.X,进入配置页面,选择“安装扩展”,安装“fileinfo”、“opcache”、“redis”、“apcu”、“imagemagick”这五个拓展,静静地等待安装完成。

添加后,绑定好域名,配置好SSL(推荐)。

在“网站目录”中,关闭“防跨站攻击”。

在“文件”中,找到刚刚创建的网站的根目录,删除所有文件,包括上传的NextCloud源码包。

如果全部删除后,发现仍有.user.ini文件,删掉它。

上传源码

直接上传,并且完全解压、覆盖。

如果发现解压到子目录里面了,进入子目录,全选——剪切,然后粘贴到根目录,然后把那个子目录删掉,保证没有多余文件。

这套系统自带程序完整性检查,对于每个文件都要进行md5匹配,否则会有安全提示。

为了避免这些警告,我们还是最好先处理好。

配置系统

打开绑定域名,系统会自动进入安装界面。

填写管理员用户名、密码。

注意!不要在填写完管理员帐号密码后就直接点击“安装完成”!你还没有配置数据库!

点击“存储与数据库”选项,弹出了“数据目录”和“配置数据库”选项。

改变数据目录,不要使它在网站目录内,否则之后还需要在网站配置里面添加deny项

最好是放在/www目录下。

然后选择数据库为MySQL/MariaDB

在宝塔面板内创建一个MySQL空白数据库,记下用户名和密码,然后填写到配置项内。

填写后的配置应该像这样:

宝塔面板LNMP从零开始配置NextCloud超详细教程,同时配置外部七牛云存储

注意数据库端口的问题,在localhost后面,输入冒号加上端口号,端口号应该为宝塔面板安装的MySQL的运行端口,如果你没有修改过,应该为3306

然后点击安装完成,等待几十秒钟,就会进入首页了。

解决网络安全警告

直接点击右上角头像,进入“设置”页面,点击左侧“管理——概览”进入安全管理页面。

等待转圈完成,你会看到十多个安全提示,例如(我这里因为之前修复过一次了,有一些错误提示没有出现,具体的在下面):

先说明一点,我如果标出“这个问题可以通过修改配置文件解决,不需要单独修复”,代表这个问题可以通过修改完主要问题后,通过修改配置文件的方式一起解决,就不用单独操心修复了。

这些提示我几乎都看到过了......(心塞塞)

  1. 一些文件没有通过完整性检查。了解如何解决该问题请查看我们的文档

    请点击右侧“无效文件列表”,查看提醒的错误文件,一般都是.user.ini文件不匹配,或者是你没有删除你的程序源码包,有了多余的文件。

  2. PHP 的设置似乎有问题, 无法获取系统环境变量. 使用 getenv(”PATH”) 测试时仅返回空结果.

    编辑/www/server/php/73/etc/php-fpm.conf文件,路径中的73请替换为你的php版本,71为7.1,72为7.2,以此类推。

    在文件的最后面添加如下代码:

    env[HOSTNAME] = $HOSTNAME
    env[PATH] = /usr/local/bin:/usr/bin:/bin
    env[TMP] = /tmp
    env[TMPDIR] = /tmp
    env[TEMP] = /tmp

    注意是在文件最后,也就是[www]下面,而不是在[global]下面,否则php会无法启动(不要问我怎么知道的)。

  3. HTTP的请求头 "Strict-Transport-Security" 未设置为至少 "15552000" 秒。为了提高安全性,建议参照security tips ↗中的说明启用HSTS。

    这个问题可以通过修改配置文件解决,不需要单独修复

  4. PHP 模块 ‘fileinfo’ 缺失. 我们强烈建议启用此模块以便在 MIME 类型检测时获得最准确的结果.

    在宝塔面板——软件商店,找到php 7.X,进入配置页面,选择“安装扩展”,安装“fileinfo”、“opcache”、“redis”、“apcu”、“imagemagick”这五个拓展,静静地等待安装完成。(一劳永逸,不要用哪个安装哪个,都会用到的)

  5. 您的网页服务器未正确设置以解析“XXXX”。更多信息请参见文档。

    这个问题可以通过修改配置文件解决,不需要单独修复

  6. 内存缓存未配置,为了提升使用体验,请尽量配置内存缓存。更多信息请参见文档。

    • 在宝塔面板——软件商店,安装Redis,里面的配置不需要修改。

    • 在宝塔面板——软件商店,找到php 7.X,进入配置页面,选择“安装扩展”,安装“fileinfo”、“opcache”、“redis”、“apcu”、“imagemagick”这五个拓展,静静地等待安装完成。(如果在准备中已经安装好,跳过这个步骤)

    • 进入网站根目录,打开config文件夹,编辑config.php文件,在最后一个逗号后面回车,添加以下内容:

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

      保存文件即可。

    • 如果刷新网站,发现网站报错了,请到“软件商店”中找到Redis,看看它是否在运行,如果它停止了,请重启这个服务。

  7. PHP的组件OPcache没有正确配置,为了提供更好的性能,我们建议在php.ini文件中使用下列设置:XXXX

    正常情况下这个警告都会出现。

    在宝塔面板——软件商店,找到php 7.X,进入配置页面,选择“安装扩展”,安装“fileinfo”、“opcache”、“redis”、“apcu”、“imagemagick”这五个拓展,静静地等待安装完成。(如果在准备中已经安装好,跳过这个步骤)

    在宝塔面板——软件商店,找到php 7.X,进入配置页面,选择“配置文件”,快捷键Ctrl+F搜索一下"[Zend Opcache]",找到配置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

    最好是不要全部覆盖,但是全部覆盖也不会出错。

    最好是找到对应的项,如果值不一样就去更改它,变成上面代码的值。

    如果找不到对应的项,就在最底下复制粘贴添加一项。

    如果找到了对应的项,但是这一项的最前面有一个分号;,把分号去掉,然后修改它的值,变成上面代码的值。

  8. 具体的内容我忘记了,但是大概说的就是“WebDAV不能被正常地访问”。

    关掉防火墙。这个问题可以通过修改配置文件解决,不需要单独修复

  9. 你的数据存储目录可以从互联网上直接访问。.htaccess文件没有生效,请配置你的网页服务器以避免数据存储目录可以从外部访问或将数据存储目录转移到网页服务器根目录之外。

    你并没有完全按照教程操作,请把网站根目录下的data文件夹移出网站根目录,并放置在其他位置,然后进入网站根目录,打开config文件夹,编辑config.php文件,将datadirectory的值修改为你所移动到的文件夹绝对路径。

  10. 你正在通过HTTP访问该站点,我们强烈建议您按照安全提示中的说明配置服务器强制使用HTTPS.

    麻烦配置SSL证书,对于本地服务器并没有较好的解决方案。

  11. 数据库丢失了一些索引。由于给大的数据表添加索引会耗费一些时间,因此程序没有自动对其进行修复。您可以在 Nextcloud 运行时通过命令行手动执行 "occ db:add-missing-indices" 命令修复丢失的索引。索引修复后会大大提高相应表的查询速度。

    按照提示,连接SSH终端,在网站根目录下执行sudo -u www ./occ db:add-missing-indices命令即可。

  12. 数据库中的一些列由于进行长整型转换而缺失。由于在较大的数据表重改变列类型会耗费一些时间,因此程序没有自动对其更改。您可以通过命令行手动执行 "occ db:convert-filecache-bigint" 命令以应用挂起的更改。该操作需要当整个实例变为离线状态后执行。查阅相关文档以获得更多详情。

    按照提示,连接SSH终端,在网站根目录下执行sudo -u www ./occ db:convert-filecache-bigint命令即可。如果询问是否继续,请输入y并回车。

具体对于不同的情况,可能会有更多的安全警告,如果你出现了这种情况并且找到了解决方案,可以在底部留言哦!(非常感谢)

修改配置文件,开启伪静态

重头戏来了!花了我一晚上的时间!

NextCloud的伪静态配置非常麻烦!如果使用LAMP会好很多,LNMP就需要使用下面的配置文件啦!(如果配置文件不符合要求,即使配置了伪静态项目,伪静态是不会生效的)

网上找不到比这个还方便、全面的配置文件了!

上面有几个问题我注明了“这个问题可以通过修改配置文件解决,不需要单独修复”,下面就是配置文件啦!

方法1:补充需要的配置

下面的处理方案相比于直接替换全部配置的方法2更加安全:

在你原有配置文件中,找到#SSL-END一行,将下面的内容复制粘贴到它的下一行。

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

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

# HSTS、缓存设置
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
large_client_header_buffers 4 16k;
client_max_body_size 10G;
fastcgi_buffers 64 4K;
gzip off;

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

# 重定向
location ~* \/core\/(?:js\/oc\.js|preview\.png).*$
{
rewrite ^ /index.php last;
}

location /
{
rewrite ^ /index.php$request_uri;
}

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

location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/)
{
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
include fastcgi.conf;
fastcgi_param PATH_INFO $fastcgi_path_info;
# Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass unix:/tmp/php-cgi-73.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}

location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/)
{
try_files $uri/ =404;
index index.php;
}

# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js|woff2?|svg|gif)$
{
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;
access_log off;
}

location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
try_files $uri /index.php$request_uri;
access_log off;
}

# CalDAV 和 CardDAV
rewrite /.well-known/carddav /remote.php/dav permanent;
rewrite /.well-known/caldav /remote.php/dav permanent;

方法2:直接完全替换配置文件。(不推荐!)

不推荐!不推荐!不推荐!请使用方法1!

把它全选——覆盖到宝塔面板——网站——配置文件即可。

在替换配置文件之前,请备份您之前的配置文件。

里面有部分项目需要替换成自己的!需要替换!详见说明!

里面的name.of.website,请替换为您网站的域名,详见原来的配置文件。

里面的/path/to/nextcloud,请替换为您网站的根目录路径,详见原来的配置文件。

这份配置文件包括了SSL证书的配置,如果你并未配置SSL,请使用方法1

map $scheme $hsts_header
{
https "max-age=31536000; includeSubDomains; preload";
}
server
{
listen 80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
listen [::]:80;
server_name name.of.website;
index index.php index.html index.htm default.php default.htm default.html;
root /path/to/nextcloud;

#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
limit_conn perserver 400;
limit_conn perip 50;
limit_rate 4096k;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate /www/server/panel/vhost/cert/name.of.website/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/name.of.website/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
add_header Strict-Transport-Security $hsts_header;
#SSL-END

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

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

# 缓存设置
large_client_header_buffers 4 16k;
client_max_body_size 10G;
fastcgi_buffers 64 4K;
gzip off;

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

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

#一键申请SSL证书验证目录相关设置
location ~ \.well-known
{
allow all;
}

# 重定向
location ~* \/core\/(?:js\/oc\.js|preview\.png).*$
{
rewrite ^ /index.php last;
}

location /
{
rewrite ^ /index.php$request_uri;
}

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

location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/)
{
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
include fastcgi.conf;
fastcgi_param PATH_INFO $fastcgi_path_info;
# Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass unix:/tmp/php-cgi-73.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}

location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/)
{
try_files $uri/ =404;
index index.php;
}

# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js|woff2?|svg|gif)$
{
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;
access_log off;
}

location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
try_files $uri /index.php$request_uri;
access_log off;
}

# CalDAV 和 CardDAV
rewrite /.well-known/carddav /remote.php/dav permanent;
rewrite /.well-known/caldav /remote.php/dav permanent;

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
expires 30d;
access_log off;
}
access_log /www/wwwlogs/name.of.website.log;
error_log /www/wwwlogs/name.of.website.error.log;
}

配置完成

再次刷新页面,不出意外应该就可以看到绿色的对勾啦!

如果还有其他的错误提示,你可以到谷歌搜索一下,看看有没有解决方案。

配置七牛云存储

插件开启

点击右上角头像,进入“应用”页面,找到“External storage support”,有的时候会显示中文“外部文件存储”,点击右侧“启用”。

注意!如果你发现点击启用按钮之后很长时间网页都没反应,请换一个浏览器,或者是创建一个浏览器隐私模式窗口重新进入页面!

插件配置

点击右上角头像,进入“设置”页面,点击左侧“管理——外部存储”进入外部存储管理页面。

如果提示“没有安装 “smbclient”无法挂载 “SMB / CIFS”, “SMB / CIFS 使用 OC 登录信息”. 请联系您的系统管理员安装”,请按顺序运行以下命令:

yum install libsmbclient libsmbclient-devel -y
pecl channel-update pecl.php.net
pecl install smbclient

在宝塔面板——软件商店,找到php 7.X,进入配置页面,选择“配置文件”,找到配置文件最后面,添加一行:

extension="smbclient.so"

然后刷新一下外部存储配置页面,尝试一下提示是否消失。

添加七牛云存储

点击“增加存储”,选择“Amazon S3”,认证选择默认的“Access Key”。

配置中,Bucket填写对象存储Bucket名称,主机名填写七牛云对象存储后台的Endpoint(区域节点),例如华北区域的区域节点可能为s3-cn-north-1.qiniucs.com

底下可以勾选SSL,下部分Access KeySecret Key填写七牛云用户中心的密钥即可。

右侧三个点,选择“启用共享”,点击对勾保存,左侧出现绿色对号,配置即成功。

注意,在使用过程中我发现这个只能用来上传、下载,预览视频的速度极其慢,因为是你的服务器去连接区域节点,而不是你的电脑去连接,这会严重拖慢服务器带宽。

当然,华为云、Google Drive也可以这么配置,同时如果你使用的是阿里云的ECS,你也可以将购买的OSS挂载到你的ECS上,通过添加一个“本地”存储来实现高速上传下载(内网速度超快)。而且你也可以添加box的WebDAV之类的免费存储等,具体可以上百度和谷歌查询,有其他人写过的教程。

一些提示

  1. 不要在配置文件中自行更改删除添加内容,尤其是不要开启自定义404文件!不要开启自定义404文件!否则你会发现网页快速MarkDown栏会一直转圈!困扰了我很长时间!

  2. 未完待续......

结束语

如果有任何问题,都可以在底部留言哦!

目前LeanCloud的邮件推送系统的自唤醒被屏蔽了,邮件推送可能有很大的延迟,有任何疑问可以发送邮件至[email protected],看到了就会回哦!