简介
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/
拥有详细的部署文档和使用文档
中文支持非常好
支持多平台同步、存储、分享
官网
官网
github
管理员文档
用户文档
社区论坛
部署
前期准备工作
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实现的,感兴趣的可以使用下。