Canary Workshop

Whatever is worth doing at all is worth doing well

Debian 9 + nginx + PHP 7 + MariaDB环境下的ownCloud安装配置

很早以前,当我还在用Apache2的时候,我曾经安装过ownCloud,但那时没有服务器空间存储文件。现在有了一台大硬盘的存储型VPS,搭建ownCloud便又一次提上了日程。ownCloud官方推荐的WebServer环境是Apache2,各类教程也基于之编写。我因为已经习惯nginx,便想设法让其运行于nginx之上。这并非不可以,但前前后后居然折腾了数个小时,ownCloudnginx上运行的配置堪称坑!坑!!坑!!!为了给以后的安装留下参考,我在这里记录下安装的详细过程。

操作环境是一台安装有全新Debian 9.1 x64的VPS,假定服务运行于www-data用户,假定已安装有nginx,从此一步一步打造出完美运行的ownCloud。走着~

一 准备PHP环境和MariaDB数据库

Debian 9中,MySQL被替换成了社区维护的MariaDB,因此虽然指令中有“mysql字样”,实际安装的仍然是MariaDB

1
2
3
4
5
6
7
8
9
#安装MariaDB、PHP
sudo apt install mysql-server php-fpm php-mysql
#安装ownCloud需要的PHP扩展
sudo apt install php-bz2 php-curl php-gd php-imagick php-intl php-mbstring php-xml php-zip php-pdo php-json php-mcrypt
#数据库初期配置
sudo mysql_secure_installation
#新建数据库、设置root用户的登录(此处与MySQL有异。失误会导致无法连接数据库)
sudo mysql -uroot -p
#以下进入MariaDB的提示符

1
2
3
4
5
6
CREATE database owncloud;
USE mysql;
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
FLUSH PRIVILEGES;
exit;
#以下回到Shell环境
1
2
3
4
#重启MariaDB
sudo systemctl restart mysql
#配置PHP
sudo nano /etc/php/7.0/fpm/pool.d/www.conf

找到以下行,并反注释,保存:

1
2
3
4
5
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

之后

1
sudo systemctl restart php7.0-fpm

至此,PHP与MariaDB都准备就绪。

二 安装ownCloud

1
2
3
4
5
mkdir /var/www
cd /var/www
wget https://download.owncloud.org/community/owncloud-10.0.3.zip
sudo apt install unzip
unzip owncloud-10.0.3.zip

三 配置nginx

这里我已经有一个完美的nginx配置文件,为了简便,这里省略SSL部分的配置,实际使用时需要加上。

域名以localhost代替。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
upstream php-handler {
server unix:/var/run/php/php7.0-fpm.sock;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name localhost;
---SSL配置省略---
add_header Strict-Transport-Security "max-age=1576800000;includeSubDomains;preload";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
root /var/www/owncloud;
index index.php;
error_page 403 /var/www/owncloud/core/templates/403.php;
error_page 404 /var/www/owncloud/core/templates/404.php;
client_max_body_size 10G;
fastcgi_buffers 64 4K;
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README) {
deny all;
}
location / {
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ index.php;
}
location ~ \.php(?:$|/) {
root /var/www/owncloud;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param modHeadersAvailable true;
fastcgi_pass php-handler;
include fastcgi_params;
}
}
server {
listen 80;
listen [::]:80;
server_name localhost;
return 301 https://$host$request_uri;
}

之后

1
2
nginx -t
sudo systemctl restart nginx

四 配置ownCloud

1
2
3
4
5
6
#建立数据目录
mkdir /var/www/owncloud/data
#设置权限
sudo chown -R www-data:www-data /var/www/owncloud
#设置ownCloud的cron任务
sudo -u www-data crontab -e

添加

1
*/15 * * * * php -f /var/www/owncloud/cron.php

至此,基本配置完成。

五 (可选)配置Redis

ownCloud推荐安装内存缓存,但这个并不是必要的。这里使用Redis实现:

1
2
sudo apt install redis-server php-redis
nano /var/www/owncloud/config/config.php

修改文件使末尾为:

1
2
3
4
5
6
7
8
---已有配置---
'memcache.local' => '\OC\Memcache\Redis',
'redis' => [
'host' => 'localhost',
'port' => 6379,
],
'memcache.locking' => '\OC\Memcache\Redis',
)

这样就配置好了Redis

六 总结

如果不是特别需要nginx,还是装Apache2吧。。。安装过程太痛苦了

+∞ 一点没什么卵用的附加内容

为了和其他应用配合,我试图让其他应用直接将文件放在ownCloud的数据目录,但发现在ownCloud中无法读取,查询后得知ownCloud需要在数据库中读取到相关信息才能显示。

所幸,ownCloud的开发者开发了一个小工具occ来解决这个问题,下面使用这个小工具来解决问题:

1
2
sudo ln -s /var/www/owncloud/occ /usr/bin/occ
crontab -e

添加

1
2
* * * * * sudo -u www-data occ files:scan --all
* * * * * chown -R www-data:www-data /file

这样就OK了

真是令人窒息的配置过程呢