私有云盘-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/

拥有详细的部署文档和使用文档

中文支持非常好

支持多平台同步、存储、分享

官网

官网

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实现的,感兴趣的可以使用下。