升级到 11.0.x

这些说明提供了有关指定版本的更改,其他信息请始终遵循升级指南

对于 Docker 版本升级,请参考 Docker Seafile 升级

主要变更

更改用户身份

以前的 Seafile 版本直接使用用户的电子邮件地址或 SSO 身份作为其内部用户 ID。

Seafile 11.0 引入了虚拟用户 ID - 随机的内部标识符,如“adc023e7232240fcbb83b273e1d73d36@auth.local”,对于新用户,将生成一个虚拟 ID,而不是直接使用他们的电子邮件,电子邮件和虚拟 ID 之间的映射将存储在“profile_profile”数据库表中。对于 SSO 用户,SSO ID 和虚拟 ID 之间的映射存储在“social_auth_usersocialauth”表中。

总体而言,这为处理用户帐户和身份更改带来了更大的灵活性,现有用户将使用相同的旧 ID。

重新实现 LDAP 集成

以前的 Seafile 版本处理 ccnet 服务器组件中的 LDAP 身份验证,在Seafile 11.0中,LDAP在Seahub Python代码库中重新实现。

LDAP 配置已从 ccnet.conf 移至 seahub_settings.py,“ccnet_db.LDAPImported‘’ 表不再使用-LDAP用户现在与其他用户一起存储在 ‘’ccnet_db.EmailUsers‘’ 表中。

此新实施的好处:

升级脚本将把 “ccnet_db.LDAPImported“表合并到 “ccnet_db.EmailUsers‘’表中,需要手动更改设置文件。

OAuth 身份验证和其他 SSO 方法

如果使用 OAuth 身份验证,则需要稍微更改配置。

如果您使用 SAML,则无需更改配置文件。

弃用 SQLite 数据库支持

Seafile 11.0 弃用 SQLite 作为数据库,推动这一变化的原因有几个:

要从SQLite数据库迁移到MySQL数据库,您可以按照文档迁移:从SQLite迁移到MySQL

ElasticSearch 更改(仅限专业版)

Elasticsearch 版本在 Seafile 版本 11.0 中未更改

安装 Python 依赖

请注意,您应该使用 root 用户或者 sudo 命令在系统范围内来安装 Python 依赖。

sudo pip3 install future==0.18.* mysqlclient==2.1.* pillow==9.3.* sqlalchemy==2.0.18 captcha==0.4 django_simple_captcha==0.5.* djangosaml2==1.5.* pysaml2==7.2.* pycryptodome==3.16.* cffi==1.15.1

升级到 11.0.x

1、停止 Seafile-10.0.x 服务。
2、进入 Seafile-11.0.x 目录, 运行以下脚本:
upgrade/upgrade_10.0_11.0.sh

3、更改 LDAP 配置和数据迁移:

LDAP 登录和 LDAP 同步任务的配置项从 ccnet.conf 迁移到seahub_settings.py,配置项的名称基于 10.0 版本,并添加字符“LDAP_”或“MULTI_LDAP_1”,示例如下:

# 基础配置,LDAP登录以及LDAP定时同步任务共同使用这些配置。如果要支持多 LDAP,将配置项中的'LDAP'替换为'MULTI_LDAP_1',再追加到配置文件中,例如:将 MULTI_LDAP_1_SERVER_URL,MULTI_LDAP_1_BASE_DN 等添加到配置文件中。

ENABLE_LDAP = True
LDAP_SERVER_URL = 'ldap://192.168.0.125'     # LDAP 服务器的地址 URL
LDAP_BASE_DN = 'ou=test,dc=seafile,dc=ren'   # LDAP 服务器中可以登陆Seafile的用户的根节点
LDAP_ADMIN_DN = 'administrator@seafile.ren'  # 用于查询 LDAP 服务器中信息的管理员的 DN
LDAP_ADMIN_PASSWORD = 'Hello@123'            # LDAP_ADMIN_DN 对应的用户的密码
LDAP_PROVIDER = 'ldap'                       # 标识用户的来源,默认为 'ldap'
LDAP_LOGIN_ATTR = 'userPrincipalName'        # 用于登录 Seafile 的用户属性,可以为mail或userPrincipalName
LDAP_FILTER = 'memberOf=CN=testgroup,OU=test,DC=seafile,DC=ren'  # 额外的过滤条件,符合过滤条件的用户可以登陆,否则无法登陆

# 通用的用户信息同步配置项,多个 LDAP 可共同使用
LDAP_USER_FIRST_NAME_ATTR = 'givenName'  # 用于同步用户的name
LDAP_USER_LAST_NAME_ATTR = 'sn'          # 用于同步用户的name
LDAP_USER_NAME_REVERSE = False           # 用于同步用户的name
IMPORT_NEW_USER = True                   # 同步用户信息时,是否导入新用户
ACTIVATE_USER_WHEN_IMPORT = False        # 导入新用户时,是否激活用户
ENABLE_EXTRA_USER_INFO_SYNC = True       # 是否同步 login_id、contact_email 等用户信息

# LDAP定时同步任务的周期,单位为分钟
LDAP_SYNC_INTERVAL = 60

# LDAP定时同步用户的配置项。如果要支持多 LDAP,将配置项中的'LDAP'替换为'MULTI_LDAP_1',再追加到配置文件中,例如:将 ENABLE_MULTI_LDAP_1_USER_SYNC,MULTI_LDAP_1_USER_OBJECT_CLASS 等添加到配置文件中。
ENABLE_LDAP_USER_SYNC = True             # 是否允许同步用户
LDAP_USER_OBJECT_CLASS = 'person'        # 用户对象的 class 名字
LDAP_DEPT_ATTR = ''                      # LDAP 用户的部门属性
LDAP_UID_ATTR = ''                       # LDAP 用户的 login_id 属性
LDAP_CONTACT_EMAIL_ATTR = ''             # LDAP 用户的 contact_email 属性
LDAP_USER_ROLE_ATTR = ''                 # LDAP 用户的角色属性
LDAP_AUTO_REACTIVATE_USERS = True        # 是否自动激活已禁用的用户
LDAP_USE_PAGED_RESULT = False            # 是否使用结果分页扩展,LDAP 协议 v3 支持一个称为 "paged results" 的扩展功能。当您在 LDAP 中有大量用户的时候,这个选项能够大大提高列出用户的速度。而且,AD 限制了单次请求中返回的用户条目数量,您需要启用这个选项才能避免查询错误。

# 通用的用户同步配置项,多个LDAP可共同使用
DEACTIVE_USER_IF_NOTFOUND = False        # 同步时,是否删除LDAP中不存在的用户

# LDAP定时同步群组的配置项。
# 如果要支持多 LDAP,将配置项中的'LDAP'替换为'MULTI_LDAP_1',再追加到配置文件中,例如ENABLE_MULTI_LDAP_1_GROUP_SYNC,MULTI_LDAP_1_GROUP_OBJECT_CLASS 等添加到配置文件中。

ENABLE_LDAP_GROUP_SYNC = True            # 是否允许同步群组
LDAP_GROUP_FILTER = ''                   # 群组同步过滤条件
LDAP_SYNC_DEPARTMENT_FROM_OU = True      # 是否同步OU为Seafile部门
LDAP_GROUP_OBJECT_CLASS = 'group'        # 群组对象的 class 名字
LDAP_GROUP_MEMBER_ATTR = 'member'        # 在加载组的成员时使用的属性字段
LDAP_USER_ATTR_IN_MEMBERUID = 'uid'      # LDAP_GROUP_MEMBER_ATTR 选项中的用户属性集
LDAP_GROUP_UUID_ATTR = 'objectGUID'      # 用于唯一识别 LDAP 中的群组
LDAP_USE_GROUP_MEMBER_RANGE_QUERY = False   # 当一个组包含太多成员时,AD将只返回其中的一部分。将此选项设置为 TRUE 可使 LDAP 同步适用于大型组。
LDAP_SYNC_GROUP_AS_DEPARTMENT = False    # 是否将群组同步为Seafile中的顶级部门
LDAP_DEPT_NAME_ATTR = ''                 # 用以同步部门名称的属性
LDAP_CREATE_DEPARTMENT_LIBRARY = False   # 将群组同步为顶级部门时,是否自动创建带有群组名称的部门资料库
LDAP_DEPT_REPO_PERM = 'rw'               # 设置部门资料库的权限,默认权限为'rw'
LDAP_DEFAULT_DEPARTMENT_QUOTA = -2       # 为部门设置空间配额(单位为MB),默认为无限制

# 通用的群组同步配置项,多个LDAP可共同使用
DEL_GROUP_IF_NOT_FOUND = False           # 同步时,是否删除LDAP中不存在的群组
DEL_DEPARTMENT_IF_NOT_FOUND = False      # 同步时,是否删除LDAP中不存在的部门

python3 migrate_ldapusers.py

4、更改 Oauth 配置

新版本中,OAuth 登录配置项要保持 email 属性的配置不变,以兼容新旧用户登录。新版本新增一个 uid 属性,如果 OAuth 系统没有 uid 或类似的属性,则保持原来的配置即可,示例如下:

# 旧版本
OAUTH_ATTRIBUTE_MAP = {
    "id": (True, "email"),
    "name": (False, "name"),
    "email": (False, "contact_email"),
}

# 新版本, 如果没有uid属性,则不配置,不影响新旧用户的登录
OAUTH_ATTRIBUTE_MAP = {
    "id": (True, "email"),  # 新版本中要保持 email 属性配置不变,以兼容新旧用户登录
    "uid": (True, "uid"),   # Seafile使用uid作为用户的唯一标识符, 不同的 OAuth 系统对应的属性不同, 可能是: uid或username等
    "name": (False, "name"),
    "email": (False, "contact_email"),
}

其它配置项没有额外变化。

5、启动 seafile 11.0.x 服务

Last modified by 郑杰, 2023-10-27

主要变更
更改用户身份
重新实现 LDAP 集成
OAuth 身份验证和其他 SSO 方法
弃用 SQLite 数据库支持
ElasticSearch 更改(仅限专业版)
安装 Python 依赖
升级到 11.0.x