拜拜百度云!自建开源网盘 Seafile专业版 全攻略指南

拜拜百度云!自建开源网盘 Seafile专业版 全攻略指南

0. 前言

最近百度云放开了文件夹自动备份功能,本该是个好事,但是竟然在右下角有个狗皮膏药永远也关不掉,实在是受不了。加上一天天的我百度爸爸又流氓了一些呢,刚好超会也要过期咯,一年二百五给谁不好呀,刚好手上挺多vps,分一台出来答私有云盘他不香么。

稍微比较了一下 seafile nextcloud owncloud ,果断选了seafile,之前搭过一次,不过有百度云就没用它,主要原因还是它有全套的中文文档和中文论坛,就比较省事,然后seafile的专业版是可以免费给三个用户使用的,功能也多一些,毕竟vps的ssd也挺贵的,应该不会有人能开多几个用户吧。anyway,稍微写一下配置过程和一些小坑吧,不然以后就忘了...应该会有一些人想建服务器吧(或者我把自己服务器玩崩了),万一用上了呢。

1. 下载服务端文件

首先进入seafile的 下载页面 ,在右上角切换语言为英文(中文页面不显示专业版),然后直接把页面拉到最下面:

只需要注册一个用户,就可以得到一个专有的专业版的下载链接,可以无许可证供给三人使用。点击 customer center 注册,然后进入个人中心,在download页面就有下载链接啦。

这里说一下我的配置环境,我用的是搬瓦工的一台机器,40G的硬盘,系统是Ubuntu 18.04 x86_64,所以我选的是目前最新的 seafile-pro-server_7.1.3_x86-64_Ubuntu.tar.gz 这个版本,下面也是按照这个配置写的,其他版本还请举一反三。

2. 部署服务器

上面是seafile官方文档,与本文同步配套使用。我基本上是按照文档做的,部分不好使的我在下面加粗标出来了。哦对了,如果服务器的前置要求不满足的话(nginx,mysql),非常推荐这个 一键脚本 / GitHub

2.0. 准备工作

注意,不同的版本请参考上面的链接,看一下官方文档。

apt-get update
apt-get install python3 python3-setuptools python3-pip python3-ldap -y
pip3 install --timeout=3600 Pillow pylibmc captcha jinja2 sqlalchemy 
pip3 install --timeout=3600 psd-tools django-pylibmc django-simple-captcha

2.1. 安装

cd seafile-server-*
./setup-seafile-mysql.sh

按照脚本依次询问的一些问题配置seafile的各项参数。

2.2. 启动

./seafile.sh start    # 启动 Seafile 服务
./seahub.sh start     # 启动 Seahub  网站

第一次启动seahub会创建一个管理员帐号。

OK, so easy! 这个时候访问服务器IP就已经可以使用了: 127.0.0.1:8000 ,安装这一套总共空间占用大概在5~7GB。

2.3. 配置开机启动

注意: 这里是第一个小坑,按照文档里的方法设置无效了,论坛上也有同样的反馈,不知道是脸黑还是就是确实有问题。解决方案是参考了 这篇博文 ,在 /etc/rc.local 里配置了开机启动执行:

/opt/seafile/seafile-server-latest/seafile.sh start
/opt/seafile/seafile-server-latest/seahub.sh start

然后手动修改了连接的 rc.local.service

[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target mysql.service
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
[Install]
WantedBy=multi-user.target
Alias=rc-local.service

这样至少是能用了。

3. Nginx 配置

3.0. 准备工作

这里我是直接选了 HTTPS配置 的,如果你不知道怎么弄免费的证书,那么 腾讯云 可以方便地申请到免费的证书,这里就不多说了。另外,需要将域名指向服务器IP地址。

3.1. Nginx 配置文件

注意: 新版本nginx已废弃文档中示例的部分格式,需要进行修改。这里是我写好的配置文件:

server {
    listen       80;
    server_name  {{ server_name }};
    rewrite ^ https://$http_host$request_uri? permanent;    # force redirect http to https
    # Enables or disables emitting nginx version on error pages and in the "Server" response header field.
    server_tokens off;
server {
    listen 443 ssl;
    server_name {{ server_name }};
    ssl_certificate     {{ crt }};     # path to your cacert.pem
    ssl_certificate_key {{ key }};     # path to your privkey.pem
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    proxy_set_header X-Forwarded-For $remote_addr;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
    server_tokens off;
    location / {
        proxy_pass         http://127.0.0.1:8000;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto https;
        access_log      /var/log/nginx/seahub.access.log;
        error_log       /var/log/nginx/seahub.error.log;
        proxy_read_timeout  1200s;
        client_max_body_size 0;
    location /seafhttp {
        rewrite ^/seafhttp(.*)$ $1 break;
        proxy_pass http://127.0.0.1:{{ port }};
        client_max_body_size 0;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout  36000s;
        proxy_read_timeout     36000s;
        proxy_send_timeout     36000s;
        send_timeout           36000s;
    location /media {
        root /opt/seafile/seafile-server-latest/seahub;
}

替换上面 {{ server_name }} , {{ crt }} , {{ key }} , {{ port }} 就可以用啦。
p.s. server_name 是你的域名, crt key 是证书nginx文件夹下的两个文件, port 是在seahub脚本下输入的端口。

3.2. 修改 SERVICE_URL 和 FILE_SERVER_ROOT

登入你的seafile,网页版在右上角头像-系统管理-设置界面,更新SERVICE_URL和FILE_SERVER_ROOT这两个配置项,否则无法通过web正常的上传和下载文件。

4. 专业版功能定制

4.0. 官方文档

4.1. Office 预览

第一步,安装 Libreoffice/UNO 与字体文件:

sudo apt-get install libreoffice libreoffice-script-provider-python    libsm-dev
sudo apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy

第二步,开启配置项。在 /opt/seafile/conf 下修改 conf/seafevents.conf
注意: 文档里写的是添加,但实际上配置文件里已经有预设值了,直接加一个配置会冲突。

[OFFICE CONVERTER]
enabled = true
host = 127.0.0.1   # 本机的IP地址,默认 127.0.0.1
port = 6000        # 端口,默认6000
workers = 1        # 并发运行 libreoffice 的进程数
outputdir = /tmp/  # 转换后的 office/pdf 文件的缓存路径

注意: 这里有一个究极大坑,你别看他文档里注释可以写在单行,实际上根本没分开,务必务必删掉注释部分再应用!卡了我好久,就是显示不了预览,查日志也全是成功信息,气死我了。

然后打开 conf/seahub_settings.py ,添加:

OFFICE_CONVERTOR_ROOT = 'http://127.0.0.1:6000/'
# 与 seafevents.conf 中的 host 和 port 保持一致

重启服务后,应该就能用了:(之后每一步完成后都需要重启服务,不多赘述)

./seafile.sh restart
./seahub.sh restart

4.2. Office 编辑

TODO:按照官网文档操作onlyoffice并不能够使用,有空我会用libreoffice重试一下。

这里需要第二台服务器,因此是选配项目。稍微看了一下,seafile支持的几种office server中 OnlyOffice 应该是比较方便的。我用的是阿里云的机器,2G内存(虽然说OnlyOffice推荐4G内存,但是单用户应该够用,而且独立机器不会影响到主机性能表现),系统是Ubuntu 16.04 64位的版本。如果是一台新机器的话,建议还是照例先跑一遍 LNMP一键脚本 (非必须)。

第一步,安装docker:

sudo curl -sSL https://get.docker.com/ | sh

第二步,安装OnlyOffice:

sudo docker run -i -t -d -p 8080:80 onlyoffice/documentserver

安装完以后,访问 http://{{ IP }}:8080/welcome 应该就能看到成功的页面了:

确认之后就可以用nginx绑定到域名了,在这里就不多介绍了。

之后这两步是文档里写的,我也试了其他一些,都不能用,如果你解决了,欢迎评论区留言~

第三步,设置自动保存。在安装了onlyoffice的服务器上修改 /etc/onlyoffice/documentserver/local.json ,添加:

{
    "services": {
        "CoAuthoring": {
            "autoAssembly": {
                "enable": true,
                "interval": "5m"
}

第四步,配置seafile服务。添加以下配置信息到 seahub_settings.py

# Enable Only Office
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = False
ONLYOFFICE_APIJS_URL = 'http{s}://{your OnlyOffice server's domain or IP}/web-apps/apps/api/documents/api.js'
ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
ONLYOFFICE_EDIT_FILE_EXTENSION = ('docx', 'pptx', 'xlsx') 

好了,编辑功能已经配置完成。but...

4.3. 文件搜索

/opt/seafile/conf 下修改 conf/seafevents.conf

[INDEX FILES]
enabled = true
highlight = fvh
interval = 10m            # 更新频率
index_office_pdf = true   # 全文检索

同样的,还是删掉注释再应用设置。(或者单独起一行)

注意: 这里又有一个大坑了,不过好在有官方论坛,不过还是卡了我好久才找到 这篇帖子 。解决 ERROR : java.lang.RuntimeException: can not run elasticsearch as root 的方法:

1. 首先,您需要停止当前正在运行的 Seafile 服务。
   cd /opt/seafile/seafile-server-latest
   ./seafile.sh stop
   ./seahub.sh stop
2. 创建一个系统用户用来运行 Seafile 服务。
   useradd --system --comment "seafile" seafile --create-home --home-dir /home/seafile
3. 修改 Seafile 安装目录和 Seafile data 目录的属主和属组为 seafile
   chown -R seafile.seafile /opt/seafile
   chown -R seafile.seafile /home/seafile-data
   chown -R seafile.seafile /tmp/seafile-office-output