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

posted @ 2024-06-14 11:21  厚礼蝎  阅读(153)  评论(0编辑  收藏  举报