最近坚果云越来越难用了(很明显功能逐渐趋向于常用Office等进行工作的普通文职人员了),之前甚至对客服都吐槽过“不希望写代码的用你们软件可以明说,真的”。
于是在经过一番调研之后选择了抛弃坚果云,转用开源的Seafile来做同步盘(顺便利用一下自己Linux服务器那高达50GB的空闲空间)。
坚果云与Seafile的区别
Seafile其实主要功能与坚果云大同小异,但对开发人员更加友好一些。
功能 | 坚果云 | Seafile |
---|---|---|
库名 | 主库无法自定义 | 随便定义库名和存放路径 |
分享链接 | 可以 | 可以(但最好需要自己的域名) |
文件收集 | 可以 | 可以(同上) |
选择性同步 | 被官方抛弃,功能还有效,找到对应的配置文件可以接着用 | 可以,类似.gitignore的语法 |
选择性同步配置方式 | 全局配置,各设备之间不可同步 | 分库配置,各设备之间可以同步设置 |
云访问 | 即云桥功能 | 需要安装SeaDrive客户端,使用方式类似 |
WebDAV支持 | 支持 | 支持,但需要手动开启功能 |
冲突处理 | 支持,可以批量操作 | 支持,但无法批量操作 |
CR/LF兼容性 | 不兼容 | 兼容 |
文件权限 | 不同步 | 不同步 |
文件历史保留 | 90天 | 0天~永久自行设置 |
同步速度(以10w文件索引同步1500个左右文件为例) | 15min | 3min |
利用Docker搭建服务器
可以参考官方文档来部署一个服务器。
Docker部署比较简单,另外有个好处是不污染系统环境,整坏了删掉重来就是了。
如果需要云访问功能,建议安装专业版(不需要购买License也可在系统里创建3个用户,自用足够了)。
否则建议安装社区版,下面是以专业版为基准写的安装流程。
安装之前建议修改seafile
中80
端口的映射到其它端口去,以免和Nginx之类的服务冲突(如改为8880:80
)。
需要注意的是,如果服务器性能比较差的话(2C2G以下什么的),不建议安装ElasticSearch服务(太耗内存了),可以把YML文件中的elasticsearch
一块整体注释掉,再把seafile
中对应的depends
删掉即可。(社区版不用处理)
当然缺点是不能用搜索功能,如果文件较少或刚需,可以考虑开启。
另外,需要开启WebDAV的话,需要在seafile
服务中添加一个XXXX:8080
的端口映射(比如8881:8080
)。
挂到Nginx上
本质上与Nginx挂一个HTTPS域名到一个本地服务端口上去大同小异,但对location需要特殊处理,以下是一个示例文件:
server {
listen 80;
listen 443 ssl http2;
ssl_certificate /ssl/example.com/fullchain.cer; # 证书自己用acme.sh申请
ssl_certificate_key /ssl/example.com/mikualpha.com.key; # 证书自己用acme.sh申请
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5:!CBC;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
server_name example.com; # 域名
index index.html index.htm index.php;
root /home/wwwroot/; # 目录基本用不着,随便找个空目录放就好了
if ($ssl_protocol = "") { return 301 https://$host$request_uri; }
location /seafdav { # 不开WebDAV服务的忽略这一段
proxy_pass http://127.0.0.1:8881/seafdav;
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;
client_max_body_size 0;
}
location /:dir_browser { # 不开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;
client_max_body_size 0;
proxy_pass http://127.0.0.1:8881/:dir_browser;
}
location / {
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;
client_max_body_size 0;
proxy_pass http://127.0.0.1:8880;
}
}
开启Swap
因为高强度读写会占很多内存,所以没开Swap的需要申请一下Swap空间,来减轻内存的负担。可以参考这篇教程。
开启WebDAV
因为一些服务用得到WebDAV,所以需要开启这个功能。也可以这里看官方文档
可以在docker容器启动后进入容器修改配置:
docker exec -it seafile /bin/bash
vi /opt/seafile/conf/seafile.conf # 后面版本似乎把它挪到seafdav.conf里了
# 修改WEBDAV选项(如果没有则加在文件末尾)
[WEBDAV]
enabled = true
port = 8080
share_name = /seafdav
保存后退出容器,重启该容器即可。
可尝试访问https://example.com/seafdav
页面查看是否正常。
创建开机自启
Docker容器默认并不会开机自动启动,所以需要执行一下这个语句:
docker update --restart=always seafile seafile-memcached seafile-mysql
企业版占用内存过多的问题
如果你在前面没有删除创建ElasticSearch
服务的语句,那么大多是ElasticSearch
造成的。
关闭掉seafile-elasticsearch
容器,并设置其为无法自启即可。
docker container stop seafile-elasticsearch
docker update --restart=no seafile-elasticsearch
文件历史设置
Seafile默认是永久保留文件历史的,但这可能会造成服务器空间被挤爆(如果你在高频率修改文件的话)。
建议还是设置一个合理的时间,以免服务器空间不足干扰其它服务运行。
docker exec -it seafile /bin/bash
vi /opt/seafile/conf/seafile.conf
# 在文件末尾添加如下两行
[history]
keep_days = 7 # 保留7天
保存后退出容器,重启该容器即可。
注意:只对设置之后创建的资料库生效,之前的需要在控制面板手动设置。建议在设置处关闭“允许用户修改资料库历史设置”。
处理文件数量过多无法同步的问题
根据官方文档的描述,seafile默认单文件库最多100000个文件,文件列表拉取超时时间300s。
如果单文件库内文件量大于这个标准的,可以通过调整配置来实现:
docker exec -it seafile /bin/bash
vi /opt/seafile/conf/seafile.conf
# 在[fileserver]之后添加如下两行
[fileserver]
port = xxxx
……
max_sync_file_count = 300000 # 也可以自己调一个比较合适的值
fs_id_list_request_timeout = 600 # 也可以自己调一个比较合适的值
保存后退出容器,重启该容器即可。
启用邮件发送功能
如果需要用到邮件提醒一类功能的话,可以参考如下配置:
docker exec -it seafile /bin/bash
vi /opt/seafile/conf/seahub_settings.py
# 在文件末尾添加如下N行(如果已经有就直接修改)
EMAIL_USE_SSL = True
EMAIL_HOST = 'smtp.example.com' # SMTP 服务器
EMAIL_HOST_USER = 'sample@example.com' # 用户名和域名
EMAIL_HOST_PASSWORD = 'AAABBBCCC' # 密码
EMAIL_PORT = '465'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER
保存后退出容器,重启该容器即可。
选择性同步(同步文件/目录排除名单)
在每个库的同步目录下创建一个seafile-ignore.txt
文件即可调整该库的同步排除列表。
语法可参考官方文档(和.gitignore
语法基本一致)。
关联文件夹时提示”与已有资料库冲突”问题
这个问题出现一般是以前用库A同步过这个文件夹,但后面解除了库A的同步,又尝试用库B去同步。
对于这个,可以找到我们初次安装时客户端提示选择的“缓存文件夹”路径,把这个文件夹整体删除即可。
(说起来明明开了显示隐藏文件但里面仍然是空文件夹,删除又能删到好多文件,属实是非常神奇的一件事情,当然也可能是自己孤陋寡闻了- -)
再次重启客户端时会让你重新选择一次缓存文件夹(因为原来的缓存文件夹被我们删了找不到了),重新设置缓存文件夹后再尝试同步,恢复正常。
建议客户端设置界面-“高级”选项卡中的多选框一个都不要勾选!!!
使用体验后记
写完这篇文章的时候我已经用了差不多有一个星期了(笑),从个人体验来讲还是不错的(还省每年200块的VIP),对有一定HTTP Server和Docker使用经验的同学(尤其是像我一样被坚果云恶心过的人)来说,相当推荐尝试一下。
未经允许不得转载:MikuAlpha's Blog » Seafile服务器搭建踩坑记录