最近新购了腾讯云上海轻量 1C1G40GB、300GB 3M 峰值带宽流量的服务器,将本站迁移了过来。但是还有近 30GB 的硬盘空闲,因此考虑安装 Seafile 服务端,充分榨干服务器剩余价值。

社区版和专业版选择

Seafile 专业版对 3 个及以下用户是免费的,此前为了文件搜索功能都是安装的专业版。但自 8.0 版本开始,Seafile 社区版加入了文件搜索功能,对我来说已经没有理由安装专业版了。

虽然 Seafile 专业版有全文搜索这个高级功能,但是是基于 Elasticsearch 开发,需要占用大量的内存,我这 1G 内存的服务器根本无法正常运行。简单地基于文件名的搜索,社区版就足够了,适合我的小内存服务器使用。

手动安装

以下步骤基于官方文档,全程使用 root 用户操作。首先创建 /opt/seafile 目录并进入:

mkdir /opt/seafile
cd /opt/seafile

从官网下载下载 Linux 服务端文件,我下载的是 8.0.4 版本:

wget https://seafile-downloads.oss-cn-shanghai.aliyuncs.com/seafile-server_8.0.4_x86-64.tar.gz

解压文件并创建目录结构:

tar -xzf seafile-server_*
mkdir installed
mv seafile-server_* installed

安装系统依赖:

apt-get update
apt-get install python3 python3-setuptools python3-pip python3-ldap -y

pip3 install --timeout=3600 django==2.2.* future mysqlclient Pillow pylibmc captcha jinja2 sqlalchemy psd-tools \
    django-pylibmc django-simple-captcha

注意这里安装项目比官方文档的多了几个,都来自于官方一键脚本。其中如果没有 django==2.2.* 就会自动安装最新的 Django 3.x,而 Seafile 8.0.4 目前使用的是 Django 2.2 版本,结果就是 seahub 无报错但是无法正常启动。future 和 mysqlclient 的作用没有确定,顺便一起加上了。

安装服务端:

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

这里使用 Mysql 作为数据库而不使用 SQLite,便于以后可能升级到 Pro 版本或者有大量用户。

安装完成后的设置

在安装完成后还没有结束,我们需要创建 Seafile 的管理员账户,并且为后面的开机启动脚本做一些前置工作。

首先进入程序目录,按顺序运行以下命令:

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

首次运行 seahub.sh 会让你创建管理员账户,没有报错即可。

接下来修改 seafdav.conf 以开启 WebDAV:

nano /opt/seafile/conf/seafdav.conf

文件内容如下:

[WEBDAV]
enabled = true
port = 8081
fastcgi = false
share_name = /webdav

最后创建运行 Seafile 程序专用的用户和用户组:

groupadd seafile
useradd -s /sbin/nologin -M -g seafile seafile

新建的用户没有登录权限,避免潜在的安全问题。同时需要修复程序目录权限:

chown -R seafile:seafile /opt/seafile

开机启动

Ubuntu 中使用 Systemd,共需要配置两个服务:

nano /etc/systemd/system/seafile.service

文件内容如下:

[Unit]
Description=Seafile
After=network.target mysql.service

[Service]
Type=oneshot
ExecStart=/opt/seafile/seafile-server-latest/seafile.sh start
ExecStop=/opt/seafile/seafile-server-latest/seafile.sh stop
RemainAfterExit=yes
User=seafile
Group=seafile

[Install]
WantedBy=multi-user.target

注意,After 行中添加了 mysql.service,如果你使用的 MariaDB,则需要添加 mariadb.service

nano /etc/systemd/system/seahub.service

文件内容如下:

[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
ExecStart=/opt/seafile/seafile-server-latest/seahub.sh start
ExecStop=/opt/seafile/seafile-server-latest/seahub.sh stop
User=seafile
Group=seafile
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

最后,启用这两个服务:

systemctl enable seafile.service
systemctl enable seahub.service

Nginx 反代配置

如果使用了 Nginx 反代,这里是主要的配置内容:

...
    proxy_set_header X-Forwarded-For $remote_addr;
    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;

        proxy_read_timeout  1200s;
        client_max_body_size 0;
    }

    location /seafhttp {
        rewrite ^/seafhttp(.*)$ $1 break;
        proxy_pass http://127.0.0.1:8082;
        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;
        proxy_request_buffering off;
        send_timeout  36000s;
    }

    location /webdav {
        proxy_pass         http://127.0.0.1:8081/webdav;
        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 $scheme;
        proxy_read_timeout  1200s;
        proxy_request_buffering off;
        client_max_body_size 0;
    }

    location /media {
        root /opt/seafile/seafile-server-latest/seahub;
    }
...

对于 Nginx 1.8 以下版本需要删除 proxy_request_buffering off;。这是用于上传 4GB 以上文件的优化,如果没有就可能会上传到一半中断。WebDAV 处的配置与官方文档略有区别,与上方的 seafdav.conf 相一致。

注意 seafhttp 这个路径不能修改!例如你改作 http,虽然网页版可以正常使用,但是 PC 客户端都是直接写死的,根本无法使用。