笔者由于FreeNAS(TrueNAS)的ZFS文件系统的功能,想在上面架设NextCloud。本来FreeNAS也自带了NextCloud插件,可是由于国内网络环境的原因,死活安装不上。在某歌一番后查到了这位大神的超详细教程,点此查看原文,在成功后特此记录,并因地制宜,改用了性能更好的Nginx作为网页服务器,另外提供了一些修复方法和优化设置。另外,如果要升级新版本,大神的教程后面有手动的升级的教程,可以作为参考。
为了节省时间可以先下载安装包:点此打开
选择你要安装的版本,选择后缀为.tar.bz2和.tar.bz2.sha512的文件下载,后者是检验文件。

教程目录

    • 创建FreeNAS的数据集
      • 创建数据库
      • 创建NextCloud应用数据集
    • 创建用户并设置权限
      • 创建mysql用户
      • 添加数据集权限
    • 创建Jail
      • 使用ssh连接到FreeNAS
    • 使用命令行创建Jails
      • 映射目录
        • 命令说明:
      • 设置FreeNas缓存
      • 设置Jail的DNS
    • 设置Jail
      • 设置软件源(可选)
        • 更新源错误解决
          • 关闭本地源
      • 安装所需软件
    • 安装NextCloud文件
    • 设置数据库MYSQL(MARIADB)
      • 修改配置
      • 配置MySQL
      • 注:上传文件性能优化
    • 安装并配置PHP
      • 安装PHP
      • 配置PHP.INI
    • 设置Nginx和SSL证书
    • 设置NextCloud
    • 配置缓存REDIS
      • 确认Redis配置正确
    • 优化NextCloud
      • 配置Cron文件
      • 上传性能优化
        • FreeNas设置([参考](https://aukcl.win/archives/513/))
          • 内存脏数据缓冲区设置
          • 数据块大小
        • php、nginx、mysql设置
        • nextcloud设置
      • 启用FreeBSD的系统安全模块
      • 设置NextCloud默认语言和地区为简体中文
    • 手动更新Nextcloud
    • 修复Nextcloud
      • 维护模式
      • oc_filecache表损坏
      • 清除删除文件
      • 错误提示` Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)`
    • 反向代理
  • 全局搜索

创建FreeNAS的数据集

根据Nextcloud文档,Nextcloud安装需要四个目录:

  1. 配置目录
  2. 数据目录
  3. 数据库
  4. 主题目录
    于是我们创建出以下结构(名字可以不同):
├── UserData
│   └── NextCloudDataBase
└── ── Jails├── nextcloud│   ├── config│   ├── themes│   ├── db└── iocage├── ...├── jails│   └── nextcloud└── ...

创建数据库

在UserData存储池下,创建一个新数据集NextCloudDataBase,注意其中atime值设置为off,这与默认值不同。这样可防止在读取文件时产生日志流量,并显着提高性能,这对于我们的数据文件夹而言很好。

创建NextCloud应用数据集

在UserData存储池下,创建一个新数据集nextcloud,配置和NextCloudDataBase数据集相比,只需打开ATime即可。再在nextcloud数据集下创建三个数据集,分别是config,themes,db。前两个数据集配置与nextcloud数据集的相同,最后一个db数据集配置和NextCloudDataBase数据集配置相同。

创建用户并设置权限

创建mysql用户

找到添加用户选项:

如图添加mysql用户:

添加数据集权限

找到nextcloud数据集,点击图中的三个点,出现编辑权限选项。


在将db数据集所有者和群组都设置成mysql。

另外三个目录config,themes,还有NextCloudDataBase如上权限设置成www用户和www群组(www系统自带,无需自己创建)。

创建Jail

使用ssh连接到FreeNAS

首先,到服务中打开SSH,

,点击动作,为了方便允许root账号登录

使用SSH工具(这里使用Xshell)连接到FreeNAS。

使用命令行创建Jails

使用以下命令创建Jail。

iocage create -n NextCloud -r 11.3-RELEASE ip4_addr="vnet0|192.168.204.97/24" defaultrouter="192.168.204.1" vnet="on" allow_raw_sockets="1" boot="on"
参数 含义
-n Jail的名字
-r 指定FreeBSD的发行版,根据你的系统确定。如果您的FreeNAS版本为11.1,则需要将11.1-RELEASE作为参数而不是11.3-RELEASE
ip4_addr 设定Jail的IP /掩码(192.168.204.97/24),以及要使用的接口vnet0。根据你的实际状况设定
defaultrouter 默认网关,根据实际情况设定
vnet 启用vnet接口,我们用vnet0作为接口的前置条件
allow_raw_sockets 启用原始套接字,从而启用在Jail内使用诸如ping和traceroute之类的功能,并实现与各种网络子系统的交互。
boot 允许在FreeNAS启动时自动启动Jail。
成功后应返回如下图所示:

映射目录

使用以下命令在Jail中创建相应的目录

iocage exec NextCloud mkdir -p /mnt/data
iocage exec NextCloud mkdir -p /var/db/mysql
iocage exec NextCloud mkdir -p /usr/local/www/nextcloud/config
iocage exec NextCloud mkdir -p /usr/local/www/nextcloud/themes

再使用下面的命令把Jail中的目录映射到数据集中 (当路径和我设置不同时,记得更改为自己的路径)

iocage fstab -a NextCloud /mnt/UserData/NextCloudDataBase /mnt/data nullfs rw 0 0
iocage fstab -a NextCloud /mnt/Jails/nextcloud/db /var/db/mysql nullfs rw 0 0
iocage fstab -a NextCloud /mnt/Jails/nextcloud/config /usr/local/www/nextcloud/config nullfs rw 0 0
iocage fstab -a NextCloud /mnt/Jails/nextcloud/themes /usr/local/www/nextcloud/themes nullfs rw 0 0

执行成功如下图:

命令说明:

iocage fstab -a jail名字 数据集路径 Jail路径 nullfs (rw/ro) 0 0

rw / ro是指监狱对已装载数据集的权限;rw为读/写,ro为只读。

如果输错了,要更改输入iocage fstab -e NextCloud,会用vi打开fstab文件,在里面可以更改映射的设置。(vi的使用方法自己百度吧)

最后,我们启动Jail:

iocage start NextCloud

设置FreeNas缓存

zfs set primarycache=metadata Jails/nextcloud/db

这个是FreeNAS针对数据库存储的优化。

设置Jail的DNS

在Jail界面选中刚刚创建的Jail,停止并编辑它。

如上图将resolver改成none,这样Jail的DNS的设置就和你FreeNAS设置的相同。

设置Jail

使用以下命令来进入Jail的控制台。

iocage console NextCloud

设置软件源(可选)

详细说明参考此处
编辑/usr/local/etc/pkg/repos/FreeBSD.conf文件

FreeBSD: {url: "pkg+http://pkg0.twn.freebsd.org/${ABI}/quarterly",
}

保存文件后,更新源pkg update -f,第一次会比较慢一点,有选项选y就好。

更新源错误解决

关闭本地源

pkg: file:///usr/ports/packages/meta.txz: No such file or directory
repository local has no meta file, using default settings pkg:
file:///usr/ports/packages/packagesite.txz: No such file or directory
Unable to update repository local Error updating repositories!

若提示上述错误,编辑/usr/local/etc/pkg/repos/local.conf文件,修改以下项:

enable: no #关闭本地源

安装所需软件

pkg install nano
pkg install wget ca_root_nss
pkg install nginx
pkg install mariadb104-server
pkg install redis

设置开机启动

sysrc nginx_enable=yes
sysrc mysql_enable=yes
sysrc redis_enable=yes

安装NextCloud文件

将前面的下载好的NextCloud,用WINSCP上传到/mnt/Jails/iocage/jails/NextCloud/root/tmp
然后,使用命令检验文件完整性

cd /tmp
shasum -a 512 -c nextcloud-20.0.1.tar.bz2.sha512

如果返回OK,则没有问题,下一步,不然你需要重新下载并上传。

然后我们解压到/usr/local/www/nextcloud,然后给www添加权限。

tar -xf nextcloud-20.0.1.tar.bz2 -C /usr/local/www
chown -R www:www /usr/local/www/nextcloud

设置数据库MYSQL(MARIADB)

修改配置

在继续之前,我们需要修改MySQL配置以在正确的位置创建一个套接字。打开/usr/local/etc/mysql/my.cnf如下:

nano /usr/local/etc/mysql/my.cnf

现在找到显示以下内容的行:

socket  = /var/run/mysql/mysql.sock

对其进行修改以匹配以下内容:

socket  = /tmp/mysql.sock

现在保存并退出(Ctrl + X),并按回车。

配置MySQL

启动MySQL服务并完成设置过程:

service mysql-server start
mysql_secure_installation --socket=/tmp/mysql.sock

注意:如果此时出现以下错误:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

请遵循以下步骤:1. 按Ctrl + C停止脚本
2. 输入以下命令以停止mysql服务器

/usr/local/etc/rc.d/mysql-server stop
  1. 然后输入以下命令:
mysqld_safe --skip-grant-tables &
/usr/local/etc/rc.d/mysql-server start
  1. 再次按Ctrl + C停止脚本,再重新运行向导脚本。
  2. 如果出现Enter current password for root (enter for none):则说明没有问题。

我们现在没有密码,直接回车,然后如下图提示输入y

输入你的数据库密码进行设置,后面要用,别忘了
注:输入密码是看不见反馈的,输完按回车就行了
后面一直按y就行。

接下来,我们创建NextCloud所需的数据库。
登陆到MySQL,输入刚刚设置的密码:

mysql -u root -p

然后一行接一行地输入以下命令:

CREATE DATABASE nextcloud;
CREATE USER 'nextcloud_admin'@'localhost' IDENTIFIED BY '改成刚刚设置的密码';
GRANT ALL ON nextcloud.* TO 'nextcloud_admin'@'localhost';
FLUSH PRIVILEGES;
exit

MqSQL就配置好了

注:上传文件性能优化

在exit前,设置innodb_flush_log_at_trx_commit变量为0或2,默认为1。

set GLOBAL innodb_flush_log_at_trx_commit = 0;

说明:这个变量设定了log写入硬盘的方式。0代表每隔1秒把log写入硬盘、1代表每次新增log都会写入硬盘、2代表不定时写到文件系统缓存,而不同文件系统真正写入硬盘时间不同。
所以,1是最安全的,但对硬盘性能要求很高,对安全性要求比较高时启用
使用0最多丢失1s的数据。但性能会提升十多倍,对安全性要求不高时,推荐设置。

安装并配置PHP

安装PHP

用以下命令将安装PHP 8.1和Nextcloud运行所需的软件包:

pkg install php81 php81-bz2 php81-ctype php81-curl php81-dom php81-exif php81-fileinfo php81-filter php81-gd php81-iconv php81-intl php81-ldap php81-mbstring php81-opcache php81-pdo php81-pdo_mysql php81-pecl-APCu php81-pecl-imagick php81-pecl-redis php81-posix php81-session php81-simplexml php81-xml php81-xmlreader php81-xmlwriter php81-xsl php81-zip php81-zlib php81-bcmath php81-gmp php81-pecl-smbclient php81-ftp

注:要使用更新版本的PHP时,首先要停止nginx与php-fpm服务,直接安装新版本的包即可。此处查看官方推荐版本

刚刚应该已经与php一起安装了php-fpm,所以,将其添加到启动脚本(rc.conf)中,然后启动php-fpm服务:

sysrc php_fpm_enable=yes
service php-fpm start

配置PHP.INI

先移动到

cd /usr/local/etc

再根据模板复制一份php配置,并编辑它(用WINSCP也行)

cp php.ini-production php.ini
nano /usr/local/etc/php.ini

在nano(Ctrl + W)中使用搜索命令取消注释,并确保以下参数具有这些值。删除在该行的开头的“;”即可删除注释:

cgi.fix_pathinfo=1
date.timezone ="Asia/Shanghai"
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1

这些值与上传文件有关,根据自己需要设定:

max_execution_time = 0         #默认是30秒,改为0,表示没有上传时间限制
memory_limit = 1024M
post_max_size = 10240M
upload_max_filesize = 10240M#上传缓存目录,默认是本机的/tmp。推荐设置到与/mnt/data相同硬盘的目录
upload_tmp_dir =

nano保存并退出:

Ctrl + X
Y
ENTER

另外,配置文件/usr/local/etc/php-fpm.d/www.conf,取消下面项的注释

clear_env = no

重新启动php-fpm

service php-fpm restart

设置Nginx和SSL证书

使用WINSCP在/mnt/Jails/iocage/jails/NextCloud/root/usr/local/etc/nginx下新建文件nextcloud.conf输入以下配置
注:如果你端口转发的端口与下面listen的端口不同,请更改至相同,否则会出现报错,如下图
最新的nginx设置参考官方文档:

upstream php-handler {server 127.0.0.1:9000;#server unix:/var/run/php/php7.4-fpm.sock;
}# Set the `immutable` cache control options only for assets with a cache busting `v` argument
map $arg_v $asset_immutable {"" "";default "immutable";
}server {listen 80;listen [::]:80;server_name 换成你证书对应的域名;# Prevent nginx HTTP Server Detectionserver_tokens off;# Enforce HTTPSreturn 301 https://$server_name$request_uri;
}server {listen 443      ssl http2;listen [::]:443 ssl http2;server_name 换成你证书对应的域名;# Path to the root of your installationroot /usr/local/www/nextcloud;# Use Mozilla's guidelines for SSL/TLS settings# https://mozilla.github.io/server-side-tls/ssl-config-generator/ssl_certificate 换成你证书对应的pem文件路径;ssl_certificate_key 换成你证书对应的key文件路径;# Prevent nginx HTTP Server Detectionserver_tokens off;# HSTS settings# WARNING: Only add the preload option once you read about# the consequences in https://hstspreload.org/. This option# will add the domain to a hardcoded list that is shipped# in all major browsers and getting removed from this list# could take several months.add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;# set max upload size and increase upload timeout: 上传相关设置client_max_body_size 102400M;client_body_timeout 14400s;fastcgi_buffers 64 4K;# upload accelerate 上传加速设置client_body_buffer_size 10240M;# Enable gzip but do not remove ETag headersgzip 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 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;# Pagespeed is not supported by Nextcloud, so if your server is built# with the `ngx_pagespeed` module, uncomment this line to disable it.#pagespeed off;# HTTP response headers borrowed from Nextcloud `.htaccess`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 leakfastcgi_hide_header X-Powered-By;# Specify how to handle directories -- specifying `/index.php$request_uri`# here as the fallback means that Nginx always exhibits the desired behaviour# when a client requests a path that corresponds to a directory that exists# on the server. In particular, if that directory contains an index.php file,# that file is correctly served; if it doesn't, then the request is passed to# the front-end controller. This consistent behaviour means that we don't need# to specify custom rules for certain paths (e.g. images and other assets,# `/updater`, `/ocm-provider`, `/ocs-provider`), and thus# `try_files $uri $uri/ /index.php$request_uri`# always provides the desired behaviour.index index.php index.html /index.php$request_uri;# Rule borrowed from `.htaccess` to handle Microsoft DAV clientslocation = / {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 clientslocation ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)  { return 404; }location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)                { return 404; }# Ensure this block, which passes PHP files to the PHP process, is above the blocks# which handle static assets (as seen below). If this block is not declared first,# then Nginx will encounter an infinite rewriting loop when it prepends `/index.php`# to the URI, resulting in a HTTP 500 error response.location ~ \.php(?:$|/) {# Required for legacy supportrewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/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;         # Avoid sending the security headers twicefastcgi_param front_controller_active true;     # Enable pretty urlsfastcgi_pass php-handler;fastcgi_intercept_errors on;fastcgi_request_buffering off;fastcgi_max_temp_file_size 0;}location ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map)$ {try_files $uri /index.php$request_uri;add_header Cache-Control "public, max-age=15778463, $asset_immutable";access_log off;     # Optional: Don't log access to assetslocation ~ \.wasm$ {default_type application/wasm;}}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;}
}

然后在同目录下的nginx.conf中包含该文件

include  nextcloud.conf;


保存,并重启Nginx

service nginx restart

设置NextCloud

设置好端口转发后,在浏览器输入你的域名:端口,应该就可以看到NextCloud的初始化页面了。

输入自己的账号,并配置以下信息:

/mnt/data
nextcloud_admin
之前数据库设置的密码
nextcloud
localhost:/tmp/mysql.sock

配置缓存REDIS

为了提升性能,我们配置内存缓存REDIS。
首先,我们将REDIS设置为本地监听。

nano /usr/local/etc/redis.conf

将port改成0

port 0

并删除“#”,来取消注释,并修改对应的值

unixsocket /var/run/redis/redis.sock
unixsocketperm 770

重启redis

service redis restart

确认Redis配置正确

运行

ls -al /var/run/redis

若出现类似于

srwxrwx---  1   redis   redis   0   MMM     D   HH:MM   redis.sock

则配置正确,若没有出现或不是srwxrwx—,则有问题,认真确认上面的配置。

然后将redis应用到NextCloud上

su -m www -c 'php /usr/local/www/nextcloud/occ config:system:set redis host --value="/var/run/redis/redis.sock"'
su -m www -c 'php /usr/local/www/nextcloud/occ config:system:set redis port --value=0 --type=integer'
su -m www -c 'php /usr/local/www/nextcloud/occ config:system:set memcache.local --value="\OC\Memcache\APCu"'
su -m www -c 'php /usr/local/www/nextcloud/occ config:system:set memcache.locking --value="\OC\Memcache\Redis"'

将www用户添加到redis组以允许其访问redis:

pw usermod www -G redis

重启Nginx

service nginx restart

优化NextCloud

配置Cron文件

先将环境编辑器更改为nano,然后配置“ www”用户的crontab,

setenv EDITOR nano
//当执行上面的命令出现command not found: setenv时, 换下面这句
export EDITOR=nanocrontab -u www -e

写入以下内容来运行nextcloud cron脚本。

  */5      *       *       *       *       /usr/local/bin/php -f /usr/local/www/nextcloud/cron.php  --define apc.enable_cli=1

然后在NextCloud中选择Cron作为后台任务

上传性能优化

FreeNas设置(参考)

内存脏数据缓冲区设置

参考这位大佬文章,调整合适缓存区。

  1. 进入FreeNAS Web管理页面-系统(System)-微调(Tunables)
  2. 添加(ADD)一条规则
  3. 变量(Variable)为vfs.zfs.dirty_data_max
  4. 值为(Value)1073741824
  5. 选择类型(Type)为sysctl
  6. 点击保存(SAVE)
  7. 最后重启FreeNAS
    注:值单位为byte,此处的值等效为1GB,合适的值需要测试得出。
数据块大小

调整pool的数据块大小:

  1. 进入FreeNAS Web管理页面-存储(Seagate)-存储池(pools)
  2. 点击pool最右边的三个点,选择编辑选项
  3. 翻到最下面的记录大小,设置为1M(最好测试一下最快的大小)
  4. 点击保存(SAVE)

php、nginx、mysql设置

上文中已写,去对应部分查找。

nextcloud设置

nextcloud是分块上传的,分块默认值为 10485760 (10 MB)这个值太小,受硬盘IO限制,速度会低。

  • 设置分块为256MB
su -m www -c 'php /usr/local/www/nextcloud/occ config:app:set files max_chunk_size --value 268435456'
  • 当设置为0时,不分块上传。
su -m www -c 'php /usr/local/www/nextcloud/occ config:app:set files max_chunk_size --value 0'

启用FreeBSD的系统安全模块

FreeBSD自带有以下的安全选项控制:

  1. 隐藏以其他用户身份运行的进程
  2. 隐藏以其他组身份运行的进程
  3. 禁止为非特权用户读取内核消息缓冲区
  4. 为非特权用户禁用过程调试功能
  5. 随机化新创建进程的PID
  6. 在可扩展段之前插入堆栈保护页面
  7. 启动时清理/ tmp文件系统
  8. 禁用打开syslogd网络套接字(禁用远程日志记录)
  9. 禁用SendMail服务

建议应全部启用这些功能,除非有充分的理由不这样做。一个很好的例子是,如果您有一个远程日志记录服务器,则要禁用选项8(以便启用打开syslogd网络套接字)。我们将如下配置它们。首先,打开内核参数配置文件:nano /etc/sysctl.conf,输入以下命令,这些命令将启用选项1-6。

security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
security.bsd.unprivileged_read_msgbuf=0
security.bsd.unprivileged_proc_debug=0
kern.randompid=$(jot -r 1 9999)
security.bsd.stack_guard_page=1

要启用选项7-9,请运行以下命令:

sysrc clear_tmp_enable=YES
sysrc sendmail_enable="NONE"
sysrc sendmail_submit_enable="NO"
sysrc sendmail_outbound_enable="NO"
sysrc sendmail_msp_queue_enable="NO"
sysrc syslogd_flags="-c -ss"

注:Nextcloud并不是使用SendMail启用发送邮件; 因为,它有自己的库来发送。

设置NextCloud默认语言和地区为简体中文

输入以下命令即可:

su -m www -c 'php /usr/local/www/nextcloud/occ config:system:set default_language --value="zh_CN"'

其他语言可以从这里查询然后对应更改。

手动更新Nextcloud

  1. 根据官方文档更新器下载文件在用户数据文件夹中,在本文中即是/mnt/data。触发更新器后,会在该目录发现updater-xxxx(随机代号)目录。
  2. 使用自带的更新器经常会下载不完整。如果更新器下载失败,让你进行重试。可以看到updater-xxxx(随机代号)目录中有downloads目录,里面即下载的新版本Nextcloud。
  3. 自己下载完整的新版本Nextcloud,先点击重试后,复制完整版的覆盖downloads目录中老的或覆盖后尝试多点击几下重试。等一会就可以跳过下载,更新器直接进入下一步。接着完成更新即可。

修复Nextcloud

维护模式

进入:

su -m www -c 'php /usr/local/www/nextcloud/occ maintenance:mode --on'

退出:

su -m www -c 'php /usr/local/www/nextcloud/occ maintenance:mode --off'

oc_filecache表损坏

进入数据库:

mysql -uroot -p
use nextcloud

清空cache表:

TRUNCATE TABLE oc_filecache;

如果出现oc_filecache doesn’t exist in engine之类的错误,可以重建这个表。

DROP TABLE IF EXISTS `oc_filecache`;CREATE TABLE `oc_filecache` (`fileid` bigint(20) NOT NULL AUTO_INCREMENT,`storage` bigint(20) NOT NULL DEFAULT 0,`path` varchar(4000) COLLATE utf8mb4_bin DEFAULT NULL,`path_hash` varchar(32) COLLATE utf8mb4_bin NOT NULL DEFAULT '',`parent` bigint(20) NOT NULL DEFAULT 0,`name` varchar(250) COLLATE utf8mb4_bin DEFAULT NULL,`mimetype` bigint(20) NOT NULL DEFAULT 0,`mimepart` bigint(20) NOT NULL DEFAULT 0,`size` bigint(20) NOT NULL DEFAULT 0,`mtime` bigint(20) NOT NULL DEFAULT 0,`storage_mtime` bigint(20) NOT NULL DEFAULT 0,`encrypted` int(11) NOT NULL DEFAULT 0,`unencrypted_size` bigint(20) NOT NULL DEFAULT 0,`etag` varchar(40) COLLATE utf8mb4_bin DEFAULT NULL,`permissions` int(11) DEFAULT 0,`checksum` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,PRIMARY KEY (`fileid`),UNIQUE KEY `fs_storage_path_hash` (`storage`,`path_hash`),KEY `fs_parent_name_hash` (`parent`,`name`),KEY `fs_storage_mimetype` (`storage`,`mimetype`),KEY `fs_storage_mimepart` (`storage`,`mimepart`),KEY `fs_storage_size` (`storage`,`size`,`fileid`),KEY `fs_mtime` (`mtime`)
) ENGINE=InnoDB AUTO_INCREMENT=727173 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPRESSED;

最后,退出mysql,重新扫描文件。

su -m www -c 'php /usr/local/www/nextcloud/occ files:scan --all'

清除删除文件

删除所有用户的已删除文件

su -m www -c 'php /usr/local/www/nextcloud/occ trashbin:cleanup --all-users'

删除群组文件夹的已删除文件

su -m www -c 'php /usr/local/www/nextcloud/occ groupfolders:trashbin:cleanup'

错误提示 Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)

root/usr/local/etc/php/ext-20-apcu.ini末尾添加

apc.enable_cli=1

然后重启service php-fpm restart

反向代理

笔者使用了nginxproxymanager来进行反向代理,这个项目很方便。具体设置如下图:



重点是Custom Nginx Configuration,这里主要和上传大文件有关系

# 上传大小不限制
client_max_body_size 0;
# 关闭缓存,否则上传数据会在反代主机缓存
proxy_buffering off;
proxy_request_buffering off;
proxy_max_temp_file_size 0;# 设置超时时间4h,避免大文件上传时间过长导致失败
proxy_connect_timeout 14400s;
proxy_read_timeout 14400s;
keepalive_timeout  14400s;# 上传优化
sendfile        on;#Nextcloud要求的安全设置
location /.well-known/carddav {return 301 $scheme://$host/remote.php/dav;
}location /.well-known/caldav {return 301 $scheme://$host/remote.php/dav;
}

全局搜索

使用Elasticsearch引擎做搜索,官方指导文档。

  1. 应用商店下载插件
    安装Full text search和Full text search - Elasticsearch Platform
  2. 在Docker安装Elasticsearch
    到官网查看最新版本拉取最新镜像。笔者当时版本:8.2.0
//拉取
docker pull elasticsearch:8.2.0
//运行
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:8.2.0

参数解释

-d:后台启动
–name:容器名称
-p:端口映射
-e:设置环境变量 discovery.type=single-node
如果启动不了,可以加大内存设置:-e ES_JAVA_OPTS=“-Xms512m -Xmx512m”

注:ES8默认开启了ssl认证,导致必须使用https访问9200端口。
修改/usr/share/elasticsearch/config/elasticsearch.yml 的配置:xpack.security.enabled:把true改成false,然后重启容器。

  1. 安装ingest-attachment
docker exec -it es bash./bin/elasticsearch-plugin install https://artifacts.elastic.co/downloads/elasticsearch-plugins/ingest-attachment/ingest-attachment-8.2.0.zip
  1. 安装ik中文分词器
    在github查看对应版本进行下载,最好与elasticsearch版本相对应
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.2.0/elasticsearch-analysis-ik-8.2.0.zip

重启容器后,插件才能应用。
可以使用postman测试一下分词器,具体看此处。

地址:http://ip地址:9200/_analyze
Body:raw(JSON)
{
“analyzer”:“ik_max_word”,
“text”:“中华人民共和国”
}

正常结果: 看到分词
5. 在NextCloud中配置连接和分词器

IK分词有这些参数:

  • ik_max_word:会将文本做最细粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、中华人民、中华、华人、人民共和国、人民、人、民、共和国、共和、和、国国、国歌」,会穷尽各种可能的组合
  • ik_smart:会将文本做最粗粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、国歌」
  1. 扫描文件建立索引
//测试配置
su -m www -c 'php /usr/local/www/nextcloud/occ fulltextsearch:test'//开始索引
su -m www -c 'php /usr/local/www/nextcloud/occ fulltextsearch:index'

从零开始在 FreeNAS 的 Jail 上安装 NextCloud 并配置 Nginx 作为网页服务器而且 设置SSL证书 使用 https 访问 以及 oc_filecache 修复方法、优化方法相关推荐

  1. Linux系统下安装minio并设置SSL证书进行HTTPS远程连接访问

    下载minio并且设置权限 创建一个文件夹用于保存下载的minio mkdir /usr/local/minio 在创建的文件夹中用wget下载Linux版本的minio服务端 wget https: ...

  2. nextcloud 服务器系统,如何在Debian 9上安装Nextcloud 12服务器

    NextCloud是一个免费的开放源代码,是另一个开源文件托管解决方案OwnCloud的替代方案. 来自OwnCloud的NextCloud的主要区别在于NextCloud是完全开源的. NextCl ...

  3. 在Linux上安装Gearman及配置使用Gearman的PHP扩展环境

    在Linux上安装Gearman及配置使用Gearman的PHP扩展环境. 先介绍安装 Gearman . 1. 先安装依赖库 # yum install -y boost-devel gperf l ...

  4. 苹果证书(免费) + 打包ipa + 上传app store在Hbuilder里面打包ipa包到没越狱的手机上安装时,是需要p12文件跟.mobileprovision的证书的,这里可以超简单不需要

    苹果证书(免费) + 打包ipa + 上传app store 在Hbuilder里面打包ipa包到没越狱的手机上安装时,是需要p12文件跟.mobileprovision的证书的,这里可以超简单不需要 ...

  5. php iis6 安装ssl证书,在IIS下部署SSL证书实现HTTPS

    HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版.谷歌已经制定了一项长远的计划,它的最终目标是将所有通过HTTP协议呈现的网页标为"不安全",对于站长来说,部署SS ...

  6. 安装SSL证书后不能访问https网站怎么办

    很多朋友在安装配置完SSL证书后不能访问https网站,搞不清楚问题出在哪里,更不知道如何解决.下面就以nginx配置SSL证书为例,来讲一下安装SSL证书后不能访问的解决方法. 1.确保可以以htt ...

  7. linux怎么安装java环境变量_如何简单的在linux上安装jdk并配置环境变量

    这篇文章是为了给我一会自己安装的时候方便使用的,所以内容很简单,平时在wendows系统上安装很容易,但是换到linux系统上面就蒙圈了. 一.下载jdk文件 ​ 下载完成后你得到了 ​ 我们将这个文 ...

  8. 音乐服务器 linux,在Ubuntu/Debian/CentOS上安装Koel以配置个人音乐流媒体服务器

    本文介绍安装和使用Koel在Ubuntu/Debian/CentOS/Fedora上配置个人音乐流媒体服务器.Koel是使用Vue和Laravel PHP Framework编写的开源.基于Web的简 ...

  9. 最新小白详细描述在centos7.5上安装python3并使用Nginx+virtualenv+supervisor来部署tornado项目(整理集合结合实际)系列2

    4.安装nginx 安装gcc gcc是用来编译下载下来的nginx源码,安装gcc和c++编译器(当然以下都是在切换到root用户下的) yum -y install gcc  gcc-c++ ce ...

最新文章

  1. PE文件和COFF文件格式分析——导出表的应用——一种摘掉Inline钩子(Unhook)的方法
  2. C++二维码相关库编译
  3. 马哥linux2020博客,马哥linux学习(bash shell学习)
  4. Ubuntu 远程管理常用命令
  5. vs生成命令和属性的宏
  6. 深观察|区块链不是洪水猛兽,但要警惕以区块链之名圈钱
  7. 策略模式与简单工厂模式
  8. VB.NET连接SQL数据库
  9. ROS系统学习8---节点间的内存共享(初级篇)
  10. linux qq 中文输入法下载,【QQ拼音输入法纯净版和搜狗输入法 For Linux哪个好用】QQ拼音输入法纯净版和搜狗输入法 For Linux对比-ZOL下载...
  11. Inspinia的version 2.4模板使用的谷歌字体加载很慢问题解决
  12. c语言中计数器(定时器)程序
  13. 使用萤石云的出现设备不在线问题的解决方法
  14. Mac电脑怎样网络在线重装系统
  15. win10桌面排序计算机,Windows10正式版下设置桌面自动排列图标的详细步骤
  16. HashMap常见面试问题总结
  17. c语言10迷宫,C语言实现走迷宫
  18. 【大学生项目与竞赛】2021年全国大学生电子设计大赛 (二)模块储备
  19. 关于用d3.js画力导向图(Force-directed Graph)—如何让图收放自如
  20. 微信摇骰子100%必胜的方法

热门文章

  1. 【§解码器Win7codecs设置方法安装与使用教程§】
  2. 代码随想录Day04 | LeetCode24. 两两交换链表中的节点、LeetCode19. 删除链表的倒数第N个节点、LeetCode160. 链表相交、LeetCode142. 环形链表Ⅱ
  3. matlab plot fplot函数
  4. 电商环境下中小企业客户关系管理系统设计
  5. html假蓝屏死机源码,100秒内蓝屏死机的脚本源代码
  6. 0460-HDFS纠删码的机架感知
  7. 顺丰bsp系统 java_顺丰BSP接口SOAP的请求示例
  8. 计算机安全知识策划书,安全知识竞赛策划书模板
  9. matlab多元方程整数解,matlab多元非线性方程组解法
  10. 产品实习之竞品分析报告篇