【服务器】搭建NextCloud个人网盘
AI摘要:
这篇文章详细介绍了NextCloud服务器的项目配置,并提供了解决一系列安全告警和问题的方法。首先,在宝塔后台的PHP项目中添加网站以承载NextCloud,申请SSL证书并开启强制HTTPS。其次,通过在线安装程序setup-nextcloud.php完成云安装,配置Cron以实现定时任务。
文章进一步解决了一系列安全告警,包括调整PHP内存限制、禁止数据目录访问、处理MySQL版本不支持等。作者还分享了网站迁移的注意事项以及一些界面美化和应用优化的方案,如自定义页脚、隐藏无用内容等。最后,提到了解决大文件传输、客户端安装和命令行操作等常见问题。
总体而言,这篇文章为搭建和优化NextCloud服务器提供了全面的指导,包括安全性、配置调整和界面美化等方面。
NextCloud服务器项目配置
- 在宝塔后台php项目添加用以承载NextCloud的网站(需数据库,以pan.zelyo.cn为例),申请Let's Encrypt ssl证书并开启强制https。
- 前往官方网站 COMMUNITY PROJECTS项目下下载setup-nextcloud.php在线安装程序,上传至网站根目录,访问
pan.zelyo.cn/setup-nextcloud.php
并按照提示进行云安装,其中安装目录默认,生产环境数据库选择MySQL进行安装。 - 在基本设置中选择Cron,ssh连接服务器终端,输入
crontab -e
,在最后添加*/5 * * * * sudo -u www /www/server/php/74/bin/php -f /www/wwwroot/pan/nextcloud/cron.php
保存退出即可。
解决一些安全告警
PHP 内存限制低于建议值 512MB。
在宝塔面板中php设置配置修改菜单中将memory_limit修改为512M。
您的数据目录和文件可能可以从互联网访问。.htaccess 文件不工作。强烈建议您配置您的 web 服务器,使数据目录不再可访问,或将数据目录移到 web 服务器文档根目录之外。
在网站设置中添加禁止访问或在网站配置文件中添加禁止访问配置:
location ^~ /nextcloud/data/ { return 404; }
或者移动data文件,将data文件夹复制到/home目录下,修改/nextcloud/config/config.php文件,将'datadirectory' => '/www/wwwroot/pan/nextcloud/data'改为'datadirectory' => '/home/nextcloud/data',并保存退出,同时在网站设置关闭防跨站攻击。
PHP 的安装似乎不正确,无法访问系统环境变量。getenv("PATH") 函数测试返回了一个空值。 请检查安装文档 ↗中关于PHP的配置说明和您服务器上的PHP配置,特别是在使用 php-fpm 时。
在宝塔面板php设置中的fpm配置最后一行添加
env[PATH] = /usr/local/bin:/usr/bin:/bin:/www/server/php/74/bin
,其中/www/server/php/74/为php的具体安装目录,此处为宝塔自动安装路径,其他方式安装可能位置不同。重启php服务后生效。MySQL version "5.6.50-log" is used. Nextcloud 21 and higher do not support this version and require MySQL 8.0 or MariaDB 10.2 or higher.
备份好数据库账号密码和内容,在宝塔软件设置切换重新安装MariaDB10.2,安装完成后新建原有数据库并导入即可解决。
MySQL 被用作数据库,但不支持 4 字节字符。要能够在文件名或评论中正确处理 4 字节字符 (如 emoji),建议在 MySQL 中启用 4 字节支持。更多细节,可以阅读 有关此问题的文档、页 ↗。
在软件设置中进入mysql设置,在配置修改的[mysqld]下添加如下配置项(适用于MariaDB10.2 或更早版本):
innodb_large_prefix = true innodb_file_format = barracuda innodb_file_per_table = 1
保存并重启服务。经检查数据库文件格式已经是Barracuda。
通过终端进入nextcloud安装文件夹,输入sudo -u www php occ config:system:set mysql.utf8mb4 --type boolean --value="true"
把mysql.utf8mb4设为true;再输入sudo -u www php occ maintenance:repair
将Nextcloud所有表修复为新的排序规则。您的网页服务器未正确设置以解析“/.well-known/webfinger”。更多信息请参见文档↗。
您的网页服务器未正确设置以解析“/.well-known/nodeinfo”。更多信息请参见文档↗。
您的网页服务器未正确设置以解析“/.well-known/caldav”。更多信息请参见文档↗。
您的网页服务器未正确设置以解析“/.well-known/carddav”。更多信息请参见文档↗。站点伪静态问题,只需在网站设置伪静态处添加如下内容(根据具体情况修改为合适的目录):
location = /.well-known/webfinger { return 301 $scheme://$host:$server_port/nextcloud/index.php/.well-known/webfinger; } location = /.well-known/nodeinfo { return 301 $scheme://$host:$server_port/nextcloud/index.php/.well-known/nodeinfo; } location = /.well-known/carddav { return 301 $scheme://$host/nextcloud/remote.php/dav; } location = /.well-known/caldav { return 301 $scheme://$host/nextcloud/remote.php/dav; }
CRTL+F5硬刷新即不显示上述告警。
你还没有设置或验证你的电子邮件服务器配置。请前往基本设置,以便进行设置。之后,使用表单下方的 "发送电子邮件 "按钮来验证您的设置。
按照提示前往配置smtp服务即可,网易域名邮箱SMTP SSL的服务器地址为smtp.ym.163.com:994。
未找到 PHP 的 "fileinfo" 模块。强烈推荐启用该模块,从而获得更好的 MIME 类型探测结果。
php管理中安装fileinfo扩展即可。
您的安装没有设置默认的电话区域。这对验证配置设定中没有国家代码的电话号码而言是必需的。要允许没有国家代码的电话号码,请添加带区域相应的 ISO 3166-1 code ↗ 的“默认_电话_区域”到你的配置文件中。
在config文件夹中的config.php添加
'default_phone_region' => 'CN',
即可。The PHP OPcache module is not properly configured. See the documentation ↗ for more information.
The PHP OPcache module is not loaded. For better performance it is recommended to load it into your PHP installation.
The PHP module "imagick" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module.
The PHP modules "gmp" and/or "bcmath" are not enabled. If you use WebAuthn passwordless authentication, these modules are required.安装OPcache、imagick、gmp模块即可。
内存缓存未配置。为了提升性能,请尽量配置内存缓存。更多信息请参见文档↗。
安装redis扩展,在config.php中添加如下内容即可:
'memcache.local' => '\OC\Memcache\Redis', 'redis' => array( 'host' => 'localhost', 'port' => 6379, ),
事务文件锁被禁用,这可能导致并发争用相关的问题。在config.php中启用 “filelocking.enabled” 选项来规避这些问题。
修改config.php,添加如下内容:
'filelocking.enabled' => true, 'memcache.locking' => '\OC\Memcache\Redis', 'redis' => array( 'host' => 'localhost', 'port' => 6379, 'timeout' => 0.0, 'password' => '', // Optional, if not defined no password will be used. ), ),
- 检查通过
网站迁移注意事项
*nextcloud网站迁移只需要在新服务器建立承载站点和对应数据库,将网站目录和数据库导入,再根据以上配置同步服务器设置即可
本节参考内容
- 宝塔面板部署Nextcloud后解决后台安全错误及设置警告
- NextCloud离线部署和解决安全警告与设置
- mysql的4字节字符支持_解决Nextcloud提示“所使用的数据库为MySQL但没有对4字节字符的支持……”的问题-开启MySQL 4字节支持...
- 【Nextcolud】您的网页服务器未正确设置以解析“/.well-known/nodeinfo” “/.well-known/webfinger” 问题解决
界面美化、应用优化与其他问题
自定义页脚方案,用以添加备案号。
在插件官网下载1.5.0插件,上传并解压到 /nextcloud/app/ 文件夹下,或在应用-tools中下载,手动启用插件后在设置中添加如下代码,第二个框什么都不填即可。
function add_icp_num(inclass) {
icp_num = "你的备案号";
var matches = document.querySelectorAll("footer");
if (JSON.stringify(matches)== "{}") return;
addclass = inclass==undefined ? "" : " class=\""+inclass+"\"";
var childs = matches[0].childNodes;
for (var i = childs.length - 1; i >= 0; i--) matches[0].removeChild(childs[i]);
matches[0].insertAdjacentHTML(
"beforeend",
"<p" + addclass + "><a href=\"https://beian.miit.gov.cn\" target=\"_blank\" rel=\"nofollow\" style=\"font-weight:300;\">" + icp_num + "</a></p>"
);
}
var uri = window.location.pathname;
var splited = uri.split("/");
if (splited[2] == "login") {
add_icp_num('info');
} else if (splited[2]== "s") {
add_icp_num();
} else if (splited[2]== "index.php" && splited[3].startsWith("login")) {
add_icp_num('info');
} else if(splited[2]== "index.php" && splited[3]== "s") {
add_icp_num();
}
隐藏无用内容
安装Custom CSS应用,添加如下代码以隐藏分享页面“下载所有文件”按钮和底部“获取自己的免费帐户”字样。
#header-primary-action .primary{
display:none;
}
footer a[href='https://nextcloud.com/signup/']{
display:none;
}
- 个人使用可关闭一些不需要的群组应用。
默认语言修改
添加用户后发现新用户默认为英文,在config.php添加'default_language' => 'zh_CN',
和'default_locale' => 'zh',
以改为中文。
解决大文件传输常见问题
大文件上传出现413错误的问题
原因:413请求实体太大报错(413 Request Entity Too Large)。出现报错原因在于客户端所请求的实体,比如上传的文件超出大小限制。
在nginx配置中http字段下找到并根据实际情况配置以下内容large_client_header_buffers 4 512k; client_max_body_size 102400m; client_body_timeout 1200s; client_header_timeout 1200s; keepalive_timeout 1200; fastcgi_connect_timeout 2400; fastcgi_send_timeout 2400; fastcgi_read_timeout 2400;
- File locking disabled, problems with versioning
添加'filelocking.enabled' => false,
到config/config.php Download xxx: 服务器向"MOVE XXX.file"返回了"504 GateWay Time-out"
原因: 宝塔中php日志可以看到类似如下的报错:WARNING: [pool www] child 1218, script '/www/wwwroot/naswz/nextcloud/remote.php' (request: "MOVE /nextcloud/remote.php") execution timed out (102.257115 sec), terminating
只需更改超时限制秒数即可(默认100秒,如果是使用了反向代理需要同时在终端机器和代理端机器上进行更改)
request_terminate_timeout = 1200
更改后发现脚本能够执行完成但Windows客户端仍会提示504保错,更改:
request_slowlog_timeout = 1100
读取直接拷贝来的文件
sudo -u www-data php occ files:scan --user
相关命令:
php occ user:list #列出所有用户
格式: files:scan [-p|--path="..."] [-q|--quiet] [-v|vv|vvv --verbose] [--all] [user_id1] ... [user_idN]
参数:
user_id #扫描所指定的用户(一个或多个,多个用户ID之间要使用空格分开)的所有文件
选项:
--path #限制扫描路径,该路径必须包含以下部分:"user_id/files/path"
--all #扫描所有已知用户的所有文件
--quiet #不输出统计信息
--verbose #在扫描过程中显示正在处理的文件和目录
--unscanned #仅扫描以前未扫描过的文件
客户端
windows安装nextcloud软件按照提示完成连接即可实现自主同步盘。
本站所有原创文章版权所有,禁止转载,欢迎转发文章链接,参考请标明出处并连接到本站相应页面。所有注明的转载内容版权归原作者所有,如不慎侵权请原作者联系本站删除。