Nextcloud 的一些安装问题

近日又部署回了我最喜欢的Nextcloud,发现管理页面一片红,该修复了……

Update: 2019-04-14 更新 Nextcloud 15 后的 Mysql 问题。

.htaccess和.user.ini不存在/hash不上问题

安装包内解压 –> 上传/覆盖即可

Strict-Transport-Security 问题

因为我是 Nginx 所以接下来都没有 Apache 的场地啦> <

官方也给了 Nginx 的解决方法:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload;";

X-Frame-Options 问题

你可能碰到”我加了 X-Frame-Options 还提示没设置”这种情况,只需要去掉这行就行了,不需要添加下面这行:[1]

add_header X-Frame-Options "SAMEORIGIN";

PHP 的设置似乎有问题, 无法获取系统环境变量.

PHP 的设置似乎有问题, 无法获取系统环境变量. 使用 getenv(\”PATH\”) 测试时仅返回空结果. 请检查 安装文档 ! 中关于 PHP 配置的说明并在您的服务器中进行配置, 尤其是使用 php-fpm 时.

我是php 7.0,于是找到 /etc/7.0/fpm/pool.d/www.conf[2]

$ sudo vi /etc/7.0/fpm/pool.d/www.conf

找到这个:

; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
; the current environment.
; Default Value: clean env
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

将下面的取消注释:

; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
; the current environment.
; Default Value: clean env
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

内存缓存未配置. 如果可用, 请配置 memcache 以增强性能. 更多信息请查看我们的文档.

Redis 大法好![3]

$ sudo apt install php-apcu redis-server php-redis

然后找到 Redis 的配置文件:

$ sudo vi /etc/redis/redis.conf

找到

port 6379

改成

port 0

然后去掉下面的注释:

# unixsocket /var/run/redis/redis.sock
# unixsocketperm 700

顺便改掉下面的权限:

unixsocketperm 770

保存退出之后,我们需要把 Redis 归入 www-data 权限组:

$ sudo usermod -a -G redis www-data

然后重启 Nginx 和 Redis :

$ sudo systemctl reload nginx
$ sudo systemctl start redis-server

设置好 Redis 了,接下来我们要把它应用到 Nextcloud 里:

$ sudo vi /var/www/html/nextcloud/config/config.php

加入下面的代码:

  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'filelocking.enabled' => 'true',
  'redis' => 
    array (
      'host' => '/var/run/redis/redis.sock',
      'port' => 0,
      'timeout' => 0.0,
    ),

保存退出,为确保 系统启动时 Redis 能够启动:

$ sudo systemctl enable redis-server

好了,坐和放宽。

PHP 的组件 OPcache 没有正确配置.

为了提供更好的性能, 我们建议在php.ini文件中使用下列设置:

opcache.enable=1 opcache.enablecli=1 opcache.internedstringsbuffer=8 opcache.maxacceleratedfiles=10000 opcache.memoryconsumption=128 opcache.savecomments=1 opcache.revalidatefreq=1

hmm,找到 php.ini:

$ sudo vi /etc/php/7.0/fpm/php.ini

然后找到 OPCache 的设置:

[opcache]
; Determines if Zend OPCache is enabled
;opcache.enable=0

; Determines if Zend OPCache is enabled for the CLI version of PHP
;opcache.enable_cli=0

; The OPcache shared memory storage size.
;opcache.memory_consumption=64

; The amount of memory for interned strings in Mbytes.
;opcache.interned_strings_buffer=4

; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.
;opcache.max_accelerated_files=2000

// ...

; How often (in seconds) to check file timestamps for changes to the shared
; memory storage allocation. ("1" means validate once per second, but only
; once per request. "0" means always validate)
;opcache.revalidate_freq=2

; If disabled, all PHPDoc comments are dropped from the code to reduce the
; size of the optimized code.
;opcache.save_comments=1

改掉就行啦!

我是 MariaDB。

因为 Debian 的源内的软件都太 Stable 了,于是在写本文时还是 10.2 及以下。

首先,找到 /etc/mysql/mariadb.cnf,然后加入下面的内容:

[mysqld]
innodb_large_prefix=true
innodb_file_format=barracuda
innodb_file_per_table=1

然后用 sudo systemctl restart mariadb 重启一次。

接下来我们(可能)需要手动转换一些表。登入数据库,然后执行这个!

SELECT NAME, SPACE, FILE_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME like "nextcloud%";

如果后面 FILE_FORMAT 是 Barracuda 的话,就不需要做操作了!可我这里是 Antelope。遂开始手动转换。

首先要 USE INFORMATION_SCHEMA;,然后输入这个:

SELECT CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` ROW_FORMAT=DYNAMIC;") AS MySQLCMD FROM TABLES WHERE TABLE_SCHEMA = "nextcloud";

这会返回一个表。没错,接下来就是把这个表复制到你喜欢的文本编辑器,然后筛选出 MySQL 命令再粘贴回去!

官方说,这里可能会出现 ERROR 1478 (HY000): Table storage engine ‘InnoDB’ does not support the create option ‘ROW_FORMAT’ 这个错误。解决方法是运行这个:ALTER TABLEnextcloud.oc_tablenameROW_FORMAT=DYNAMIC, ALGORITHM=COPY; 别忘了把 oc_tablename 替换成出了问题的表哦。

执行完成后,下一步是改变数据库的字符集:

ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

然后退出 MariaDB,去你的 Nextcloud 安装根目录将 mysql.utf8mb4 这个配置项设置为 true:

sudo -u www-data php occ config:system:set mysql.utf8mb4 --type boolean --value="true"

最后一步,执行修复操作——将所有已有的数据表更新为 utf8mb4:

sudo -u www-data php occ maintenance:repair

对,现在 Nextcloud 就完全支持 Emoji 了。

事后

All Set

爽!

参考:

[1] https://help.nextcloud.com/t/x-frame-options-sameorigin-nc-on-nginx-keeps-warning-me/1553/5

[2] https://help.nextcloud.com/t/after-installation-one-problems/10035

[3] https://bayton.org/docs/nextcloud/installing-nextcloud-on-ubuntu-16-04-lts-with-redis-apcu-ssl-apache/#6-2-enable-caching


如果喜欢本文,欢迎点击下方的「鼓掌」按钮!

如果上面没有加载出任何东西,可以点击这里