系统环境:Rocky Linux 8.9
宝塔面板版本:8.0.5
PHP版本:8.2.14
PHP禁用的函数:无
PHP开启的扩展:fileinfo、opcache、memcached、redis、apcu、imagemagick、imap、exif、intl、xsl(php8.2需要再配置文件里面将extension=xsl前面的;删掉。然后再安装扩展选里面安装,可能提示失败实际成功,再phpinfo里面可以看到是否开启,修改和安装完重启系统或者php再看)、Swoole5(和Swoole4)、ldap、bz2、gmp、igbinary。
Mysql版本:8.0.36
Apache版本:2.4.58
其他安装的环境软件:Redis 7.2.4、MemCached 1.6.23
nextcloud版本:28.0.1
报错提示:
报错警告解决方法:
报错警告 1:您正在通过不安全的 HTTP 访问网站。我们强烈建议您在服务器上启用 HTTPS,更多资讯请参见安全贴士 ↗。如果不这样设置,某些重要网页功能,如“复制到剪贴板”和“Service Workers”将无法工作。
解决方法:站点开启https访问即可。要是内网访问http也不影响,要是有外网访问还是开启https安全。
报错警告 2:51 errors in the logs since 2024年1月22日
解决方法:这个是提示有报错日志,可能每个人的数量和日期都不一样,但是不要紧,只要问题解决了一般这个报错会在7天左右自动清除。
报错警告 3:当前正在使用数据库处理事务性文件锁定。若有内存缓存可用,请进行配置以提升性能。 更多细节,请参见文档 ↗。
报错警告 4:未配置内存缓存。若有内存缓存可用,请进行配置以提升性能。 更多细节,请参见文档 ↗。
解决方法:编辑站点目录 /config/config.php 文件 再文件里面加入下面代码开启缓存。
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => 'localhost',
'port' => 6379, //这里的6379是默认端口,如果你修改过端口就改成你修改后的
'password' => '123456', //这里的123456修改成你自己实际的密码
),
报错警告 5:您在安装过程中未设置默认的国际区号。缺失国际区号的电话号码时将使用默认的国际区号进行验证。要允许无国际区号的电话,请在您的配置文件中添加 “default_phone_region” 设置选项并依照 ISO 3166-1 进行设置。 更多细节,请参见文档 ↗。
解决方法:编辑站点目录 /config/config.php 文件 再文件里面加入下面代码。
'default_phone_region' => 'CN',
如果是其他国家就将CN替换成对应国家的代码
报错警告 6:您尚未配置电子邮件服务器或尚未验证配置。请在“基本设置”中进行配置。配置完毕后,请点击表单下方的“发送电子邮件”按钮来验证您的设置。 更多细节,请参见文档 ↗。
解决方法:再后台基本设置里面填写自己的电子邮件服务器发件信息,然后保持并且发送电子邮件测试,显示测试成功就行。例如我使用阿里云企业邮箱的测试。
全部需要解决的都完成后的报错警告提示就剩下面的了
剩下的这2项报错警告,第1个可以根据实际情况来觉得是否启用https来解决,第2个只要更具日志将之前的问题都解决之后大概7天会自动消失,不用理会。
其他的
1、“Strict-Transport-Security”HTTP 头未设为至少“15552000”秒。为了提高安全性,建议启用 HSTS,参考步骤见安全小贴士 ↗。
编辑网站配置文件,加入下面的配置代码
<VirtualHost *:443>
ServerName cloud.nextcloud.com
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
</VirtualHost>
2、PHP 的安装似乎不正确,无法访问系统环境变量。getenv(“PATH”) 函数测试返回了一个空值。 更多细节,请参见文档 ↗。
在PHP管理-FPM配置文件最下面加入下面代码
env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin
5、后台任务,使用cron执行报错解决方法。
运行测试 php /www/wwwroot/xxx.xxx.com/cron.php
报错
Could not open input file: /www/wwwroot/woyfc.xyz/cron.php
再根目录执行
php /www/wwwroot/xxx.xxx.com/cron.php
报错
OCP\HintException: [0]: Memcache OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)
将下面这个代码添加到php.ini配置文件中
apc.enable_cli=1
报错
Console has to be executed with the user that owns the file config/config.php
Current user id: 0
Owner id of config.php: 1000
使用www用户运行
sudo -u www php /www/wwwroot/xxx.xxx.com/cron.php
当使用sudo -u www php /www/wwwroot/xxx.xxx.com/cron.php执行没有报错之后,使用系统systemd执行定时任务
此方法需要两个文件:nextcloudcron.service 和 nextcloudcron.timer。在/etc/systemd/system/中创建这两个文件。并且给执行权限 644/root
nextcloudcron.service 应如下所示:注意执行的用户名和PHP目录以及站点目录替换为自己的
[Unit]
Description=Nextcloud cron.php job
[Service]
User=www
ExecCondition=/www/server/php/82/bin/php -f /www/wwwroot/www.xxx.com/occ status -e
ExecStart=/www/server/php/82/bin/php -f /www/wwwroot/www.xxx.com/cron.php
KillMode=process
nextcloudcron.timer 应如下所示:
[Unit]
Description=Run Nextcloud cron.php every 5 minutes
[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
Unit=nextcloudcron.service
[Install]
WantedBy=timers.target
#注册为开机启动服务
systemctl enable nextcloudcron.timer
#启动服务
systemctl start nextcloudcron.timer
systemctl enable --now nextcloudcron.timer
6、禁用电子邮件对等验证可以使用自签证书。
如果是使用宝塔邮局管理器创建的邮箱,添加的时候不使用ssl加密,并且smtp和imap服务器都使用mail.xxx.com 不要使用smtp.xxx.com和imap.xxx.com
再config/config.php添加以下代码
"mail_smtpstreamoptions" => array(
'ssl' => array(
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false
)
),
7、配置Onlyoffice文档在线编辑
使用docker安装,
参考01 https://helpcenter.onlyoffice.com/server/docker/document/docker-installation.aspx?_ga=2.51711023.782359554.1594636128-1157782750.1587541027
参考02 https://www.onlyoffice.com/zh/download-docs.aspx?from=officefornextcloud#docs-community
参考03 https://helpcenter.onlyoffice.com/installation/docs-developer-configuring.aspx?from=api#services-CoAuthoring-server-savetimeoutdelay 是一些onlyoffice的安装参数配置
提前安装好docker
安装 Docker 后,运行它并执行以下命令:
sudo docker run -i -t -d -p 80:80 --restart=always -e JWT_SECRET=my_jwt_secret onlyoffice/documentserver
重要
从版本 7.2 开始,我们添加了随机生成的 JWT 密钥。如果未使用环境变量指定 JWT 密钥,则会导致在每次 VM 或物理服务器重新启动期间重新生成 JWT 密钥,因此集成中可能存在问题。若要避免此问题,请在 中指定自己的值。-e JWT_SECRET=my_jwt_secret
如果您不打算在安装中使用 JWT,请使用 .-e JWT_ENABLED=false
使用HTTPS运行ONLYOFFICE文档
为了通过SSL保护应用程序,基本上需要两件事:
- 私钥 (.key)
- SSL 证书 (.crt)
因此,您需要创建并安装以下文件:
/app/onlyoffice/DocumentServer/data/certs/onlyoffice.key
/app/onlyoffice/DocumentServer/data/certs/onlyoffice.crt
sudo docker run -i -t -d -p 443:443 --restart=always \
-v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data -e JWT_SECRET=my_jwt_secret onlyoffice/documentserver
注意根据实际情况修改对应的端口号,证书再运行前就准备好放到对应的目录里面,完成后等3分钟再nextcloud后台配置Onlyoffice连接器。如果有报错勾选 关闭证书校验 再保存试试。
其他配置参考配置链接。
b05ce5ed7fb84b9a
修改或添加onlyoffice里面的字体
可以将windows里面的字体或者在其他地方下载的字体复制到容器的/var/www/onlyoffice/documentserver/core-fonts/目录里面
然后执行/usr/bin/documentserver-generate-allfonts.sh命令初始化字体
完了重启容器,清空浏览器缓存或者换个浏览器使用无痕模式在打开文件看看字体有没有变化。
其他配置修改,例如修改超时时间,允许私有ip访问,限制文件大小等等
编辑容器/etc/onlyoffice/documentserver/local.json文件,不要编辑default.json文件,重启后这个文件会还原,修改都会丢失,
具体配置参数https://helpcenter.onlyoffice.com/installation/docs-developer-configuring.aspx?from=api#services-CoAuthoring-server-savetimeoutdelay在这里查找。
注意修改复制的时候注意标点符号,改错的话容器可能无法启动,只能重新创建容器。
8、在线解压软件
商店安装 Extract
运行环境安装unrar和p7zip p7zip-full
9、图片视频等生成缩略图在线预览
商店安装 Preview Generator
第一次使用可以手动预生成预览图
sudo -u www php /www/wwwroot/xxx.xxx.com/occ preview:generate-all -vvv
文件越多速度越慢,慢慢等待完成就好。
再config/config.php添加以下代码
'enable_previews' => true,
'enabledPreviewProviders' => array (
0 => 'OC\\Preview\\TXT',
1 => 'OC\\Preview\\MarkDown',
2 => 'OC\\Preview\\PDF',
3 => 'OC\\Preview\\Image',
4 => 'OC\\Preview\\Photoshop',
5 => 'OC\\Preview\\TIFF',
6 => 'OC\\Preview\\SVG',
7 => 'OC\\Preview\\Font',
8 => 'OC\\Preview\\MP3',
9 => 'OC\\Preview\\Movie',
10 => 'OC\\Preview\\MKV',
11 => 'OC\\Preview\\MP4',
12 => 'OC\\Preview\\AVI',
13 => 'OC\\Preview\\PNG',
14 => 'OC\\Preview\\JPEG',
),
为 Nextcloud 预览生成器设置 Cron 或 systemd 计时器
Cron
为 Nextcloud 用户添加或创建新的 cronjob:
crontab -e -u www-data
使用您喜欢的编辑器,添加如下内容,该编辑器将在 04:00 运行作业:
0 4 * * * /usr/bin/php -f /var/www/nextcloud/occ preview:pre-generate
Systemd timers
您需要创建 2 个单元文件: 注意把代码里面的php信息和站点目录信息替换为自己实际的
第一个 /etc/systemd/system/nextcloud-preview-generator.service
输入下面代码
[Unit]
Description=Nextcloud Preview Generator
[Service]
Type=oneshot
User=www-data
ExecStart=/www/server/php/82/bin/php -f /var/www/nextcloud/occ preview:pre-generate
[Install]
WantedBy=basic.target
第二个 /etc/systemd/system/nextcloud-preview-generator.timer
输入下面代码
[Unit]
Description=Run Nextcloud Preview Generator daily at 04:00
# 将在 04:00 运行作业
[Timer]
OnCalendar=*-*-* 4:00:00
Persistent=true
[Install]
WantedBy=timers.target
systemd 重新加载:systemctl daemon-reload
激活计时器:systemctl enable nextcloud-preview-generator.timer
启动计时器:systemctl start nextcloud-preview-generator.timer
10、使用occ命令为nextcloud手动添加文件 使后台上传的文件在nextcloud中显示
有时候,直接通过Web页面上传文件并不那么方便,于是有的朋友就直接把文件上传到服务器里,然后拷贝到data目录下,打开nextcloud,却还是之前的文件。
这是因为虽然上传了文件,但是Nextcloud的数据库里并没有这个文件的信息。文件信息都被存储在数据库的oc_filecache表中。
使用OCC命令更新文件索引。
occ有三个用于管理Nextcloud中文件的命令:
files files:cleanup #清除文件缓存 files:scan #重新扫描文件系统 files:transfer-ownership #将所有文件和文件夹都移动到另一个文件夹
我们需要使用
files:scan
来扫描新文件。
直接扫描所有用户的所有文件
sudo -u www php /www/wwwroot/www.xxx.com/occ files:scan --all
或者可以扫描单个用户
使用下面occ命令 列出所有用户
sudo -u www php /www/wwwroot/www.xxx.com/occ user:list //注意站点目录根据实际目录替换为自己的
例如列出了2个用户 rooto和rooto2
- rooto: rooto
- rooto2: rooto2
使用下面occ命令 扫描rooto用户的所有文件
sudo -u www php /www/wwwroot/www.xxx.com/occ files:scan rooto
扫描完成后会列出信息
Starting scan for user 1 out of 1 (rooto)
+---------+-------+--------+--------------+
| Folders | Files | Errors | Elapsed time |
+---------+-------+--------+--------------+
| 24 | 75 | 0 | 00:00:00 |
+---------+-------+--------+--------------+
扫描完成之后,在nextcloud的web页面就能看到通过其他途径上传到nextcloud的data目录的文件了
还有其他命令,例如扫描指定文件夹等等,具体参考官方文档:https://docs.nextcloud.com/server/28/admin_manual/configuration_server/occ_command.html
11、使用apache服务器隐藏rul里面的index.php
再config/config.php添加以下代码
'overwrite.cli.url' => 'https://www.xxx.com/',
'htaccess.RewriteBase' => '/',
继续终端运行
sudo -u www php /www/wwwroot/www.xxx.com/occ maintenance:update:htaccess
12、您的数据目录和文件似乎可以从互联网访问。这是因为 .htaccess 文件无效。强烈建议您配置您的 web 服务器,使数据目录不再可访问,或将数据目录移到 web 服务器文档根目录之外。
这个其实是Nginx的问题,为了进一步提升安全性,我们打开网站-配置文件,
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md|data)
{
return 404;
}
#在上面location后面的代码里面加入|data目录就行
13、The PHP OPcache module is not properly configured. The OPcache buffer is nearly full. To assure that all scripts can be hold in cache, it is recommended to apply “opcache.memory_consumption” to your PHP configuration with a value higher than “128”.. 更多细节,请参见文档 ↗。
打开PHP配置文件,修改下面的参数
opcache.memory_consumption=128
修改为大于256或者512,要大于128
opcache.jit=1205
修改为1255,不修改也行
14、大文件夹上传超时
PHP的 upload_max_filesize 和 post_max_size 设置可能不适用于通过 WebDAV 单文件 PUT 请求或分块文件上传的文件上传,对于这些情况,PHP 和 Web 服务器超时是上传大小的限制因素。
在相应的 php.ini 文件中设置以下四个参数(请参阅 PHP 版本和信息的加载配置文件部分以查找相关的 php.ini 文件)
php_value upload_max_filesize 16G
php_value post_max_size 16G
php_value max_input_time 3600
php_value max_execution_time 3600
可以继续在站点目录.user.ini的文件里面加上这4行代码
完了保存重新加载php配置文件,然后重启php。
15、常用插件
1、开启用户注册
Registration
2、开启外部存储
External storage support
宝塔面板使用lnmp环境安装的nginx配置
这个是我的配置,具体看《里面的说明》,使用的是宝塔面板8.0.5,nginx 1.22版本。网站创建好之后先申请SSL,然后把配置文件修改了在打开网站域名安装。
加粗字体的是后添加的,其他的是创建好网站申请好SSL之后的默认配置。复制配置文件的时候注意一些对应的域名和配置信息要改为和自己环境匹配的。
注意顺序,自己添加的配置最好放到《#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效》宝塔面板自带的引用伪静态的这一行上面,要不然有的配置不会生效
《下面map的部分添加上,如果不添加的话就要把两行#号之间的配置信息里面的$asset_immutable删掉,要不然保存配置会报错无法保存。》
map $arg_v $asset_immutable {
"" "";
default ", immutable";
}
server
{
listen 80;
listen 443 ssl http2;
server_name nextcloud.woyfc.xyz;
index index.php index.html /index.php$request_uri;
#index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/nextcloud.woyfc.xyz;
#CERT-APPLY-CHECK--START
# 用于SSL证书申请时的文件验证相关配置 -- 请勿删除
include /www/server/panel/vhost/nginx/well-known/nextcloud.woyfc.xyz.conf;
#CERT-APPLY-CHECK--END
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
ssl_certificate /www/server/panel/vhost/cert/nextcloud.woyfc.xyz/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/nextcloud.woyfc.xyz/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
####################################################################################《下面还有一行#号,两行#号之间的是根据nextcloud官方推荐的配置添加的》
server_tokens off;
gzip on;
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 text/javascript application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm 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-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "noindex, nofollow" always;
add_header X-XSS-Protection "1; mode=block" always;
fastcgi_hide_header X-Powered-By;
include mime.types;
types {
text/javascript js mjs;
application/wasm wasm;
}
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;
}
location ^~ /.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; }
return 301 /index.php$request_uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) {return 404;}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {return 404;}
location ~ \.php(?:$|/) {
rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode(_arm64)?\/proxy) /index.php$request_uri;
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;
fastcgi_param front_controller_active true;
fastcgi_pass unix:/tmp/php-cgi-81.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
fastcgi_max_temp_file_size 0;
}
location ~ \.(?:css|js|mjs|svg|gif|png|jpg|ico|wasm|tflite|map|ogg|flac)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463, $asset_immutable";
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "noindex, nofollow" always;
add_header X-XSS-Protection "1; mode=block" always;
access_log off;
}
location ~ \.woff2?$ {
try_files $uri /index.php$request_uri;
expires 7d;
access_log off;
}
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引用配置,可以注释或修改
include enable-php-81.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/nextcloud.woyfc.xyz.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
#禁止在证书验证目录放入敏感文件
if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
return 403;
}
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.woyfc.xyz.log;
error_log /www/wwwlogs/nextcloud.woyfc.xyz.error.log;
}