香菇肥牛的博客

欢迎您来到我的博客https://qing.su 且听我慢慢倾诉……

香菇肥牛的博客

联用Seafile与Let's Encrypt搭建安全的个人云储存 | 香菇肥牛的博客

04/01/2016

VPS教程>

联用Seafile与Let's Encrypt搭建安全的个人云储存

去年底, Let's Encrypt这个免费的SSL安全证书横空出世, 广大中小网站主纷纷给自己的网站加上了安全证书. 这是好事, 尤其是在这样一个HTTP劫持如家常便饭般平常的魔幻国度, 给所有网站做SSL是必要的.

Seafile是和OwnCloud齐名的云储存程序, 只要拥有一台VPS, 我们就可以在上面搭建Seafile服务器, 供个人或小型团队使用, 非常方便. 通常, Seafile使用自签名(self-signed SSL)证书, 不能被浏览器识别. 而今天给大家介绍一下在Seafile中整合Let's Encrypt安全证书搭建安全的私有云储存的方法, 不仅可以使用浏览器支持的SSL安全证书, 也能够最大限度地保障自己的数据安全.

本文为香菇肥牛博客原创, 原文链接https://qing.su/article/120.html, 未经允许不得转载, 谢谢.

一, Seafile服务器的安装

最新版本的Seafile服务器仅支持Debian 7/8 64bit和CentOS 7 64bit这三类操作系统. 因此, 使用前请将你的VPS重装为以上的OS. 个人推荐使用Debian 8 64bit操作系统. 下面介绍安装步骤. 为了便于描述, 我们将cloud.example.com作为示例服务器的主机名.

1, HOSTNAME (主机名) 的设置

在VPS上进行任何涉及到网络的操作时请先设置好主机名. 若主机名设置没有完成或设置错误(比如, 你执行hostname命令时如果显示cloud.example.com就是典型的主机名设置错误), 请不要继续.

2, VPS基础设置

(1) 更新和升级包管理器. 不多作介绍了.

(2) 部分主机商提供的操作系统已默认安装了APACHE, 请将其卸载. 若您手动安装过MySQL/APACHE/NGINX/PHP之类的程序, 请全部卸载或重装系统, 否则会产生不可预知的错误. Postfix/Sendmail之类的MTA无需卸载.

(3) 安装wget, curl和tar; Debian系统请额外安装lsb-release包. 这些都可以直接用包管理器安装.

3, 安装

Seafile分为两个版本, 一个是开源社区版, 另一个是专业版. 专业版如果超过三个用户则需要额外购买授权, 如果是个人使用的话我推荐你安装专业版, 毕竟功能较为丰富. 我们以3用户免费授权的专业版为例介绍其安装方法. 下面给出的安装脚本为当前稳定版5.0.5版本的安装, 若您需要使用更新的版本, 请到官网上https://seafile.de注册一个用户, 上面有最新版本下载.

一切准备就绪后, 请用root账户登录SSH, 执行下面的命令. 下面的文件下载目录请勿更改, 否则会出错.

DEBIAN系统:

1
2
3
4
5
mkdir -p /usr/src/seafile
cd /usr/src/seafile
wget http://d.qing.su/seafile/seafile-pro-server_5.0.5_x86-64.tar.gz
wget http://d.qing.su/seafile/seafile_v5_debian
bash seafile_v5_debian

CentOS 7系统:

1
2
3
4
5
mkdir -p /usr/src/seafile
cd /usr/src/seafile
wget http://d.qing.su/seafile/seafile-pro-server_5.0.5_x86-64.tar.gz
wget http://d.qing.su/seafile/seafile-pro_centos-7-amd64
bash seafile-pro_centos-7-amd64

按照提示操作即可安装完毕. 若安装过程中报错, 请将报错行贴在下面或者把安装日志通过邮件发给我, 我可以帮你排查. 安装完毕后不要急着退出, 往上翻几页能看到你的管理员用户名和密码. 这时我们打开https://cloud.example.com已经可以访问了. 由于我们尚未安装安全证书, 浏览器可能会提示证书不受信任, 我们直接忽略即可.

二, 在Seafile中整合Let's Encrypt安全证书

采用上述方法安装的Seafile已经安装了NGINX前端proxy, 通过FASTCGI的方式将前端流量转发给后端Seafile服务器. 因此, 给Seafile安装Let's Encrypt和普通的Nginx安装Let's Encrypt有所差异.

1, 安装Let's Encrypt

这一步很简单, 直接从Let's Encrypt网上抄下来就行了.

1
2
3
4
apt-get install git / yum instal git
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
cd /opt/letsencrypt
./letsencrypt-auto

最后一步执行时会有warning, 不用理会.

2, 配置Seafile

我们通过web-root方式配置NGINX-Let's Encrypt. 然而, 虽然我们已经安装了NGINX, 但这个NGINX只是一个前端proxy, 将访问请求转给后端seafile服务器处理, 因此并没有实质上的网站文件夹web-root. 为了解决这个问题, 需要建立一个伪网站根目录, 用于Let's Encrypt验证. 执行

1
mkdir /srv/letsencrypt-webroot

然后, 编辑Seafile-NGINX配置文件. 该配置文件可能随软件版本不同而有所差异, 我这里是/etc/nginx/conf.d/seafile.conf, 可能有的VPS上是/etc/nginx/sites-enabled/seafile, 请自行查看. 编辑该配置文件, 在主文件块中加入下面的行:

1
2
3
4
location '/.well-known/acme-challenge' {
default_type "text/plain";
root /srv/letsencrypt-webroot;
}

然后执行service nginx reload重新加载nginx配置文件.

上面这步修改的目的是将用于验证的acme-challenge请求重定向到我们建立的伪web-root文件夹中, 使得SSL证书得以颁发.

3. 配置Let's Encrypt

我们需要配置Let's Encrypt以生成对应的证书. 执行:

1
cp /opt/letsencrypt/examples/cli.ini /etc/letsencrypt

编辑文件/etc/letsencrypt, 取消下列行之前的注释, 并替换为符合你条件的内容:

1
2
3
4
5
6
rsa-key-size = 2048
email = admin@example.com
domains = cloud.example.com
text = True
authenticator = webroot
webroot-path = /srv/letsencrypt-webroot

4. 生成Let's Encrypt证书

配置好上述文件后我们即可生成Let's Encrypt证书了. 执行下面的命令:

1
2
cd /opt/letsencrypt
./letsencrypt-auto certonly

这样, 我们就生成了Let's Encrypt颁发的SSL证书. 我们还需要更改Seafile/NGINX配置文件以使用该证书. 编辑之前的那个配置文件, 我这里是/etc/nginx/conf.d/seafile.conf. 找到ssl_certificate那两行, 将地址作如下的更改:

1
2
ssl_certificate /etc/letsencrypt/live/cloud.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cloud.example.com/privkey.pem;

然后执行service nginx reload重新载入NGINX配置文件. 这样, Let's Encrypt就在Seafile上面配置完毕了. 需要注意的是, Let's Encrypt有效期为90天, 因此你需要设置cronjob或者手动续期.

如果您在配置和安装过程中遇到什么问题, 欢迎在文章下方留言与我讨论. 本文作者为香菇肥牛, 未经允许不得转载, 谢谢. 原文链接https://qing.su/article/120.html

来一发吐槽