Seahub 配置
提示:可以通过Web界面修改多数配置项,这些配置项会被保存在数据库表(seahub_db/constance_config)中。他们的优先级高于配置文件中的项目。如果要禁用Web界面设置,可以添加 ENABLE_SETTINGS_VIA_WEB = False 到 seahub_settings.py。
Seahub 下发送邮件提醒
缓存
Seahub 默认将缓存项(avatars,profiles等)缓存到目录/tmp/seahub_cache您可以用Memcached/Redis替换。
Memcached
# Debian/Ubuntu 安装memcached;如果容器部署不需要单独安装apt-get install memcached libmemcached-dev -ypip3 install --timeout=3600 pylibmc django-pylibmcsystemctl enable --now memcached添加如下配置到seahub_settings.py:
#location是memcached的地址,如果容器部署,默认会是memcachedCACHES = { 'default': { 'BACKEND': 'django_pylibmc.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1:11211', },}Redis
在 Seafile 11.0 版本中添加了对 Redis 的支持。
- 在你的操作系统中使用软件包安装程序安装 Redis。
安全设置
# 出于安全考虑,请设置与主机 / 域相匹配# 详细信息请参考 ALLOWED_HOSTS = ['.myseafile.com']# 是否对 CSRF cookie使用安全cookie。# https://docs.djangoproject.com/en/3.2/ref/settings/#csrf-cookie-secureCSRF_COOKIE_SECURE = True# CSRF Cookie 的 SameSite 属性值# https://docs.djangoproject.com/en/3.2/ref/settings/#csrf-cookie-samesiteCSRF_COOKIE_SAMESITE = 'Strict'# https://docs.djangoproject.com/en/3.2/ref/settings/#csrf-trusted-originsCSRF_TRUSTED_ORIGINS = ['https://www.myseafile.com']用户管理选项
以下选项影响用户注册,密码和 session。
# 是否在网页上启用或禁用注册。默认值为 `False`。ENABLE_SIGNUP = False# 注册完成后是否自动激活用户。默认值为 `True`。# 如果设置为 `False`,新用户需要管理员在后台激活。ACTIVATE_AFTER_REGISTRATION = False# 系统管理员添加新成员时是否发送邮件。默认值为 `True`。SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER = True# 系统管理员重置用户密码时是否发送邮件。默认值为 `True`。SEND_EMAIL_ON_RESETTING_USER_PASSWD = True# 用户注册完成后是否发送邮件通知系统管理员。默认值为 `False`。NOTIFY_ADMIN_AFTER_REGISTRATION = True# 登录时“记住我”的天数。默认值为 7LOGIN_REMEMBER_DAYS = 7# 登录尝试次数限制,超过后显示验证码LOGIN_ATTEMPT_LIMIT = 3# 登录失败次数超过限制时是否冻结用户账号# 版本 5.1.2 或专业版 5.1.3 及以上FREEZE_USER_ON_LOGIN_FAILED = False# 默认 False,仅检查 USER_PASSWORD_MIN_LENGTH# 如果为 True,则检查密码强度等级,仅允许 STRONG(或以上)级别USER_STRONG_PASSWORD_REQUIRED = False# 管理员添加或重置用户时是否强制用户更改密码# 版本 5.1.1 新增,默认值为 TrueFORCE_PASSWORD_CHANGE = True# Cookie 有效期,单位秒(默认:2 周)SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2# 用户关闭浏览器时是否使 session cookie 过期SESSION_EXPIRE_AT_BROWSER_CLOSE = False# 是否在每次请求时保存 session 数据。默认值为 `False`SESSION_SAVE_EVERY_REQUEST = False# 是否启用“已发布库”功能。默认值为 `False`# 版本 6.1.0 CEENABLE_WIKI = True# 在旧版本中,如果使用单点登录(SSO),密码不会保存在 Seafile 中。# 用户无法使用 WebDAV,因为 Seafile 无法验证密码是否正确。# 自 6.3.8 版本起,可以启用此选项,让用户为 WebDAV 登录设置专用密码。# 使用 SSO 登录的用户可以使用此密码登录 WebDAV。# 启用该功能。需先安装 pycryptodome。# sudo pip install pycryptodome==3.12.0ENABLE_WEBDAV_SECRET = TrueWEBDAV_SECRET_MIN_LENGTH = 8# 密码强度等级,基于四种输入类型:# 数字、大写字母、小写字母、其他符号# '3' 表示密码至少包含上述三种类型WEBDAV_SECRET_STRENGTH_LEVEL = 1# 自 7.0.9 版本起,可以强制全体用户使用双因素认证登录。# 前提是管理员在“系统管理 -> 设置”页面启用了双因素认证。# 然后可以将以下配置添加到配置文件中。ENABLE_FORCE_2FA_TO_ALL_USERS = True资料库快照标签功能
# 开启此选项可让用户为资料库快照添加标签。默认值为 “False”。ENABLE_REPO_SNAPSHOT_LABEL = False资料库设置
# 是否启用创建加密库ENABLE_ENCRYPTED_LIBRARY = True# 重置加密资料库密码# 说明1:此功能需要为 Seafile 配置邮件服务。# 说明2:此功能开启后,只对用户输入过密码的加密资料库有效。# 说明3:Seafile 专业版才有此功能。# 说明4:该功能只支持浏览器操作的加密资料库密码重置ENABLE_RESET_ENCRYPTED_REPO_PASSWORD = True# 加密库的版本# 仅能设置为 `2` 或 `4`# 版本 3 不安全(使用 AES128 加密),因此不再支持# 关于版本 2 和 4 的区别,可参考:# https://manual.seafile.com/14.0/administration/security_features/#how-does-an-encrypted-library-workENCRYPTED_LIBRARY_VERSION = 2# 从版本 12 开始,你可以为新加密库选择密码哈希算法# 密码用于加密加密密钥,因此使用安全的密码哈希算法防止暴力破解很重要# 12 版本之前,固定使用 PBKDF2-SHA256(1000 次迭代)## 目前支持两种哈希算法:# - PBKDF2:唯一可用参数是迭代次数。随着 GPU 越来越多用于此类计算,需要逐步增加迭代次数。# 默认迭代次数为 1000,截至 2023 年推荐迭代次数为 600,000# - Argon2id:安全哈希算法,即便在 GPU 上计算也代价高。可设置三个参数:时间成本、内存成本、并行度# 参数用逗号分隔,例如 "2,102400,8",这是 Seafile 默认参数# 更多信息可参考 https://github.com/P-H-C/phc-winner-argon2## 注意:仅支持 sync 客户端 >= 9.0.9 和 SeaDrive >= 3.0.12 同步使用这些算法创建的库ENCRYPTED_LIBRARY_PWD_HASH_ALGO = "argon2id"ENCRYPTED_LIBRARY_PWD_HASH_PARAMS = "2,102400,8"# ENCRYPTED_LIBRARY_PWD_HASH_ALGO = "pbkdf2_sha256"# ENCRYPTED_LIBRARY_PWD_HASH_PARAMS = "600000"# 加密库密码最小长度REPO_PASSWORD_MIN_LENGTH = 8# 生成分享/上传链接时是否强制使用密码(版本 8.0.9 及以上)SHARE_LINK_FORCE_USE_PASSWORD = False# 分享链接密码最小长度(版本 4.4 及以上)SHARE_LINK_PASSWORD_MIN_LENGTH = 8# 分享/上传链接密码强度等级# 基于四种输入类型:数字、大写字母、小写字母、其他符号# '3' 表示密码至少包含三种类型(版本 8.0.9 及以上)SHARE_LINK_PASSWORD_STRENGTH_LEVEL = 3# 分享链接默认过期天数(版本 6.3.8 及以上)# 配置此值后,用户无法再生成无过期时间的分享链接# 如果生成分享链接时未设置过期时间,则使用此处配置的值SHARE_LINK_EXPIRE_DAYS_DEFAULT = 5# 分享链接最小过期天数(版本 6.3.6 及以上)# SHARE_LINK_EXPIRE_DAYS_MIN 应小于 SHARE_LINK_EXPIRE_DAYS_DEFAULT(如果已设置)SHARE_LINK_EXPIRE_DAYS_MIN = 3 # 默认 0,表示无限制# 分享链接最大过期天数(版本 6.3.6 及以上)# SHARE_LINK_EXPIRE_DAYS_MAX 应大于 SHARE_LINK_EXPIRE_DAYS_DEFAULT(如果已设置)SHARE_LINK_EXPIRE_DAYS_MAX = 8 # 默认 0,表示无限制# 上传链接默认过期天数(版本 7.1.6 及以上)# 配置此值后,用户无法再生成无过期时间的上传链接UPLOAD_LINK_EXPIRE_DAYS_DEFAULT = 5# 上传链接最小过期天数(版本 7.1.6 及以上)UPLOAD_LINK_EXPIRE_DAYS_MIN = 3 # 默认 0,表示无限制# 上传链接最大过期天数(版本 7.1.6 及以上)UPLOAD_LINK_EXPIRE_DAYS_MAX = 8 # 默认 0,表示无限制# 查看文件/文件夹分享链接时是否强制用户登录(版本 6.3.6 及以上)SHARE_LINK_LOGIN_REQUIRED = True# 浏览器查看(非编辑)文件时是否启用水印(版本 6.3.6 及以上)ENABLE_WATERMARK = True# 禁用与任意文件夹同步。默认值为 `False`# 注意:版本 4.2.4 及以上DISABLE_SYNC_WITH_ANY_FOLDER = True# 是否启用库历史设置ENABLE_REPO_HISTORY_SETTING = True# 是否允许用户将库分享给任意群组# 版本 6.2.0 及以上ENABLE_SHARE_TO_ALL_GROUPS = True# 是否允许用户清空回收站(默认 True)# 版本 6.3.6 及以上ENABLE_USER_CLEAN_TRASH = True# 在下载链接上添加“举报滥用”按钮(版本 7.1.0 及以上)# 用户可在分享链接页面举报滥用,填写举报类型、联系方式和描述# 默认值为 FalseENABLE_SHARE_LINK_REPORT_ABUSE = True在线文件查看设置
# 在线预览文件的最大大小,默认 30MFILE_PREVIEW_MAX_SIZE = 30 * 1024 * 1024# 可在线预览的文本文件扩展名# 注意:版本 6.1.1 及以上TEXT_PREVIEW_EXT = """ac, am, bat, c, cc, cmake, cpp, cs, css, diff, el, h, html,htm, java, js, json, less, make, org, php, pl, properties, py, rb,scala, script, sh, sql, txt, text, tex, vi, vim, xhtml, xml, log, csv,groovy, rst, patch, go"""# Seafile 仅为小于以下大小的图片生成缩略图# 版本 6.3.8 pro 及以上支持 psd 文件在线预览THUMBNAIL_IMAGE_SIZE_LIMIT = 30 # MB# Seafile 14:是否启用视频缩略图,默认关闭ENABLE_THUMBNAIL_SERVER = True# 存放缩略图文件的绝对路径THUMBNAIL_ROOT = '/haiwen/seahub-data/thumbnail/thumb/'# 图片预览的默认大小。增大此值可提高预览质量# 注意:版本 6.1.1 及以上THUMBNAIL_SIZE_FOR_ORIGINAL = 1024地图服务
GOOGLE_MAP_KEY = '<替换为你的Google Maps API Key>'SERVER_GOOGLE_MAP_KEY = '<替换为你的Google Maps API Key>'注意:
为了防止 Google API 密钥被滥用,应对其使用进行限制。但即便设置了限制,滥用风险仍然存在——尤其是因为 GOOGLE_MAP_KEY 必须包含在你的源代码中,因此是公开可访问的。此外,如果大量使用地图插件,可能会增加 Google 的费用支出,因此需要密切监控你的开销。
Cloud 模式
如果您打算对外提供公共的云盘服务,您应该启用 Cloud 模式。它禁用了seafile 上的"公共"标签,以确保用户不能创建全局的所有人都能访问的资料库。通过全局通讯录一个用户可以搜索其他用户账号,在云服务模式下您也需要它。
# 启用cloud模式并隐藏"公共"标签。CLOUD_MODE = True# 禁用全局通讯录ENABLE_GLOBAL_ADDRESSBOOK = False外部认证
# 是否启用 ADFS(Active Directory 联合服务)认证# 默认值为 False# 版本 6.0.9 及以上ENABLE_ADFS_LOGIN = True# Seafile 14:禁止通过外部身份提供方(如 SAML/ADFS、OAuth、LDAP)认证的用户# 使用 Seafile 本地密码登录,以及修改或重置本地密码。默认值为 False。DISABLE_SSO_USER_LOCAL_PWD_LOGIN = True# Seafile 13:强制用户通过 ADFS/OAuth 登录,而不是使用邮箱和密码。默认值为 False。DISABLE_ADFS_USER_PWD_LOGIN = True# 是否启用 Kerberos 认证# 默认值为 FalseENABLE_KRB5_LOGIN = True# 是否启用 Shibboleth 认证# 默认值为 FalseENABLE_SHIBBOLETH_LOGIN = True# 是否允许客户端使用外部浏览器进行单点登录(SSO)# 当为 False 时,使用内置浏览器进行 SSO# 当为 True 时,使用操作系统的默认浏览器进行 SSO# 使用系统浏览器的好处是可以支持硬件双因素认证(2FA)# 版本 11.0.0 及以上,sync 客户端 9.0.5,Drive 客户端 3.0.8 及以上CLIENT_SSO_VIA_LOCAL_BROWSER = True # 默认值为 False# 客户端 SSO UUID 的有效期(秒)CLIENT_SSO_UUID_EXPIRATION = 5 * 60其他选项
# Seahub(Seafile Web)的外部访问 URL# 域名部分(如 www.example.com)用于生成分享链接以及通过网页下载/上传文件# 注意:自 9.0.0 起,SERVICE_URL 已移动到 seahub_settings.py# 注意:自 12.0 起,SERVICE_URL 已不再使用# SERVICE_URL = 'https://seafile.example.com:'# 在系统管理 -> 设置 中禁用通过网页修改配置# 默认值为 True# 自 5.1.3 起ENABLE_SETTINGS_VIA_WEB = False# 时区设置,选项可参考:# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name# 注意:不是所有操作系统都支持全部选项# 如果在 Windows 系统上运行,必须设置为系统的时区TIME_ZONE = 'UTC'# 安装使用的语言代码,所有可选语言请参考:# http://www.i18nguy.com/unicode/language-identifiers.html# 也用于发送邮件的默认语言LANGUAGE_CODE = 'en'# 自定义语言选项LANGUAGES = ( ('en', 'English'), ('zh-cn', '简体中文'), ('zh-tw', '繁體中文'),)# 网站或公司名称,用于邮件通知和用户首次登录的欢迎信息SITE_NAME = 'Seafile'# 浏览器标签页标题SITE_TITLE = 'Private Seafile'# 如果不想将 Seahub 运行在网站根路径,可设置为自定义路径# 例如:设置为 '/seahub/',则访问路径为 http://example.com/seahub/SITE_ROOT = '/'# 用户上传文件/文件夹时的最大数量# 自 6.0.4 版本起MAX_NUMBER_OF_FILES_FOR_FILEUPLOAD = 500# 控制发送邮件的语言,默认使用用户当前语言# 自 6.1.1 版本起SHARE_LINK_EMAIL_LANGUAGE = ''# 浏览器请求未读通知的间隔时间(秒)# PRO 6.1.4 或 CE 6.1.2 及以上UNREAD_NOTIFICATIONS_REQUEST_INTERVAL = 3 * 60# 是否允许用户在个人资料页面删除账号、更改登录密码或更新基本信息# PRO 6.3.10 及以上ENABLE_DELETE_ACCOUNT = FalseENABLE_UPDATE_USER_INFO = False# Seafile 13 的本地密码修改选项ENABLE_CHANGE_PASSWORD = False# 在个人资料页面获取 Web API 授权令牌ENABLE_GET_AUTH_TOKEN_BY_SESSION = True# 自 8.0.6 CE/PRO 版本起# 用户注销后重定向的 URL,通常配置为单点注销(Single Logout)URLLOGOUT_REDIRECT_URL = 'http{s}://www.example-url.com'# 启用系统管理员添加使用条款(T&C),所有用户在使用前必须接受# 默认值为 False# 自 6.0 版本起ENABLE_TERMS_AND_CONDITIONS = True# 启用账户双因素认证(2FA),默认值为 False# 自 6.0 版本起ENABLE_TWO_FACTOR_AUTH = True# 用户创建库时选择模板# 选择模板后,Seafile 会自动创建与模板相关的文件夹# 自 6.0 版本起LIBRARY_TEMPLATES = { 'Technology': ['/Develop/Python', '/Test'], 'Finance': ['/Current assets', '/Fixed assets/Computer']}# Seafile 13:是否允许用户在“设置”页面更改密码,默认值为 True# 自 6.2.11 版本起ENABLE_CHANGE_PASSWORD = True# Seafile 13:是否允许与 SSO 账户关联的用户在“设置”页面更改或重置本地密码,默认值为 True# 设置为 False 则禁止 SSO 用户修改本地密码ENABLE_SSO_USER_CHANGE_PASSWORD = True# 搜索用户时是否显示联系邮箱ENABLE_SHOW_CONTACT_EMAIL_WHEN_SEARCH_USER = True#指定头像存储到数据库(默认存储到本地seahub-data目录)AVATAR_FILE_STORAGE = 'seahub.base.database_storage.DatabaseStorage'专业版选项
# 是否在用户个人资料弹出对话框中显示已使用流量。默认值为 TrueSHOW_TRAFFIC = True# 是否允许管理员通过系统管理中的“库”页面查看用户的未加密库文件# 默认值为 FalseENABLE_SYS_ADMIN_VIEW_REPO = True# 对未登录用户,在分享链接页面下载或上传文件前要求提供邮箱# 自 5.1.4 版本起ENABLE_SHARE_LINK_AUDIT = True# 上传文件到分享上传链接后是否进行病毒检查。默认值为 False# 自 6.0 版本起ENABLE_UPLOAD_LINK_VIRUS_CHECK = True# 当检测到病毒时,发送邮件通知以下邮箱# 列表中的邮箱可以是任意有效邮箱,不必是 Seafile 用户邮箱# 自 6.0.8 版本起VIRUS_SCAN_NOTIFY_LIST = ['user_a@seafile.com', 'user_b@seafile.com']每月流量超额限速(Seafile 14)
# 超过每月下载流量配额后的下载速率DOWNLOAD_LIMIT_WHEN_THROTTLE = '1k'# 超过每月上传流量配额后的上传速率UPLOAD_LIMIT_WHEN_THROTTLE = '1k'也可以使用 100k、2m 等配额单位。
RESTful API
# API 限流相关设置。如果在 API 调用过程中收到 429 响应码,可以增大限流速率REST_FRAMEWORK = { 'DEFAULT_THROTTLE_RATES': { 'ping': '600/minute', # ping 请求每分钟最多 600 次 'anon': '5/minute', # 匿名用户每分钟最多 5 次请求 'user': '300/minute', # 已登录用户每分钟最多 300 次请求 }, 'UNICODE_JSON': False, # 是否以 Unicode 格式返回 JSON}# 限流白名单,用于对某些 IP 禁用限流# 例如:REST_FRAMEWORK_THROTTING_WHITELIST = ['127.0.0.1', '192.168.1.1']# 请确保在 Nginx 配置中正确设置 `REMOTE_ADDR` 头,参考:# https://manual.seafile.com/14.0/setup_binary/https_with_nginx/REST_FRAMEWORK_THROTTING_WHITELIST = []Seahub 定制功能
从 6.2 开始,您可以定义一个自定义函数来修改用户搜索功能的结果。
例如,如果您想限制用户只能搜索到处于同一机构的用户,您可以在 {seafile install path}/conf/seahub_custom_functions/init.py 中定义 custom_search_user 函数:
代码示例:
import osimport syscurrent_path = os.path.dirname(os.path.abspath(__file__))seahub_dir = os.path.join(current_path, \ '../../seafile-server-latest/seahub/seahub')sys.path.append(seahub_dir)from seahub.profile.models import Profiledef custom_search_user(request, emails): institution_name = '' username = request.user.username profile = Profile.objects.get_profile_by_user(username) if profile: institution_name = profile.institution inst_users = [p.user for p in Profile.objects.filter(institution=institution_name)] filtered_emails = [] for email in emails: if email in inst_users: filtered_emails.append(email) return filtered_emails注意,您不应该更改 custom_search_user 和 seahub_custom_functions/init.py 的名字。
企业版 6.2.5 开始,如果您在系统管理的设置页面上开启了ENABLE_SHARE_TO_ALL(允许用户将资料库共享给系统中的任何群组)功能,您还可以定义一个自定义函数来返回用户可以共享资料库的组。
例如,您希望用户可以将资料库共享给其所在的群组和test@test.com所在的群组,您可以在 {seafile install path}/conf/seahub_custom_functions/init.py 中定义 custom_get_groups 函数:
import osimport syscurrent_path = os.path.dirname(os.path.abspath(__file__))seaserv_dir = os.path.join(current_path, \ '../../seafile-server-latest/seafile/lib64/python2.7/site-packages')sys.path.append(seaserv_dir)def custom_get_groups(request): from seaserv import ccnet_api groups = [] username = request.user.username # for current user groups += ccnet_api.get_groups(username) # for 'test@test.com' user groups += ccnet_api.get_groups('test@test.com') return groups注意,您不应该更改 custom_get_groups 和 seahub_custom_functions/init.py 的名字。
注意
- 请重启 Seahub 以使更改生效.
- 如果更改没有生效,请删除 seahub_setting.pyc 缓存文件.
- 如果需要在 seahub_settings.py 里添加中文注释,请把 # -- coding: utf-8 -- 写入文件第一行,并单独为一行。
docker compose restart