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
改掉就行啦!
MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL. For further details read the documentation page about this.
我是 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 TABLE
nextcloud.
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 了。
事后
爽!
参考:
[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
如果喜欢本文,欢迎点击下方的「鼓掌」按钮!
如果上面没有加载出任何东西,可以点击这里。