seafile-admin-docs/config/seahub_settings_py/index.html
Junxiang Huang fdbee06339 restore
2024-10-23 14:26:38 +08:00

4323 lines
106 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="author" content="seafile">
<link rel="canonical" href="https://haiwen.github.io/seafile-admin-docs/config/seahub_settings_py/">
<link rel="prev" href="../seafile-conf/">
<link rel="next" href="../seafevents-conf/">
<link rel="icon" href="../../media/favicon.ico">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.39">
<title>seahub_settings.py - Seafile Admin Manual</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.8c3ca2c6.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../stylesheets/extra.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="white" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#seahub-settings" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="Seafile Admin Manual" class="md-header__button md-logo" aria-label="Seafile Admin Manual" data-md-component="logo">
<img src="../../media/seafile-transparent-1024.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Seafile Admin Manual
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
seahub_settings.py
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/haiwen/seafile-admin-docs/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
</div>
<div class="md-source__repository">
haiwen/seafile-admin-docs
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="Seafile Admin Manual" class="md-nav__button md-logo" aria-label="Seafile Admin Manual" data-md-component="logo">
<img src="../../media/seafile-transparent-1024.png" alt="logo">
</a>
Seafile Admin Manual
</label>
<div class="md-nav__source">
<a href="https://github.com/haiwen/seafile-admin-docs/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
</div>
<div class="md-source__repository">
haiwen/seafile-admin-docs
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" >
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
<span class="md-ellipsis">
Overview
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_1">
<span class="md-nav__icon md-icon"></span>
Overview
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../overview/components/" class="md-nav__link">
<span class="md-ellipsis">
Seafile Components
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../overview/file_permission_management/" class="md-nav__link">
<span class="md-ellipsis">
File permission management
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../contribution/" class="md-nav__link">
<span class="md-ellipsis">
Contribution
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../changelog/" class="md-nav__link">
<span class="md-ellipsis">
Changelog
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-ellipsis">
Seafile Community Setup on Linux
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Seafile Community Setup on Linux
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../deploy/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/using_mysql/" class="md-nav__link">
<span class="md-ellipsis">
Installation with MySQL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/https_with_nginx/" class="md-nav__link">
<span class="md-ellipsis">
HTTPS with Nginx
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/https_with_apache/" class="md-nav__link">
<span class="md-ellipsis">
HTTPS with Apache
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Seafile Professional Setup on Linux
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Seafile Professional Setup on Linux
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../deploy_pro/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/download_and_setup_seafile_professional_server/" class="md-nav__link">
<span class="md-ellipsis">
Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/migrate_from_seafile_community_server/" class="md-nav__link">
<span class="md-ellipsis">
Migration from Seafile Community
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4" >
<label class="md-nav__link" for="__nav_3_4" id="__nav_3_4_label" tabindex="0">
<span class="md-ellipsis">
Storage Backends
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_4">
<span class="md-nav__icon md-icon"></span>
Storage Backends
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../deploy_pro/setup_with_amazon_s3/" class="md-nav__link">
<span class="md-ellipsis">
Amazon S3 Backend
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/setup_with_ceph/" class="md-nav__link">
<span class="md-ellipsis">
Ceph Backend
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/setup_with_swift/" class="md-nav__link">
<span class="md-ellipsis">
OpenStack Swift Backend
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/setup_with_oss/" class="md-nav__link">
<span class="md-ellipsis">
Alibaba OSS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/multiple_storage_backends/" class="md-nav__link">
<span class="md-ellipsis">
Multiple Storage Backends
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/migrate/" class="md-nav__link">
<span class="md-ellipsis">
Data migration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_5" >
<label class="md-nav__link" for="__nav_3_5" id="__nav_3_5_label" tabindex="0">
<span class="md-ellipsis">
Cluster Deployment
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3_5">
<span class="md-nav__icon md-icon"></span>
Cluster Deployment
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../deploy_pro/deploy_in_a_cluster/" class="md-nav__link">
<span class="md-ellipsis">
Deploy in a cluster
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/enable_search_and_background_tasks_in_a_cluster/" class="md-nav__link">
<span class="md-ellipsis">
Search and background tasks in a cluster
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/memcached_mariadb_cluster/" class="md-nav__link">
<span class="md-ellipsis">
Memcache and MariaDB Cluster
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/setup_seafile_cluster_with_nfs/" class="md-nav__link">
<span class="md-ellipsis">
Setup Seafile cluster with NFS
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/seafile_professional_sdition_software_license_agreement/" class="md-nav__link">
<span class="md-ellipsis">
License
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-ellipsis">
Seafile Setup with Docker
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Seafile Setup with Docker
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../docker/deploy_seafile_with_docker/" class="md-nav__link">
<span class="md-ellipsis">
Seafile Community Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker/pro-edition/deploy_seafile_pro_with_docker/" class="md-nav__link">
<span class="md-ellipsis">
Seafile Professional Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker/cluster/deploy_seafile_cluster_with_docker/" class="md-nav__link">
<span class="md-ellipsis">
Seafile Docker Cluster Deployment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/deploy_with_k8s/" class="md-nav__link">
<span class="md-ellipsis">
Setup with Kubernetes (K8s)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker/pro-edition/migrate_ce_to_pro_with_docker/" class="md-nav__link">
<span class="md-ellipsis">
Migration from Seafile Community
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker/non_docker_to_docker/" class="md-nav__link">
<span class="md-ellipsis">
Migrate from non-docker deployment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../docker/seafile_docker_autostart/" class="md-nav__link">
<span class="md-ellipsis">
Seafile Docker autostart
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-ellipsis">
Advanced Setup Options
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Advanced Setup Options
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_1" >
<label class="md-nav__link" for="__nav_5_1" id="__nav_5_1_label" tabindex="0">
<span class="md-ellipsis">
LDAP/AD Integration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_1">
<span class="md-nav__icon md-icon"></span>
LDAP/AD Integration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../deploy/using_ldap/" class="md-nav__link">
<span class="md-ellipsis">
LDAP Integration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/using_ldap_pro/" class="md-nav__link">
<span class="md-ellipsis">
LDAP Configuration for Seafile Pro
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/ldap_group_sync/" class="md-nav__link">
<span class="md-ellipsis">
Importing Groups from LDAP (Pro)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/ldap_role_sync/" class="md-nav__link">
<span class="md-ellipsis">
Importing Roles from LDAP (Pro)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/ldap_in_11.0/" class="md-nav__link">
<span class="md-ellipsis">
LDAP in version 11.0
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/ldap_in_11.0/" class="md-nav__link">
<span class="md-ellipsis">
LDAP in version 11.0 (Pro)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" >
<label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0">
<span class="md-ellipsis">
Single Sign On
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_2">
<span class="md-nav__icon md-icon"></span>
Single Sign On
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../deploy/single_sign_on/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/oauth/" class="md-nav__link">
<span class="md-ellipsis">
OAuth Authentication
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/remote_user/" class="md-nav__link">
<span class="md-ellipsis">
Remote User Authentication
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/shibboleth_authentication/" class="md-nav__link">
<span class="md-ellipsis">
Shibboleth Authentication
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/auto_login_seadrive/" class="md-nav__link">
<span class="md-ellipsis">
Auto Login to SeaDrive on Windows
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/saml2_in_10.0/" class="md-nav__link">
<span class="md-ellipsis">
SAML 2.0 in version 10.0+ (Pro)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/adfs/" class="md-nav__link">
<span class="md-ellipsis">
SAML 2.0 (old) (Pro)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/cas/" class="md-nav__link">
<span class="md-ellipsis">
CAS Authentication (Pro)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/auth_switch/" class="md-nav__link">
<span class="md-ellipsis">
Switch authentication
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_3" >
<label class="md-nav__link" for="__nav_5_3" id="__nav_5_3_label" tabindex="0">
<span class="md-ellipsis">
Online Office
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_3">
<span class="md-nav__icon md-icon"></span>
Online Office
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../deploy/libreoffice_online/" class="md-nav__link">
<span class="md-ellipsis">
LibreOffice Online Integration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/only_office/" class="md-nav__link">
<span class="md-ellipsis">
OnlyOffice Integration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/office_web_app/" class="md-nav__link">
<span class="md-ellipsis">
Office Online Server Integration (Pro)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../extra_setup/setup_seadoc/" class="md-nav__link">
<span class="md-ellipsis">
SeaDoc Integration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/notification-server/" class="md-nav__link">
<span class="md-ellipsis">
Notification Server
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../extension/webdav/" class="md-nav__link">
<span class="md-ellipsis">
WebDAV extension
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../extension/fuse/" class="md-nav__link">
<span class="md-ellipsis">
FUSE extension
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_8" >
<label class="md-nav__link" for="__nav_5_8" id="__nav_5_8_label" tabindex="0">
<span class="md-ellipsis">
Virus Scan (Pro)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_8">
<span class="md-nav__icon md-icon"></span>
Virus Scan (Pro)
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../deploy_pro/virus_scan/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/deploy_clamav_with_seafile/" class="md-nav__link">
<span class="md-ellipsis">
Deploy ClamAV with Seafile
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/virus_scan_with_kav4fs/" class="md-nav__link">
<span class="md-ellipsis">
Virus Scan With Kav4fs
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_9" >
<label class="md-nav__link" for="__nav_5_9" id="__nav_5_9_label" tabindex="0">
<span class="md-ellipsis">
Advanced User Management (Pro)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_9">
<span class="md-nav__icon md-icon"></span>
Advanced User Management (Pro)
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../deploy_pro/multi_institutions/" class="md-nav__link">
<span class="md-ellipsis">
Multi-Institutions Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/roles_permissions/" class="md-nav__link">
<span class="md-ellipsis">
Roles and Permissions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/admin_roles_permissions/" class="md-nav__link">
<span class="md-ellipsis">
Administrator Roles and Permissions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/multi_tenancy/" class="md-nav__link">
<span class="md-ellipsis">
Multi-Tenancy Support
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/details_about_file_search/" class="md-nav__link">
<span class="md-ellipsis">
Advanced File Search configuration (Pro)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/migrate_from_sqlite_to_mysql/" class="md-nav__link">
<span class="md-ellipsis">
Migrate From SQLite to MySQL
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_12" >
<label class="md-nav__link" for="__nav_5_12" id="__nav_5_12_label" tabindex="0">
<span class="md-ellipsis">
Others Deployment Notes
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_12">
<span class="md-nav__icon md-icon"></span>
Others Deployment Notes
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../deploy/start_seafile_at_system_bootup/" class="md-nav__link">
<span class="md-ellipsis">
Start Seafile at System Bootup
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/using_logrotate/" class="md-nav__link">
<span class="md-ellipsis">
Logrotate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/ocm/" class="md-nav__link">
<span class="md-ellipsis">
Open Cloud Mesh
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/deploy_seafile_behind_nat/" class="md-nav__link">
<span class="md-ellipsis">
Deploy Seafile behind NAT
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy/deploy_seahub_at_non-root_domain/" class="md-nav__link">
<span class="md-ellipsis">
Deploy Seahub at Non-root domain or on custom port
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../security/fail2ban/" class="md-nav__link">
<span class="md-ellipsis">
Config fail2ban
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/real_time_backup/" class="md-nav__link">
<span class="md-ellipsis">
Real-time Backup Server
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" checked>
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-ellipsis">
Configuration and Customization
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Configuration and Customization
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ccnet-conf/" class="md-nav__link">
<span class="md-ellipsis">
ccnet.conf
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../seafile-conf/" class="md-nav__link">
<span class="md-ellipsis">
seafile.conf
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
seahub_settings.py
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
seahub_settings.py
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#sending-email-notifications-on-seahub" class="md-nav__link">
<span class="md-ellipsis">
Sending Email Notifications on Seahub
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cache" class="md-nav__link">
<span class="md-ellipsis">
Cache
</span>
</a>
<nav class="md-nav" aria-label="Cache">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#memcached" class="md-nav__link">
<span class="md-ellipsis">
Memcached
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#redis" class="md-nav__link">
<span class="md-ellipsis">
Redis
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#security-settings" class="md-nav__link">
<span class="md-ellipsis">
Security settings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#user-management-options" class="md-nav__link">
<span class="md-ellipsis">
User management options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#library-snapshot-label-feature" class="md-nav__link">
<span class="md-ellipsis">
Library snapshot label feature
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#library-options" class="md-nav__link">
<span class="md-ellipsis">
Library options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cloud-mode" class="md-nav__link">
<span class="md-ellipsis">
Cloud Mode
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#single-sign-on" class="md-nav__link">
<span class="md-ellipsis">
Single Sign On
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#other-options" class="md-nav__link">
<span class="md-ellipsis">
Other options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pro-edition-only-options" class="md-nav__link">
<span class="md-ellipsis">
Pro edition only options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#restful-api" class="md-nav__link">
<span class="md-ellipsis">
RESTful API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#seahub-custom-functions" class="md-nav__link">
<span class="md-ellipsis">
Seahub Custom Functions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#note" class="md-nav__link">
<span class="md-ellipsis">
Note
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../seafevents-conf/" class="md-nav__link">
<span class="md-ellipsis">
seafevents.conf
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../seahub_customization/" class="md-nav__link">
<span class="md-ellipsis">
Seahub customization
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../sending_email/" class="md-nav__link">
<span class="md-ellipsis">
Email Sending
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Administration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Administration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../maintain/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../maintain/account/" class="md-nav__link">
<span class="md-ellipsis">
Account management
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../maintain/two_factor_authentication/" class="md-nav__link">
<span class="md-ellipsis">
Two-factor Authentication
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../security/security_features/" class="md-nav__link">
<span class="md-ellipsis">
Security features
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../security/auditing/" class="md-nav__link">
<span class="md-ellipsis">
Access logs and auditing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../maintain/export_report/" class="md-nav__link">
<span class="md-ellipsis">
Export report
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../maintain/logs/" class="md-nav__link">
<span class="md-ellipsis">
Logs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../maintain/backup_recovery/" class="md-nav__link">
<span class="md-ellipsis">
Backup and Recovery
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../maintain/seafile_fsck/" class="md-nav__link">
<span class="md-ellipsis">
Seafile FSCK
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../maintain/seafile_gc/" class="md-nav__link">
<span class="md-ellipsis">
Seafile GC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../maintain/clean_database/" class="md-nav__link">
<span class="md-ellipsis">
Clean database
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../deploy_pro/seaf_import/" class="md-nav__link">
<span class="md-ellipsis">
Import Directory To Seafile (Pro)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" >
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
<span class="md-ellipsis">
Upgrade Seafile Server
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Upgrade Seafile Server
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../upgrade/upgrade/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade/upgrade_docker/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade Seafile Docker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade/upgrade_a_cluster/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade Seafile Cluster
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade/upgrade_a_cluster_docker/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade Seafile Cluster (Docker)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade/upgrade_notes_for_7.0.x/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade notes for 7.0.x
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade/upgrade_notes_for_7.1.x/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade notes for 7.1.x
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade/upgrade_notes_for_8.0.x/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade notes for 8.0.x
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade/upgrade_notes_for_9.0.x/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade notes for 9.0.x
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade/upgrade_notes_for_10.0.x/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade notes for 10.0.x
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade/upgrade_notes_for_11.0.x/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade notes for 11.0.x
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade/upgrade_notes_for_12.0.x/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade notes for 12.0.x (In progress)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" >
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
<span class="md-ellipsis">
Developing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
Developing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../develop/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9_2" >
<label class="md-nav__link" for="__nav_9_2" id="__nav_9_2_label" tabindex="0">
<span class="md-ellipsis">
How to Build Seafile
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_9_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9_2">
<span class="md-nav__icon md-icon"></span>
How to Build Seafile
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../build_seafile/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../build_seafile/linux/" class="md-nav__link">
<span class="md-ellipsis">
Linux
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../build_seafile/osx/" class="md-nav__link">
<span class="md-ellipsis">
macOS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../build_seafile/windows/" class="md-nav__link">
<span class="md-ellipsis">
Windows
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../build_seafile/server/" class="md-nav__link">
<span class="md-ellipsis">
Server development
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../build_seafile/rpi/" class="md-nav__link">
<span class="md-ellipsis">
Server binary package
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../develop/translation/" class="md-nav__link">
<span class="md-ellipsis">
Translation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../develop/web_api_v2.1/" class="md-nav__link">
<span class="md-ellipsis">
Web API V2.1
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://github.com/rene-s/Seafile-PHP-SDK" class="md-nav__link">
<span class="md-ellipsis">
PHP API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../develop/data_model/" class="md-nav__link">
<span class="md-ellipsis">
Data Model
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_10" >
<label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
<span class="md-ellipsis">
ChangeLog
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_10">
<span class="md-nav__icon md-icon"></span>
ChangeLog
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../changelog/server-changelog/" class="md-nav__link">
<span class="md-ellipsis">
Seafile Community Edition
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../changelog/changelog-for-seafile-professional-server/" class="md-nav__link">
<span class="md-ellipsis">
Seafile Professional Edition
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../changelog/client-changelog/" class="md-nav__link">
<span class="md-ellipsis">
Seafile Client
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../changelog/drive-client-changelog/" class="md-nav__link">
<span class="md-ellipsis">
Drive Client
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#sending-email-notifications-on-seahub" class="md-nav__link">
<span class="md-ellipsis">
Sending Email Notifications on Seahub
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cache" class="md-nav__link">
<span class="md-ellipsis">
Cache
</span>
</a>
<nav class="md-nav" aria-label="Cache">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#memcached" class="md-nav__link">
<span class="md-ellipsis">
Memcached
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#redis" class="md-nav__link">
<span class="md-ellipsis">
Redis
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#security-settings" class="md-nav__link">
<span class="md-ellipsis">
Security settings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#user-management-options" class="md-nav__link">
<span class="md-ellipsis">
User management options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#library-snapshot-label-feature" class="md-nav__link">
<span class="md-ellipsis">
Library snapshot label feature
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#library-options" class="md-nav__link">
<span class="md-ellipsis">
Library options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#cloud-mode" class="md-nav__link">
<span class="md-ellipsis">
Cloud Mode
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#single-sign-on" class="md-nav__link">
<span class="md-ellipsis">
Single Sign On
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#other-options" class="md-nav__link">
<span class="md-ellipsis">
Other options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#pro-edition-only-options" class="md-nav__link">
<span class="md-ellipsis">
Pro edition only options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#restful-api" class="md-nav__link">
<span class="md-ellipsis">
RESTful API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#seahub-custom-functions" class="md-nav__link">
<span class="md-ellipsis">
Seahub Custom Functions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#note" class="md-nav__link">
<span class="md-ellipsis">
Note
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="seahub-settings">Seahub Settings<a class="headerlink" href="#seahub-settings" title="Permanent link">&para;</a></h1>
<p>Note: You can also modify most of the config items via web interface. The config items are saved in database table (seahub-db/constance_config). They have a higher priority over the items in config files. If you want to disable settings via web interface, you can add <code>ENABLE_SETTINGS_VIA_WEB = False</code> to <code>seahub_settings.py</code>.</p>
<h2 id="sending-email-notifications-on-seahub">Sending Email Notifications on Seahub<a class="headerlink" href="#sending-email-notifications-on-seahub" title="Permanent link">&para;</a></h2>
<p>Refer to <a href="../sending_email/">email sending documentation</a>.</p>
<h2 id="cache">Cache<a class="headerlink" href="#cache" title="Permanent link">&para;</a></h2>
<p>Seahub caches items(avatars, profiles, etc) on file system by default(/tmp/seahub_cache/). You can replace with Memcached or Redis.</p>
<h3 id="memcached">Memcached<a class="headerlink" href="#memcached" title="Permanent link">&para;</a></h3>
<div class="codehilite"><pre><span></span><code># on Debian/Ubuntu 18.04+
apt-get install memcached libmemcached-dev -y
pip3 install --timeout=3600 pylibmc django-pylibmc
systemctl enable --now memcached
</code></pre></div>
<p>Add the following configuration to <code>seahub_settings.py</code>.</p>
<div class="codehilite"><pre><span></span><code><span class="n">CACHES</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">&#39;default&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s">&#39;BACKEND&#39;</span><span class="p">:</span> <span class="s">&#39;django_pylibmc.memcached.PyLibMCCache&#39;</span><span class="p">,</span>
<span class="s">&#39;LOCATION&#39;</span><span class="p">:</span> <span class="s">&#39;127.0.0.1:11211&#39;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">}</span>
</code></pre></div>
<h3 id="redis">Redis<a class="headerlink" href="#redis" title="Permanent link">&para;</a></h3>
<p>Redis support is added in version 11.0.</p>
<p>Please refer to <a href="https://docs.djangoproject.com/en/4.2/topics/cache/#redis">Django's documentation about using Redis cache</a>.</p>
<h2 id="security-settings">Security settings<a class="headerlink" href="#security-settings" title="Permanent link">&para;</a></h2>
<div class="codehilite"><pre><span></span><code><span class="c1"># For security consideration, please set to match the host/domain of your site, e.g., ALLOWED_HOSTS = [&#39;.example.com&#39;].</span>
<span class="c1"># Please refer https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts for details.</span>
<span class="n">ALLOWED_HOSTS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;.myseafile.com&#39;</span><span class="p">]</span>
<span class="c1"># Whether to use a secure cookie for the CSRF cookie</span>
<span class="c1"># https://docs.djangoproject.com/en/3.2/ref/settings/#csrf-cookie-secure</span>
<span class="n">CSRF_COOKIE_SECURE</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># The value of the SameSite flag on the CSRF cookie</span>
<span class="c1"># https://docs.djangoproject.com/en/3.2/ref/settings/#csrf-cookie-samesite</span>
<span class="n">CSRF_COOKIE_SAMESITE</span> <span class="o">=</span> <span class="s1">&#39;Strict&#39;</span>
<span class="c1"># https://docs.djangoproject.com/en/3.2/ref/settings/#csrf-trusted-origins</span>
<span class="n">CSRF_TRUSTED_ORIGINS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;https://www.myseafile.com&#39;</span><span class="p">]</span>
</code></pre></div>
<h2 id="user-management-options">User management options<a class="headerlink" href="#user-management-options" title="Permanent link">&para;</a></h2>
<p>The following options affect user registration, password and session.</p>
<div class="codehilite"><pre><span></span><code><span class="c1"># Enalbe or disalbe registration on web. Default is `False`.</span>
<span class="n">ENABLE_SIGNUP</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># Activate or deactivate user when registration complete. Default is `True`.</span>
<span class="c1"># If set to `False`, new users need to be activated by admin in admin panel.</span>
<span class="n">ACTIVATE_AFTER_REGISTRATION</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># Whether to send email when a system admin adding a new member. Default is `True`.</span>
<span class="n">SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Whether to send email when a system admin resetting a user&#39;s password. Default is `True`.</span>
<span class="n">SEND_EMAIL_ON_RESETTING_USER_PASSWD</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Send system admin notify email when user registration is complete. Default is `False`.</span>
<span class="n">NOTIFY_ADMIN_AFTER_REGISTRATION</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Remember days for login. Default is 7</span>
<span class="n">LOGIN_REMEMBER_DAYS</span> <span class="o">=</span> <span class="mi">7</span>
<span class="c1"># Attempt limit before showing a captcha when login.</span>
<span class="n">LOGIN_ATTEMPT_LIMIT</span> <span class="o">=</span> <span class="mi">3</span>
<span class="c1"># deactivate user account when login attempts exceed limit</span>
<span class="c1"># Since version 5.1.2 or pro 5.1.3</span>
<span class="n">FREEZE_USER_ON_LOGIN_FAILED</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># mininum length for user&#39;s password</span>
<span class="n">USER_PASSWORD_MIN_LENGTH</span> <span class="o">=</span> <span class="mi">6</span>
<span class="c1"># LEVEL based on four types of input:</span>
<span class="c1"># num, upper letter, lower letter, other symbols</span>
<span class="c1"># &#39;3&#39; means password must have at least 3 types of the above.</span>
<span class="n">USER_PASSWORD_STRENGTH_LEVEL</span> <span class="o">=</span> <span class="mi">3</span>
<span class="c1"># default False, only check USER_PASSWORD_MIN_LENGTH</span>
<span class="c1"># when True, check password strength level, STRONG(or above) is allowed</span>
<span class="n">USER_STRONG_PASSWORD_REQUIRED</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># Force user to change password when admin add/reset a user.</span>
<span class="c1"># Added in 5.1.1, deafults to True.</span>
<span class="n">FORCE_PASSWORD_CHANGE</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Age of cookie, in seconds (default: 2 weeks).</span>
<span class="n">SESSION_COOKIE_AGE</span> <span class="o">=</span> <span class="mi">60</span> <span class="o">*</span> <span class="mi">60</span> <span class="o">*</span> <span class="mi">24</span> <span class="o">*</span> <span class="mi">7</span> <span class="o">*</span> <span class="mi">2</span>
<span class="c1"># Whether a user&#39;s session cookie expires when the Web browser is closed.</span>
<span class="n">SESSION_EXPIRE_AT_BROWSER_CLOSE</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># Whether to save the session data on every request. Default is `False`</span>
<span class="n">SESSION_SAVE_EVERY_REQUEST</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># Whether enable the feature &quot;published library&quot;. Default is `False`</span>
<span class="c1"># Since 6.1.0 CE</span>
<span class="n">ENABLE_WIKI</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># In old version, if you use Single Sign On, the password is not saved in Seafile.</span>
<span class="c1"># Users can&#39;t use WebDAV because Seafile can&#39;t check whether the password is correct.</span>
<span class="c1"># Since version 6.3.8, you can enable this option to let user&#39;s to specific a password for WebDAV login.</span>
<span class="c1"># Users login via SSO can use this password to login in WebDAV.</span>
<span class="c1"># Enable the feature. pycryptodome should be installed first.</span>
<span class="c1"># sudo pip install pycryptodome==3.12.0</span>
<span class="n">ENABLE_WEBDAV_SECRET</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">WEBDAV_SECRET_MIN_LENGTH</span> <span class="o">=</span> <span class="mi">8</span>
<span class="c1"># LEVEL for the password, based on four types of input:</span>
<span class="c1"># num, upper letter, lower letter, other symbols</span>
<span class="c1"># &#39;3&#39; means password must have at least 3 types of the above.</span>
<span class="n">WEBDAV_SECRET_STRENGTH_LEVEL</span> <span class="o">=</span> <span class="mi">1</span>
<span class="c1"># Since version 7.0.9, you can force a full user to log in with a two factor authentication.</span>
<span class="c1"># The prerequisite is that the administrator should &#39;enable two factor authentication&#39; in the &#39;System Admin -&gt; Settings&#39; page.</span>
<span class="c1"># Then you can add the following configuration information to the configuration file.</span>
<span class="n">ENABLE_FORCE_2FA_TO_ALL_USERS</span> <span class="o">=</span> <span class="kc">True</span>
</code></pre></div>
<h2 id="library-snapshot-label-feature">Library snapshot label feature<a class="headerlink" href="#library-snapshot-label-feature" title="Permanent link">&para;</a></h2>
<div class="codehilite"><pre><span></span><code><span class="c1"># Turn on this option to let users to add a label to a library snapshot. Default is `False`</span>
<span class="n">ENABLE_REPO_SNAPSHOT_LABEL</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">False</span>
</code></pre></div>
<h2 id="library-options">Library options<a class="headerlink" href="#library-options" title="Permanent link">&para;</a></h2>
<p>Options for libraries:</p>
<div class="codehilite"><pre><span></span><code><span class="c1"># if enable create encrypted library</span>
<span class="n">ENABLE_ENCRYPTED_LIBRARY</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># version for encrypted library</span>
<span class="c1"># should only be `2` or `4`.</span>
<span class="c1"># version 3 is insecure (using AES128 encryption) so it&#39;s not recommended any more.</span>
<span class="n">ENCRYPTED_LIBRARY_VERSION</span> <span class="o">=</span> <span class="mi">2</span>
<span class="c1"># mininum length for password of encrypted library</span>
<span class="n">REPO_PASSWORD_MIN_LENGTH</span> <span class="o">=</span> <span class="mi">8</span>
<span class="c1"># force use password when generate a share/upload link (since version 8.0.9)</span>
<span class="n">SHARE_LINK_FORCE_USE_PASSWORD</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># mininum length for password for share link (since version 4.4)</span>
<span class="n">SHARE_LINK_PASSWORD_MIN_LENGTH</span> <span class="o">=</span> <span class="mi">8</span>
<span class="c1"># LEVEL for the password of a share/upload link</span>
<span class="c1"># based on four types of input:</span>
<span class="c1"># num, upper letter, lower letter, other symbols</span>
<span class="c1"># &#39;3&#39; means password must have at least 3 types of the above. (since version 8.0.9)</span>
<span class="n">SHARE_LINK_PASSWORD_STRENGTH_LEVEL</span> <span class="o">=</span> <span class="mi">3</span>
<span class="c1"># Default expire days for share link (since version 6.3.8)</span>
<span class="c1"># Once this value is configured, the user can no longer generate an share link with no expiration time.</span>
<span class="c1"># If the expiration value is not set when the share link is generated, the value configured here will be used.</span>
<span class="n">SHARE_LINK_EXPIRE_DAYS_DEFAULT</span> <span class="o">=</span> <span class="mi">5</span>
<span class="c1"># minimum expire days for share link (since version 6.3.6)</span>
<span class="c1"># SHARE_LINK_EXPIRE_DAYS_MIN should be less than SHARE_LINK_EXPIRE_DAYS_DEFAULT (If the latter is set).</span>
<span class="n">SHARE_LINK_EXPIRE_DAYS_MIN</span> <span class="o">=</span> <span class="mi">3</span> <span class="c1"># default is 0, no limit.</span>
<span class="c1"># maximum expire days for share link (since version 6.3.6)</span>
<span class="c1"># SHARE_LINK_EXPIRE_DAYS_MIN should be greater than SHARE_LINK_EXPIRE_DAYS_DEFAULT (If the latter is set).</span>
<span class="n">SHARE_LINK_EXPIRE_DAYS_MAX</span> <span class="o">=</span> <span class="mi">8</span> <span class="c1"># default is 0, no limit.</span>
<span class="c1"># Default expire days for upload link (since version 7.1.6)</span>
<span class="c1"># Once this value is configured, the user can no longer generate an upload link with no expiration time.</span>
<span class="c1"># If the expiration value is not set when the upload link is generated, the value configured here will be used.</span>
<span class="n">UPLOAD_LINK_EXPIRE_DAYS_DEFAULT</span> <span class="o">=</span> <span class="mi">5</span>
<span class="c1"># minimum expire days for upload link (since version 7.1.6)</span>
<span class="c1"># UPLOAD_LINK_EXPIRE_DAYS_MIN should be less than UPLOAD_LINK_EXPIRE_DAYS_DEFAULT (If the latter is set).</span>
<span class="n">UPLOAD_LINK_EXPIRE_DAYS_MIN</span> <span class="o">=</span> <span class="mi">3</span> <span class="c1"># default is 0, no limit.</span>
<span class="c1"># maximum expire days for upload link (since version 7.1.6)</span>
<span class="c1"># UPLOAD_LINK_EXPIRE_DAYS_MAX should be greater than UPLOAD_LINK_EXPIRE_DAYS_DEFAULT (If the latter is set).</span>
<span class="n">UPLOAD_LINK_EXPIRE_DAYS_MAX</span> <span class="o">=</span> <span class="mi">8</span> <span class="c1"># default is 0, no limit.</span>
<span class="c1"># force user login when view file/folder share link (since version 6.3.6)</span>
<span class="n">SHARE_LINK_LOGIN_REQUIRED</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># enable water mark when view(not edit) file in web browser (since version 6.3.6)</span>
<span class="n">ENABLE_WATERMARK</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Disable sync with any folder. Default is `False`</span>
<span class="c1"># NOTE: since version 4.2.4</span>
<span class="n">DISABLE_SYNC_WITH_ANY_FOLDER</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Enable or disable library history setting</span>
<span class="n">ENABLE_REPO_HISTORY_SETTING</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Enable or disable user share library to any group</span>
<span class="c1"># Since version 6.2.0</span>
<span class="n">ENABLE_SHARE_TO_ALL_GROUPS</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Enable or disable user to clean trash (default is True)</span>
<span class="c1"># Since version 6.3.6</span>
<span class="n">ENABLE_USER_CLEAN_TRASH</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Add a report abuse button on download links. (since version 7.1.0)</span>
<span class="c1"># Users can report abuse on the share link page, fill in the report type, contact information, and description.</span>
<span class="c1"># Default is false.</span>
<span class="n">ENABLE_SHARE_LINK_REPORT_ABUSE</span> <span class="o">=</span> <span class="kc">True</span>
</code></pre></div>
<p>Options for online file preview:</p>
<div class="codehilite"><pre><span></span><code><span class="c1"># Online preview maximum file size, defaults to 30M.</span>
<span class="n">FILE_PREVIEW_MAX_SIZE</span> <span class="o">=</span> <span class="mi">30</span> <span class="o">*</span> <span class="mi">1024</span> <span class="o">*</span> <span class="mi">1024</span>
<span class="c1"># Extensions of previewed text files.</span>
<span class="c1"># NOTE: since version 6.1.1</span>
<span class="n">TEXT_PREVIEW_EXT</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;ac, am, bat, c, cc, cmake, cpp, cs, css, diff, el, h, html,</span>
<span class="s2">htm, java, js, json, less, make, org, php, pl, properties, py, rb,</span>
<span class="s2">scala, script, sh, sql, txt, text, tex, vi, vim, xhtml, xml, log, csv,</span>
<span class="s2">groovy, rst, patch, go&quot;&quot;&quot;</span>
<span class="c1"># Seafile only generates thumbnails for images smaller than the following size.</span>
<span class="c1"># Since version 6.3.8 pro, suport the psd online preview.</span>
<span class="n">THUMBNAIL_IMAGE_SIZE_LIMIT</span> <span class="o">=</span> <span class="mi">30</span> <span class="c1"># MB</span>
<span class="c1"># Enable or disable thumbnail for video. ffmpeg and moviepy should be installed first.</span>
<span class="c1"># For details, please refer to https://manual.seafile.com/deploy/video_thumbnails.html</span>
<span class="c1"># NOTE: this option is deprecated in version 7.1</span>
<span class="n">ENABLE_VIDEO_THUMBNAIL</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># Use the frame at 5 second as thumbnail</span>
<span class="c1"># NOTE: this option is deprecated in version 7.1</span>
<span class="n">THUMBNAIL_VIDEO_FRAME_TIME</span> <span class="o">=</span> <span class="mi">5</span>
<span class="c1"># Absolute filesystem path to the directory that will hold thumbnail files.</span>
<span class="n">THUMBNAIL_ROOT</span> <span class="o">=</span> <span class="s1">&#39;/haiwen/seahub-data/thumbnail/thumb/&#39;</span>
<span class="c1"># Default size for picture preview. Enlarge this size can improve the preview quality.</span>
<span class="c1"># NOTE: since version 6.1.1</span>
<span class="n">THUMBNAIL_SIZE_FOR_ORIGINAL</span> <span class="o">=</span> <span class="mi">1024</span>
</code></pre></div>
<h2 id="cloud-mode">Cloud Mode<a class="headerlink" href="#cloud-mode" title="Permanent link">&para;</a></h2>
<p>You should enable cloud mode if you use Seafile with an unknown user base. It disables the organization tab in Seahub's website to ensure that users can't access the user list. Cloud mode provides some nice features like sharing content with unregistered users and sending invitations to them. Therefore you also want to enable user registration. Through the global address book (since version 4.2.3) you can do a search for every user account. So you probably want to disable it.</p>
<div class="codehilite"><pre><span></span><code><span class="c1"># Enable cloude mode and hide `Organization` tab.</span>
<span class="n">CLOUD_MODE</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Disable global address book</span>
<span class="n">ENABLE_GLOBAL_ADDRESSBOOK</span> <span class="o">=</span> <span class="kc">False</span>
</code></pre></div>
<h2 id="single-sign-on">Single Sign On<a class="headerlink" href="#single-sign-on" title="Permanent link">&para;</a></h2>
<div class="codehilite"><pre><span></span><code><span class="c1"># Enable authentication with ADFS</span>
<span class="c1"># Default is False</span>
<span class="c1"># Since 6.0.9</span>
<span class="n">ENABLE_ADFS_LOGIN</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Force user login through ADFS instead of email and password</span>
<span class="c1"># Default is False</span>
<span class="c1"># Since 11.0.7</span>
<span class="n">DISABLE_ADFS_USER_PWD_LOGIN</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Enable authentication wit Kerberos</span>
<span class="c1"># Default is False</span>
<span class="n">ENABLE_KRB5_LOGIN</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Enable authentication with Shibboleth</span>
<span class="c1"># Default is False</span>
<span class="n">ENABLE_SHIBBOLETH_LOGIN</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Enable client to open an external browser for single sign on</span>
<span class="c1"># When it is false, the old buitin browser is opened for single sign on</span>
<span class="c1"># When it is true, the default browser of the operation system is opened</span>
<span class="c1"># The benefit of using system browser is that it can support hardware 2FA</span>
<span class="c1"># Since 11.0.0, and sync client 9.0.5, drive client 3.0.8</span>
<span class="n">CLIENT_SSO_VIA_LOCAL_BROWSER</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># default is False</span>
<span class="n">CLIENT_SSO_UUID_EXPIRATION</span> <span class="o">=</span> <span class="mi">5</span> <span class="o">*</span> <span class="mi">60</span> <span class="c1"># in seconds</span>
</code></pre></div>
<h2 id="other-options">Other options<a class="headerlink" href="#other-options" title="Permanent link">&para;</a></h2>
<div class="codehilite"><pre><span></span><code><span class="c1"># This is outside URL for Seahub(Seafile Web). </span>
<span class="c1"># The domain part (i.e., www.example.com) will be used in generating share links and download/upload file via web.</span>
<span class="c1"># Note: Outside URL means &quot;if you use Nginx, it should be the Nginx&#39;s address&quot;</span>
<span class="c1"># Note: SERVICE_URL is moved to seahub_settings.py since 9.0.0</span>
<span class="n">SERVICE_URL</span> <span class="o">=</span> <span class="s1">&#39;http://www.example.com:8000&#39;</span>
<span class="c1"># Disable settings via Web interface in system admin-&gt;settings</span>
<span class="c1"># Default is True</span>
<span class="c1"># Since 5.1.3</span>
<span class="n">ENABLE_SETTINGS_VIA_WEB</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># Choices can be found here:</span>
<span class="c1"># http://en.wikipedia.org/wiki/List_of_tz_zones_by_name</span>
<span class="c1"># although not all choices may be available on all operating systems.</span>
<span class="c1"># If running in a Windows environment this must be set to the same as your</span>
<span class="c1"># system time zone.</span>
<span class="n">TIME_ZONE</span> <span class="o">=</span> <span class="s1">&#39;UTC&#39;</span>
<span class="c1"># Language code for this installation. All choices can be found here:</span>
<span class="c1"># http://www.i18nguy.com/unicode/language-identifiers.html</span>
<span class="c1"># Default language for sending emails.</span>
<span class="n">LANGUAGE_CODE</span> <span class="o">=</span> <span class="s1">&#39;en&#39;</span>
<span class="c1"># Custom language code choice.</span>
<span class="n">LANGUAGES</span> <span class="o">=</span> <span class="p">(</span>
<span class="p">(</span><span class="s1">&#39;en&#39;</span><span class="p">,</span> <span class="s1">&#39;English&#39;</span><span class="p">),</span>
<span class="p">(</span><span class="s1">&#39;zh-cn&#39;</span><span class="p">,</span> <span class="s1">&#39;简体中文&#39;</span><span class="p">),</span>
<span class="p">(</span><span class="s1">&#39;zh-tw&#39;</span><span class="p">,</span> <span class="s1">&#39;繁體中文&#39;</span><span class="p">),</span>
<span class="p">)</span>
<span class="c1"># Set this to your website/company&#39;s name. This is contained in email notifications and welcome message when user login for the first time.</span>
<span class="n">SITE_NAME</span> <span class="o">=</span> <span class="s1">&#39;Seafile&#39;</span>
<span class="c1"># Browser tab&#39;s title</span>
<span class="n">SITE_TITLE</span> <span class="o">=</span> <span class="s1">&#39;Private Seafile&#39;</span>
<span class="c1"># If you don&#39;t want to run seahub website on your site&#39;s root path, set this option to your preferred path.</span>
<span class="c1"># e.g. setting it to &#39;/seahub/&#39; would run seahub on http://example.com/seahub/.</span>
<span class="n">SITE_ROOT</span> <span class="o">=</span> <span class="s1">&#39;/&#39;</span>
<span class="c1"># Max number of files when user upload file/folder.</span>
<span class="c1"># Since version 6.0.4</span>
<span class="n">MAX_NUMBER_OF_FILES_FOR_FILEUPLOAD</span> <span class="o">=</span> <span class="mi">500</span>
<span class="c1"># Control the language that send email. Default to user&#39;s current language.</span>
<span class="c1"># Since version 6.1.1</span>
<span class="n">SHARE_LINK_EMAIL_LANGUAGE</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
<span class="c1"># Interval for browser requests unread notifications</span>
<span class="c1"># Since PRO 6.1.4 or CE 6.1.2</span>
<span class="n">UNREAD_NOTIFICATIONS_REQUEST_INTERVAL</span> <span class="o">=</span> <span class="mi">3</span> <span class="o">*</span> <span class="mi">60</span> <span class="c1"># seconds</span>
<span class="c1"># Whether to allow user to delete account, change login password or update basic user</span>
<span class="c1"># info on profile page.</span>
<span class="c1"># Since PRO 6.3.10</span>
<span class="n">ENABLE_DELETE_ACCOUNT</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">ENABLE_UPDATE_USER_INFO</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">ENABLE_CHANGE_PASSWORD</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># Get web api auth token on profile page.</span>
<span class="n">ENABLE_GET_AUTH_TOKEN_BY_SESSION</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Since 8.0.6 CE/PRO version.</span>
<span class="c1"># Url redirected to after user logout Seafile.</span>
<span class="c1"># Usually configured as Single Logout url.</span>
<span class="n">LOGOUT_REDIRECT_URL</span> <span class="o">=</span> <span class="s1">&#39;http</span><span class="si">{s}</span><span class="s1">://www.example-url.com&#39;</span>
<span class="c1"># Enable system admin add T&amp;C, all users need to accept terms before using. Defaults to `False`.</span>
<span class="c1"># Since version 6.0</span>
<span class="n">ENABLE_TERMS_AND_CONDITIONS</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Enable two factor authentication for accounts. Defaults to `False`.</span>
<span class="c1"># Since version 6.0</span>
<span class="n">ENABLE_TWO_FACTOR_AUTH</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Enable user select a template when he/she creates library.</span>
<span class="c1"># When user select a template, Seafile will create folders releated to the pattern automaticly.</span>
<span class="c1"># Since version 6.0</span>
<span class="n">LIBRARY_TEMPLATES</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;Technology&#39;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;/Develop/Python&#39;</span><span class="p">,</span> <span class="s1">&#39;/Test&#39;</span><span class="p">],</span>
<span class="s1">&#39;Finance&#39;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;/Current assets&#39;</span><span class="p">,</span> <span class="s1">&#39;/Fixed assets/Computer&#39;</span><span class="p">]</span>
<span class="p">}</span>
<span class="c1"># Enable a user to change password in &#39;settings&#39; page. Default to `True`</span>
<span class="c1"># Since version 6.2.11</span>
<span class="n">ENABLE_CHANGE_PASSWORD</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># If show contact email when search user.</span>
<span class="n">ENABLE_SHOW_CONTACT_EMAIL_WHEN_SEARCH_USER</span> <span class="o">=</span> <span class="kc">True</span>
</code></pre></div>
<h2 id="pro-edition-only-options">Pro edition only options<a class="headerlink" href="#pro-edition-only-options" title="Permanent link">&para;</a></h2>
<div class="codehilite"><pre><span></span><code><span class="c1"># Whether to show the used traffic in user&#39;s profile popup dialog. Default is True</span>
<span class="n">SHOW_TRAFFIC</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Allow administrator to view user&#39;s file in UNENCRYPTED libraries</span>
<span class="c1"># through Libraries page in System Admin. Default is False.</span>
<span class="n">ENABLE_SYS_ADMIN_VIEW_REPO</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># For un-login users, providing an email before downloading or uploading on shared link page.</span>
<span class="c1"># Since version 5.1.4</span>
<span class="n">ENABLE_SHARE_LINK_AUDIT</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Check virus after upload files to shared upload links. Defaults to `False`.</span>
<span class="c1"># Since version 6.0</span>
<span class="n">ENABLE_UPLOAD_LINK_VIRUS_CHECK</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># Send email to these email addresses when a virus is detected.</span>
<span class="c1"># This list can be any valid email address, not necessarily the emails of Seafile user.</span>
<span class="c1"># Since version 6.0.8</span>
<span class="n">VIRUS_SCAN_NOTIFY_LIST</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;user_a@seafile.com&#39;</span><span class="p">,</span> <span class="s1">&#39;user_b@seafile.com&#39;</span><span class="p">]</span>
</code></pre></div>
<h2 id="restful-api">RESTful API<a class="headerlink" href="#restful-api" title="Permanent link">&para;</a></h2>
<div class="codehilite"><pre><span></span><code><span class="c1"># API throttling related settings. Enlarger the rates if you got 429 response code during API calls.</span>
<span class="n">REST_FRAMEWORK</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="err">{</span>
<span class="w"> </span><span class="s1">&#39;DEFAULT_THROTTLE_RATES&#39;</span><span class="o">:</span><span class="w"> </span><span class="err">{</span>
<span class="w"> </span><span class="s1">&#39;ping&#39;</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;600/minute&#39;</span><span class="p">,</span>
<span class="w"> </span><span class="s1">&#39;anon&#39;</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;5/minute&#39;</span><span class="p">,</span>
<span class="w"> </span><span class="s1">&#39;user&#39;</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;300/minute&#39;</span><span class="p">,</span>
<span class="w"> </span><span class="err">}</span><span class="p">,</span>
<span class="w"> </span><span class="s1">&#39;UNICODE_JSON&#39;</span><span class="o">:</span><span class="w"> </span><span class="no">False</span><span class="p">,</span>
<span class="err">}</span>
<span class="c1"># Throtting whitelist used to disable throttle for certain IPs.</span>
<span class="c1"># e.g. REST_FRAMEWORK_THROTTING_WHITELIST = [&#39;127.0.0.1&#39;, &#39;192.168.1.1&#39;]</span>
<span class="c1"># Please make sure `REMOTE_ADDR` header is configured in Nginx conf according to https://manual.seafile.com/deploy/deploy_with_nginx.html.</span>
<span class="n">REST_FRAMEWORK_THROTTING_WHITELIST</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="err">[]</span>
</code></pre></div>
<h2 id="seahub-custom-functions">Seahub Custom Functions<a class="headerlink" href="#seahub-custom-functions" title="Permanent link">&para;</a></h2>
<p>Since version 6.2, you can define a custom function to modify the result of user search function.</p>
<p>For example, if you want to limit user only search users in the same institution, you can define <code>custom_search_user</code> function in <code>{seafile install path}/conf/seahub_custom_functions/__init__.py</code></p>
<p>Code example:</p>
<div class="codehilite"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
<span class="n">current_path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="vm">__file__</span><span class="p">))</span>
<span class="n">seahub_dir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">current_path</span><span class="p">,</span><span class="w"> \</span>
<span class="w"> </span><span class="s1">&#39;../../seafile-server-latest/seahub/seahub&#39;</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">seahub_dir</span><span class="p">)</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">seahub.profile.models</span><span class="w"> </span><span class="kn">import</span><span class="w"> </span><span class="n">Profile</span>
<span class="k">def</span><span class="w"> </span><span class="nf">custom_search_user</span><span class="p">(</span><span class="n">request</span><span class="p">,</span><span class="w"> </span><span class="n">emails</span><span class="p">):</span>
<span class="w"> </span><span class="n">institution_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">&#39;&#39;</span>
<span class="w"> </span><span class="n">username</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">username</span>
<span class="w"> </span><span class="n">profile</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Profile</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_profile_by_user</span><span class="p">(</span><span class="n">username</span><span class="p">)</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">profile</span><span class="p">:</span>
<span class="w"> </span><span class="n">institution_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">profile</span><span class="o">.</span><span class="n">institution</span>
<span class="w"> </span><span class="n">inst_users</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">user</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">p</span><span class="w"> </span><span class="ow">in</span>
<span class="w"> </span><span class="n">Profile</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">institution</span><span class="o">=</span><span class="n">institution_name</span><span class="p">)]</span>
<span class="w"> </span><span class="n">filtered_emails</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[]</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">email</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">emails</span><span class="p">:</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">email</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">inst_users</span><span class="p">:</span>
<span class="w"> </span><span class="n">filtered_emails</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">email</span><span class="p">)</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">filtered_emails</span>
</code></pre></div>
<blockquote>
<p><strong>NOTE</strong>, you should NOT change the name of <code>custom_search_user</code> and <code>seahub_custom_functions/__init__.py</code></p>
</blockquote>
<p>Since version 6.2.5 pro, if you enable the <strong>ENABLE_SHARE_TO_ALL_GROUPS</strong> feather on sysadmin settings page, you can also define a custom function to return the groups a user can share library to.</p>
<p>For example, if you want to let a user to share library to both its groups and the groups of user <code>test@test.com</code>, you can define a <code>custom_get_groups</code> function in <code>{seafile install path}/conf/seahub_custom_functions/__init__.py</code></p>
<p>Code example:</p>
<div class="codehilite"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
<span class="n">current_path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="vm">__file__</span><span class="p">))</span>
<span class="n">seaserv_dir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">current_path</span><span class="p">,</span><span class="w"> \</span>
<span class="w"> </span><span class="s1">&#39;../../seafile-server-latest/seafile/lib64/python2.7/site-packages&#39;</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">seaserv_dir</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">custom_get_groups</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="w"> </span><span class="kn">from</span><span class="w"> </span><span class="nn">seaserv</span><span class="w"> </span><span class="kn">import</span><span class="w"> </span><span class="n">ccnet_api</span>
<span class="w"> </span><span class="n">groups</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[]</span>
<span class="w"> </span><span class="n">username</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">username</span>
<span class="w"> </span><span class="c1"># for current user</span>
<span class="w"> </span><span class="n">groups</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">ccnet_api</span><span class="o">.</span><span class="n">get_groups</span><span class="p">(</span><span class="n">username</span><span class="p">)</span>
<span class="w"> </span><span class="c1"># for &#39;test@test.com&#39; user</span>
<span class="w"> </span><span class="n">groups</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">ccnet_api</span><span class="o">.</span><span class="n">get_groups</span><span class="p">(</span><span class="s1">&#39;test@test.com&#39;</span><span class="p">)</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">groups</span>
</code></pre></div>
<blockquote>
<p><strong>NOTE</strong>, you should NOT change the name of <code>custom_get_groups</code> and <code>seahub_custom_functions/__init__.py</code></p>
</blockquote>
<h2 id="note">Note<a class="headerlink" href="#note" title="Permanent link">&para;</a></h2>
<ul>
<li>You need to restart seahub so that your changes take effect.</li>
<li>If your changes don't take effect, You may need to delete 'seahub_setting.pyc'. (A cache file)</li>
</ul>
<div class="codehilite"><pre><span></span><code>./seahub.sh<span class="w"> </span>restart
</code></pre></div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright &copy; 2023 Seafile Ltd.
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a href="https://github.com/haiwen/seafile-admin-docs/" target="_blank" rel="noopener" title="github.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "search": "../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../assets/javascripts/bundle.525ec568.min.js"></script>
</body>
</html>