原作者:MATHIAS BEKE

原文链接:Serving ownCloud with Caddy

译文作者:Jqs7

审阅:@SusuwANjr

在这篇文章中,我会带着你用 Caddy 搭建一个安全的 ownCloud 个人云服务,此教程中所使用的平台为 Ubuntu 14 。

更新:Caddy 当前的正式版还没有支持 WebDav ,所以桌面和手机客户端就没法用了 (*゚ー゚) 不过好消息是开发分支是有这个特性的,所以你想爽一把就只能等下个版本或者自己编译了。

ownCloud

给小白们的 ownCloud 介绍(来自维基百科):

ownCloud是一个自由且开源的个人云存储解决方案,包括兩個部分:服务器和客戶端。ownCloud 最早由KDE开发者Frank Karlitschek于2010年一月创建,目标是成为商业云服务提供商的替代。与商业云存储服务不同,ownCloud可以自由获取无需付费,但相應地,使用者必須自行架設 ownCloud的服务器,這需要一點技術。不過也是有商业云存储服务提供商使用 ownCloud 作為服务器,例如奧地利商的 OwnCube。

ownCloud在客户端可通过网页界面,或者安装专用的客户端软件来使用。网页界面当然就是任何能开网页的平台都支持,而客户端软件也支持相当多平台,Windows、Linux、iOS、Android皆有。

除了云存储之外,ownCloud也可用于同步日历、电子邮件联系人、网页浏览器的书签;此外还有多人在线文件同步协作的功能(类似google documents或Duddle等等)。

安装 MariaDB

因为 ownCloud 需要使用到数据库,所以我们先安装一下 MariaDB 。使用以下命令来安装 MariaDB 服务端以及客户端:

$ sudo apt-get install mariadb-server

完成安装后,如果想要提升安装的安全性的话,可以运行以下命令:

$ sudo /usr/bin/mysql_secure_installation

创建 ownCloud 用户及数据库

现在运行以下命令并输入密码,就可以使用 root 账号登陆 MySQL 命令行客户端了:

$ mysql -u root -p

然后给 ownCloud 创建一个新数据库:

MariaDB [(none)]> create database owncloud;

新增一名用户:

MariaDB [(none)]> grant usage on *.* to [email protected] identified by 'somepassword';

给新用户赋予方才建立的数据库的权限:

MariaDB [(none)]> grant all privileges on owncloud.* to [email protected];

现在你就有了一个用户名为 owncloud 密码为 somepassword ,拥有 owncloud 数据库访问权限的的新用户了。

安装 PHP-FPM

PHP 7 都已经发布了好几个月了,所以我们当然要用新版啦!

首先添加 PHP 7 的 repository :

$ sudo add-apt-repository ppa:ondrej/php $ sudo apt-get update

然后安装 PHP:

$ sudo apt-get install php7.0-fpm

只是安装 PHP 还不够,还需要安装一些 PHP 扩展。
ownCloud 所需要的详细扩展列表可以在这里找到。
一些 PHP 默认没安装,但是必须推荐你装的包:

  • PHP mysql driver
  • PHP gd
  • PHP curl
  • PHP intl
  • PHP mcrypt
  • PHP imagick

一次性安装命令:

$ sudo apt-get install php7.0-mysql php7.0-gd php7.0-curl php7.0-intl php7.0-mcrypt

如果你需要预览视频跟文档的话,那还得安装这两个包(非 PHP):

  • ffmpeg 或者 avconv
  • LibreOffice

为了更好的兼容 Caddy ,最好把 PHP-FPM 监听从 Unix socket 改成 TCP socket:
/etc/php/7.0/fpm/pool.d/www.conf 文件中,把listen = /run/php/php7.0-fpm.socket 改为 listen = 127.0.0.1:9000

安装完所有扩展后,别忘了重启 PHP-FPM:sudo service php7.0-fpm restart

Caddyfile

我跟 mholtdprandzioch 一起完成了下面这个 Caddyfile。 这个配置包含了 ownCloud 所需的所有配置且完全支持桌面与手机客户端。

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
my-owncloud-site.com {

root owncloud
log owncloud/access.log
errors owncloud/access.log

fastcgi / 127.0.0.1:9000 php {
env PATH /bin
}

rewrite {
r ^/index.php/.*$
to /index.php?{query}
}

# client support (e.g. os x calendar / contacts)
redir /.well-known/carddav /remote.php/carddav 301
redir /.well-known/caldav /remote.php/caldav 301

# remove trailing / as it causes errors with php-fpm
rewrite {
r ^/remote.php/(webdav|caldav|carddav)(\/?)$
to /remote.php/{1}
}

rewrite {
r ^/remote.php/(webdav|caldav|carddav)/(.+)(\/?)$
to /remote.php/{1}/{2}
}

# .htacces / data / config / ... shouldn't be accessible from outside
rewrite {
r ^/(?:\.htaccess|data|config|db_structure\.xml|README)
status 403
}

header / Strict-Transport-Security "15768000"

}

因为 Caddy 内置了 Let’s Encrypt 支持,所以我们的 ownCloud 服务端会自动配置好 HTTPS。访问和错误的 log 会写入到 ownCloud 目录里面,data 目录(以及其他一些特殊文件)也杜绝了被外部访问的可能。

如果你想测试一下 Caddyfile / PHP 的安装,可以在 owncloud 目录下创建一个 phpinfo.php 文件,在上面加上一行:

<?php phpinfo(); ?>

然后用浏览器访问 https://my-owncloud-site.com/phpinfo.php,看看是不是显示默认的 PHP 信息页面。(当然啦, Caddy 得使用 Caddyfile 配置)
如果一切正常的话,别忘记把这个文件删掉,以免被别人看到你的 PHP 安装配置。

安装并配置 ownCloud

现在终于要开始 ownCloud 的安装了。

下载最新的 ownCloud 版本(目前是 9.0.0):

$ wget https://download.owncloud.org/community/owncloud-9.0.0.zip

把这个文件解压到 owncloud 目录:

$ unzip owncloud-9.0.0.zip

使用浏览器访问 https://my-owncloud-site.com。如果配置没错的话,你就会在浏览器成功的看到 ownCloud 的配置页面啦。

另外,你还得创建一个 data 目录,并赋予 ownCloud 读写权限(比如 www-data用户)。

1
2
$ mkdir owncloud/data
$ sudo chown -R www-data owncloud

结论

Caddy 的快速开发使得它成为了简单安全地部署 ownCloud 的另一个选择。

这篇文章还发布在了Caddy的官方博客上:Running ownCloud with Caddy