私有云盘-seafile
简介
Seafile是国内团队开发的一个国际化的开源项目,在 GitHub 上的项目有超过4500人关注,在国内最大的开源社区开源中国上面也赢得了很多赞誉。
Seafile目前拥有国内外两个活跃的用户社区:seafile官方中文社区(http://bbs.seafile.com),seafile官方英文社区(http://forum.seafile.com/),活跃用户已超过50万。
Seafile的客户有卡巴斯基、德国 Mainz 大学、德国柏林洪堡大学、法国 Strasbourg 大学、德国 Max Planck 科学院、芬兰 Turku 大学、中国平安等。

Seafile 是一款开源的企业云盘,注重可靠性和性能,支持全平台客户端。
Seafile 内置协同文档 SeaDoc ,让协作撰写、管理和发布文档更便捷。
这是官方的slogan,使用之后发现他们也确实做到了这些,而且有社区版本,是开源的
为什么选择Seafile
- Seafile开发至今是已有十余年之久的老项目
- 开发者更新活跃
- github上拥有11.8k的star以及1.5k的fork
- 经过众多公司和用户的使用,可靠性很高
- 拥有活跃的用户社区 https://bbs.seafile.com/
- 拥有详细的部署文档和使用文档
- 中文支持非常好
- 支持多平台同步、存储、分享

官网
部署
前期准备工作
- docker
- docker compose
这里使用docker部署,使用docker compose编排容器
这部分安装就不再这里赘述了
环境
| docker版本 | docker compose版本 | 系统版本 | IP地址 | seafile版本 | mariadb版本 | memcached版本 |
|---|---|---|---|---|---|---|
| 26.1.0, build 9714adc | v2.26.1 | ubuntu 22.04 | 192.168.140.71 | 11.0 | 10.11 | 1.6.18 |
资源清单文件
---
# docker-compose.yaml
services:
db:
image: mariadb:10.11
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=db_dev # Requested, set the root's password of MySQL service.
- MYSQL_LOG_CONSOLE=true
- MARIADB_AUTO_UPGRADE=1
volumes:
- ./seafile-mysql/db:/var/lib/mysql # Requested, specifies the path to MySQL data persistent store.
networks:
- seafile-net
memcached:
image: memcached:1.6.18
container_name: seafile-memcached
entrypoint: memcached -m 1024
networks:
- seafile-net
seafile:
image: seafileltd/seafile-mc:11.0-latest
container_name: seafile
ports:
- "80:80"
#- "443:443" # If https is enabled, cancel the comment.
volumes:
- ./seafile-data:/shared # Requested, specifies the path to Seafile data persistent store.
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=db_dev # Requested, the value shuold be root's password of MySQL service.
- TIME_ZONE=Asia/Shanghai # Optional, default is UTC. Should be uncomment and set to your local time zone.
- SEAFILE_ADMIN_EMAIL=abc@123.com # Specifies Seafile admin user, default is 'me@example.com'.
- SEAFILE_ADMIN_PASSWORD=111111 # Specifies Seafile admin password, default is 'asecret'.
- SEAFILE_SERVER_LETSENCRYPT=false # Whether use letsencrypt to generate cert.
- SEAFILE_SERVER_HOSTNAME=192.168.140.71 # Specifies your host name.
depends_on:
- db
- memcached
networks:
- seafile-net
networks:
seafile-net:
启动
$ docker compose up -d
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
seafile seafileltd/seafile-mc:11.0-latest "/sbin/my_init -- /s…" seafile 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp
seafile-memcached memcached:1.6.18 "memcached -m 1024" memcached 4 seconds ago Up 3 seconds 11211/tcp
seafile-mysql mariadb:10.11 "docker-entrypoint.s…" db 4 seconds ago Up 3 seconds 3306/tcp
访问
访问 192.168.140.71
用户名密码 admin/111111
seafile架构

目录说明
映射出来两个文件夹
- seafile-mysql
- seafile-data
seafile-mysql
就是存储数据库数据的
seafile-data
seafile-data/
├── logs
│ └── var-log
│ ├── alternatives.log
│ ├── apt
│ ├── bootstrap.log
│ ├── btmp
│ ├── dpkg.log
│ ├── faillog
│ ├── journal
│ ├── lastlog
│ ├── nginx
│ ├── private
│ ├── syslog
│ └── wtmp
├── nginx
│ └── conf
│ └── seafile.nginx.conf
└── seafile
├── ccnet
├── conf
│ ├── ccnet.conf
│ ├── gunicorn.conf.py
│ ├── __pycache__
│ ├── seafdav.conf
│ ├── seafevents.conf
│ ├── seafile.conf
│ └── seahub_settings.py
├── logs
│ ├── controller.log
│ ├── enterpoint.log
│ ├── file_updates_sender.log
│ ├── logrotate.log
│ ├── onlyoffice.log
│ ├── seafevents.log
│ ├── seafile.log
│ ├── seafile-monitor.log
│ ├── seahub_email_sender.log
│ ├── seahub.log
├── pro-data
├── seafile-data
│ ├── current_version
│ ├── httptemp
│ ├── library-template
│ ├── storage
│ └── tmpfiles
└── seahub-data
├── avatars
├── custom
└── thumbnail
- seafile: Seafile 服务的配置文件、日志以及数据文件
- logs/var-log: 我们将容器内的/var/log链接到本目录。可以在seafile-data/logs/var-log/nginx/中找到 nginx 的日志文件
- nginx:nginx配置文件
- ssl: 存放证书的目录,默认不存在
优化
官方文档很详细,这里不做赘述,只说明需要注意的地方
权限部分
关于权限部分,社区版有个很大的坑没说,就是自定义多种角色是只有专业版有的功能,但是官方文档并没有注明,以至于我在这里耽误了很多时间,然后有各种查
社区版中只有 管理员、defalut、guest这三种角色,无法自定义角色
但是权限确实可以自己设置
管理员拥有所有权限,所以无需设置,只有defalut、guest两种角色的权限
- defalut用户是在后台创建的或者登录页注册的
- guest用户是被邀请产生的
专业版是可以自定义多种角色的
权限选项
can_add_repo # 允许创建资料库
can_add_group # 允许创建群组
can_view_org
can_add_public_repo # 允许创建全员可见的公共资料库
can_use_global_address_book # 允许使用全局通讯录(比如共享时能搜索到其他的用户)
can_publish_repo # 允许公开发布资料库
can_generate_share_link # 允许创建共享外链
can_generate_upload_link # 允许创建上传外链
can_invite_guest # 允许邀请访客,访客不能拥有自己的文件
can_connect_with_android_clients # 允许使用安卓客户端登录
can_connect_with_ios_clients # 允许使用 iOS 户端登录
can_connect_with_desktop_clients # 允许使用桌面客户端登录
相关配置
# seafile-data/seafile/conf/seahub_settings.py
ENABLED_ROLE_PERMISSIONS = {
'default': {
'can_add_repo': True,
'can_add_group': True,
'can_view_org': True,
'can_add_public_repo': True,
'can_use_global_address_book': True,
'can_publish_repo': False,
'can_generate_share_link': True,
'can_generate_upload_link': True,
'can_invite_guest': False,
'can_connect_with_android_clients': True,
'can_connect_with_ios_clients': True,
'can_connect_with_desktop_clients': True,
},
'guest': {
'can_add_repo': False,
'can_add_group': False,
'can_view_org': False,
'can_add_public_repo': False,
'can_use_global_address_book': False,
'can_generate_share_link': False,
'can_generate_upload_link': False,
'can_invite_guest': False,
'can_connect_with_android_clients': True,
'can_connect_with_ios_clients': True,
'can_connect_with_desktop_clients': True,
},
}
# 开启邀请访客
ENABLE_GUEST_INVITATION = True
# 访客的有效时间
INVITATIONS_TOKEN_AGE = 72 # hours
邮件部分
参考文档 https://cloud.seafile.com/published/seafile-manual-cn/config/sending_email.md
# seafile-data/seafile/conf/seahub_settings.py
EMAIL_USE_SSL = True
EMAIL_HOST = 'smtp.exmail.qq.com'
EMAIL_HOST_USER = 'aaa@qq.cn'
EMAIL_HOST_PASSWORD = 'xxxxxxxxxx'
EMAIL_PORT = '465'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER
功能
这里做了大概的总结

注意
磁盘空间
因为seafile还有版本控制的功能,有点类似git
所以需要的磁盘空间要远比实际的文件大小要大的多
在部署的时候需要注意一下
发布资料库
这个是非常非常不安全的;
因为,只要能够访问到服务器的,都能读取已发布的资料库;
经测试,只要发布过了,哪怕web页面取消了发布,未登录者依然还是能够访问,只要文件拥有者不删除这个文件,所有人就都能访问,所以,会有很高的泄密风险,需要谨慎使用。
但是可以通过参数关闭发布的权限

如果需要给大家共享,可以使用公共资料库,而不是发布资料库
公共资料库是可以取消公共的,是安全可控的

在线预览编辑文件
社区版本的预览文件的类型是非常有限的
办公三件套也是只能创建空文件,无法编辑阅览,这点还是有点尴尬,不过应该是社区版没优化好,可能这些是原本就是专业版可用的功能,只是社区版没有完全关掉
不过毕竟社区版开源使用,相对于其他功能,这点问题不算啥
专业版
专业版在不购买的前提下,是可以部署测试的,只是部署后的用户是非常有限的,仅限测试体验使用
这里也列出资源清单
services:
db:
image: mariadb:10.11
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=db_dev # Requested, set the root's password of MySQL service.
- MYSQL_LOG_CONSOLE=true
- MARIADB_AUTO_UPGRADE=1
volumes:
- ./seafile-mysql/db:/var/lib/mysql # Requested, specifies the path to MySQL data persistent store.
networks:
- seafile-net
memcached:
image: memcached:1.6.18
container_name: seafile-memcached
entrypoint: memcached -m 256
networks:
- seafile-net
elasticsearch:
image: elasticsearch:8.6.2
container_name: seafile-elasticsearch
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
volumes:
- ./seafile-elasticsearch/data:/usr/share/elasticsearch/data # Requested, specifies the path to Elasticsearch data persistent store.
networks:
- seafile-net
seafile:
image: docker.seafile.top/seafileltd/seafile-pro-mc:11.0-latest
container_name: seafile
ports:
- "80:80"
# - "443:443" # If https is enabled, cancel the comment.
volumes:
- ./seafile-data:/shared # Requested, specifies the path to Seafile data persistent store.
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=db_dev # Requested, the value shuold be root's password of MySQL service.
- TIME_ZONE=Asia/Shanghai # Optional, default is UTC. Should be uncomment and set to your local time zone.
- SEAFILE_ADMIN_EMAIL=me@example.com # Specifies Seafile admin user, default is 'me@example.com'
- SEAFILE_ADMIN_PASSWORD=111111 # Specifies Seafile admin password, default is 'asecret'
- SEAFILE_SERVER_LETSENCRYPT=false # Whether to use https or not
- SEAFILE_SERVER_HOSTNAME=192.168.140.71 # Specifies your host name if https is enabled
depends_on:
- db
- memcached
- elasticsearch
networks:
- seafile-net
networks:
seafile-net:
这里加入了一个elasticsearch,因为在专业版中,有全文搜索的功能,就是通过elasticsearch实现的,感兴趣的可以使用下。
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/18247485

浙公网安备 33010602011771号