seafile-admin-docs/13.0/setup_binary/installation/index.html

6338 lines
119 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/13.0/setup_binary/installation/">
<link rel="prev" href="../outline/">
<link rel="next" href="../https_with_nginx/">
<link rel="icon" href="../../media/favicon.ico">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.0">
<title>Installation - Seafile Admin Manual</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.618322db.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.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="indigo" 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="#installation-of-seafile-server-professional-edition" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<div data-md-color-scheme="default" data-md-component="outdated" hidden>
</div>
<header class="md-header" 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">
Installation
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<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">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
</a>
<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>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</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 7.1.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 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
haiwen/seafile-admin-docs
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../.." class="md-tabs__link">
Introduction
</a>
</li>
<li class="md-tabs__item">
<a href="../../setup/overview/" class="md-tabs__link">
Setup
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../outline/" class="md-tabs__link">
Setup (binary)
</a>
</li>
<li class="md-tabs__item">
<a href="../../extension/setup_seadoc/" class="md-tabs__link">
Extensions
</a>
</li>
<li class="md-tabs__item">
<a href="../../config/ldap_in_ce/" class="md-tabs__link">
Configuration
</a>
</li>
<li class="md-tabs__item">
<a href="../../administration/" class="md-tabs__link">
Administration
</a>
</li>
<li class="md-tabs__item">
<a href="../../upgrade/upgrade/" class="md-tabs__link">
Upgrade
</a>
</li>
<li class="md-tabs__item">
<a href="../../develop/" class="md-tabs__link">
Developing
</a>
</li>
<li class="md-tabs__item">
<a href="../../changelog/server-changelog/" class="md-tabs__link">
ChangeLog
</a>
</li>
</ul>
</div>
</nav>
<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 md-nav--lifted" 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 7.1.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 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></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">
Introduction
</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>
Introduction
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../introduction/file_permission_management/" class="md-nav__link">
<span class="md-ellipsis">
File permission management
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../introduction/seafile_professional_sdition_software_license_agreement/" class="md-nav__link">
<span class="md-ellipsis">
Seafile Pro edition license
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../introduction/roadmap/" class="md-nav__link">
<span class="md-ellipsis">
Roadmap
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../introduction/contribution/" class="md-nav__link">
<span class="md-ellipsis">
Contribution
</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">
Setup
</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>
Setup
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../setup/overview/" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/system_requirements/" class="md-nav__link">
<span class="md-ellipsis">
System requirements
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/architecture/" class="md-nav__link">
<span class="md-ellipsis">
Supported architecture
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/caddy/" class="md-nav__link">
<span class="md-ellipsis">
HTTPS and Caddy
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5" >
<label class="md-nav__link" for="__nav_2_5" id="__nav_2_5_label" tabindex="0">
<span class="md-ellipsis">
Single node installation
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_5">
<span class="md-nav__icon md-icon"></span>
Single node installation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../setup/setup_ce_by_docker/" class="md-nav__link">
<span class="md-ellipsis">
Setup community edition
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/setup_pro_by_docker/" class="md-nav__link">
<span class="md-ellipsis">
Setup pro edition
</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_6" >
<label class="md-nav__link" for="__nav_2_6" id="__nav_2_6_label" tabindex="0">
<span class="md-ellipsis">
Advanced topics
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_6">
<span class="md-nav__icon md-icon"></span>
Advanced topics
</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_2_6_1" >
<label class="md-nav__link" for="__nav_2_6_1" id="__nav_2_6_1_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="3" aria-labelledby="__nav_2_6_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_6_1">
<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="../../setup/setup_with_s3/" class="md-nav__link">
<span class="md-ellipsis">
S3 Backend
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/setup_with_ceph/" class="md-nav__link">
<span class="md-ellipsis">
Ceph Backend
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/setup_with_swift/" class="md-nav__link">
<span class="md-ellipsis">
OpenStack Swift Backend
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/setup_with_multiple_storage_backends/" class="md-nav__link">
<span class="md-ellipsis">
Multiple Storage Backends
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/migrate_backends_data/" class="md-nav__link">
<span class="md-ellipsis">
Data migration
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../setup/use_seasearch/" class="md-nav__link">
<span class="md-ellipsis">
Use SeaSearch as search engine (Pro)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/seafile_docker_autostart/" class="md-nav__link">
<span class="md-ellipsis">
Seafile Docker autostart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/setup_with_an_existing_mysql_server/" class="md-nav__link">
<span class="md-ellipsis">
Deploy with an existing MySQL server
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/use_other_reverse_proxy/" class="md-nav__link">
<span class="md-ellipsis">
Use other reverse proxy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/run_seafile_as_non_root_user_inside_docker/" class="md-nav__link">
<span class="md-ellipsis">
Run Seafile as non root user inside docker
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../setup/cluster_deploy_with_docker/" class="md-nav__link">
<span class="md-ellipsis">
Cluster installation (Pro)
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_8" >
<label class="md-nav__link" for="__nav_2_8" id="__nav_2_8_label" tabindex="0">
<span class="md-ellipsis">
Setup with Kubernetes (K8S)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_8">
<span class="md-nav__icon md-icon"></span>
Setup with Kubernetes (K8S)
</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_2_8_1" >
<label class="md-nav__link" for="__nav_2_8_1" id="__nav_2_8_1_label" tabindex="0">
<span class="md-ellipsis">
With Helm
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_8_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_8_1">
<span class="md-nav__icon md-icon"></span>
With Helm
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../setup/helm_chart_single_node/" class="md-nav__link">
<span class="md-ellipsis">
Single node
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/helm_chart_cluster/" class="md-nav__link">
<span class="md-ellipsis">
Cluster (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_2_8_2" >
<label class="md-nav__link" for="__nav_2_8_2" id="__nav_2_8_2_label" tabindex="0">
<span class="md-ellipsis">
By K8S resource files
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_8_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_8_2">
<span class="md-nav__icon md-icon"></span>
By K8S resource files
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../setup/k8s_single_node/" class="md-nav__link">
<span class="md-ellipsis">
Single node
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../setup/cluster_deploy_with_k8s/" class="md-nav__link">
<span class="md-ellipsis">
Cluster (Pro)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../setup/k8s_advanced_management/" class="md-nav__link">
<span class="md-ellipsis">
Seafile K8S advanced management
</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_9" >
<label class="md-nav__link" for="__nav_2_9" id="__nav_2_9_label" tabindex="0">
<span class="md-ellipsis">
Migration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_9">
<span class="md-nav__icon md-icon"></span>
Migration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../setup/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="../../setup/migrate_non_docker_to_docker/" class="md-nav__link">
<span class="md-ellipsis">
Migrate from non-docker deployment
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
<span class="md-ellipsis">
Setup (binary)
</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="true">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Setup (binary)
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../outline/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</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">
Installation
</span>
<span class="md-status md-status--new" title="Work in progress">
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Installation
</span>
<span class="md-status md-status--new" title="Work in progress">
</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="#requirements" class="md-nav__link">
<span class="md-ellipsis">
Requirements
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#setup" class="md-nav__link">
<span class="md-ellipsis">
Setup
</span>
</a>
<nav class="md-nav" aria-label="Setup">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#installing-and-preparing-the-sql-database" class="md-nav__link">
<span class="md-ellipsis">
Installing and preparing the SQL database
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#installing-prerequisites" class="md-nav__link">
<span class="md-ellipsis">
Installing prerequisites
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#creating-user-seafile" class="md-nav__link">
<span class="md-ellipsis">
Creating user seafile
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#placing-the-seafile-pe-license" class="md-nav__link">
<span class="md-ellipsis">
Placing the Seafile PE license
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#downloading-the-install-package" class="md-nav__link">
<span class="md-ellipsis">
Downloading the install package
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#uncompressing-the-package" class="md-nav__link">
<span class="md-ellipsis">
Uncompressing the package
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#setting-up-seafile-pro-databases" class="md-nav__link">
<span class="md-ellipsis">
Setting up Seafile Pro databases
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#create-the-env-file-in-conf-directory" class="md-nav__link">
<span class="md-ellipsis">
Create the .env file in conf/ directory
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#setup-memory-cache" class="md-nav__link">
<span class="md-ellipsis">
Setup Memory Cache
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#enabling-httphttps-optional-but-recommended" class="md-nav__link">
<span class="md-ellipsis">
Enabling HTTP/HTTPS (Optional but Recommended)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#starting-seafile-server" class="md-nav__link">
<span class="md-ellipsis">
Starting Seafile Server
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#enabling-full-text-search" class="md-nav__link">
<span class="md-ellipsis">
Enabling full text search
</span>
</a>
<nav class="md-nav" aria-label="Enabling full text search">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#deploying-elasticsearch" class="md-nav__link">
<span class="md-ellipsis">
Deploying ElasticSearch
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#modifying-seafevents" class="md-nav__link">
<span class="md-ellipsis">
Modifying seafevents
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../https_with_nginx/" class="md-nav__link">
<span class="md-ellipsis">
HTTPS with Nginx
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cluster_deployment/" class="md-nav__link">
<span class="md-ellipsis">
Cluster Deployment
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--section 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="">
<span class="md-ellipsis">
Other deployment notes
</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>
Other deployment notes
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../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="../using_logrotate/" class="md-nav__link">
<span class="md-ellipsis">
Logrotate
</span>
</a>
</li>
</ul>
</nav>
</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">
Extensions
</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>
Extensions
</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_4_1" >
<label class="md-nav__link" for="__nav_4_1" id="__nav_4_1_label" tabindex="0">
<span class="md-ellipsis">
Extra Seafile components
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_1">
<span class="md-nav__icon md-icon"></span>
Extra Seafile components
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../extension/setup_seadoc/" class="md-nav__link">
<span class="md-ellipsis">
SeaDoc Integration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../extension/notification-server/" class="md-nav__link">
<span class="md-ellipsis">
Notification Server
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../extension/metadata-server/" class="md-nav__link">
<span class="md-ellipsis">
Metadata Server
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../extension/thumbnail-server/" class="md-nav__link">
<span class="md-ellipsis">
Thumbnail 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">
<a href="../../extension/seafile-ai/" class="md-nav__link">
<span class="md-ellipsis">
Seafile AI extension
</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_2" >
<label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_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_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2">
<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="../../extension/libreoffice_online/" class="md-nav__link">
<span class="md-ellipsis">
Collabora Online Integration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../extension/only_office/" class="md-nav__link">
<span class="md-ellipsis">
OnlyOffice Integration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../extension/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 md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0">
<span class="md-ellipsis">
Cluster (Pro)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Cluster (Pro)
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../extension/distributed_indexing/" class="md-nav__link">
<span class="md-ellipsis">
Distributed indexing
</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_4" >
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_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_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<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="../../extension/virus_scan/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../extension/virus_scan_with_clamav/" class="md-nav__link">
<span class="md-ellipsis">
Virus scan with ClamAV
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../extension/virus_scan_with_kav4fs/" class="md-nav__link">
<span class="md-ellipsis">
Virus scan with Kav4fs
</span>
<span class="md-status md-status--new" title="Work in progress">
</span>
</a>
</li>
</ul>
</nav>
</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">
Configuration
</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>
Configuration
</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">
Authentication & Users
</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>
Authentication & Users
</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_1" >
<label class="md-nav__link" for="__nav_5_1_1" id="__nav_5_1_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="3" aria-labelledby="__nav_5_1_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_1_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="../../config/ldap_in_ce/" class="md-nav__link">
<span class="md-ellipsis">
LDAP Integration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/ldap_in_pro/" class="md-nav__link">
<span class="md-ellipsis">
LDAP Integration (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_1_2" >
<label class="md-nav__link" for="__nav_5_1_2" id="__nav_5_1_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="3" aria-labelledby="__nav_5_1_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_1_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="../../config/single_sign_on/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/oauth/" class="md-nav__link">
<span class="md-ellipsis">
OAuth Authentication
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/remote_user/" class="md-nav__link">
<span class="md-ellipsis">
Remote User Authentication
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/shibboleth_authentication/" class="md-nav__link">
<span class="md-ellipsis">
Shibboleth Authentication
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/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="../../config/saml2/" class="md-nav__link">
<span class="md-ellipsis">
SAML 2.0 (Pro)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/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_1_3" >
<label class="md-nav__link" for="__nav_5_1_3" id="__nav_5_1_3_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="3" aria-labelledby="__nav_5_1_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_1_3">
<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="../../config/multi_institutions/" class="md-nav__link">
<span class="md-ellipsis">
Multi-Institutions Support
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/roles_permissions/" class="md-nav__link">
<span class="md-ellipsis">
Roles and Permissions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/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="../../config/multi_tenancy/" class="md-nav__link">
<span class="md-ellipsis">
Multi-Tenancy Support
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../config/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="../../config/ocm/" class="md-nav__link">
<span class="md-ellipsis">
Open Cloud Mesh
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_4" >
<label class="md-nav__link" for="__nav_5_4" id="__nav_5_4_label" tabindex="0">
<span class="md-ellipsis">
Available configuration options
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_4">
<span class="md-nav__icon md-icon"></span>
Available configuration options
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../config/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/env/" class="md-nav__link">
<span class="md-ellipsis">
Environment variables
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/seafile-conf/" class="md-nav__link">
<span class="md-ellipsis">
seafile.conf
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/seahub_settings_py/" class="md-nav__link">
<span class="md-ellipsis">
seahub_settings.py
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/seafevents-conf/" class="md-nav__link">
<span class="md-ellipsis">
seafevents.conf
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/seahub_customization/" class="md-nav__link">
<span class="md-ellipsis">
Seahub customization
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../config/sending_email/" class="md-nav__link">
<span class="md-ellipsis">
Email Sending
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6" id="__nav_6_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_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<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="../../administration/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../administration/account/" class="md-nav__link">
<span class="md-ellipsis">
Account management
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../administration/two_factor_authentication/" class="md-nav__link">
<span class="md-ellipsis">
Two-factor Authentication
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../administration/security_features/" class="md-nav__link">
<span class="md-ellipsis">
Security features
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../administration/auditing/" class="md-nav__link">
<span class="md-ellipsis">
Access logs and auditing
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../administration/export_report/" class="md-nav__link">
<span class="md-ellipsis">
Export report
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../administration/logs/" class="md-nav__link">
<span class="md-ellipsis">
Seafile server logs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../administration/backup_recovery/" class="md-nav__link">
<span class="md-ellipsis">
Backup and Recovery
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../administration/seafile_fsck/" class="md-nav__link">
<span class="md-ellipsis">
Seafile FSCK
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../administration/seafile_gc/" class="md-nav__link">
<span class="md-ellipsis">
Seafile GC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../administration/clean_database/" class="md-nav__link">
<span class="md-ellipsis">
Clean database
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../administration/seafile_metrics/" class="md-nav__link">
<span class="md-ellipsis">
Monitor Seafile with Prometheus
</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">
Upgrade
</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>
Upgrade
</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_binary/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade Seafile Cluster (binary)
</span>
<span class="md-status md-status--new" title="Work in progress">
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade/upgrade_notes_for_13.0.x/" class="md-nav__link">
<span class="md-ellipsis">
Upgrade notes for 13.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
</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_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_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/seafile_obsolete_configurations/" class="md-nav__link">
<span class="md-ellipsis">
Summary of obsolete configurations
</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">
Developing
</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>
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_8_2" >
<label class="md-nav__link" for="__nav_8_2" id="__nav_8_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_8_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8_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="../../develop/build_seafile/" class="md-nav__link">
<span class="md-ellipsis">
Outline
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../develop/linux/" class="md-nav__link">
<span class="md-ellipsis">
Linux
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../develop/osx/" class="md-nav__link">
<span class="md-ellipsis">
macOS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../develop/windows/" class="md-nav__link">
<span class="md-ellipsis">
Windows
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../develop/server/" class="md-nav__link">
<span class="md-ellipsis">
Server development
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../develop/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_9" >
<label class="md-nav__link" for="__nav_9" id="__nav_9_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_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9">
<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="#requirements" class="md-nav__link">
<span class="md-ellipsis">
Requirements
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#setup" class="md-nav__link">
<span class="md-ellipsis">
Setup
</span>
</a>
<nav class="md-nav" aria-label="Setup">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#installing-and-preparing-the-sql-database" class="md-nav__link">
<span class="md-ellipsis">
Installing and preparing the SQL database
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#installing-prerequisites" class="md-nav__link">
<span class="md-ellipsis">
Installing prerequisites
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#creating-user-seafile" class="md-nav__link">
<span class="md-ellipsis">
Creating user seafile
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#placing-the-seafile-pe-license" class="md-nav__link">
<span class="md-ellipsis">
Placing the Seafile PE license
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#downloading-the-install-package" class="md-nav__link">
<span class="md-ellipsis">
Downloading the install package
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#uncompressing-the-package" class="md-nav__link">
<span class="md-ellipsis">
Uncompressing the package
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#setting-up-seafile-pro-databases" class="md-nav__link">
<span class="md-ellipsis">
Setting up Seafile Pro databases
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#create-the-env-file-in-conf-directory" class="md-nav__link">
<span class="md-ellipsis">
Create the .env file in conf/ directory
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#setup-memory-cache" class="md-nav__link">
<span class="md-ellipsis">
Setup Memory Cache
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#enabling-httphttps-optional-but-recommended" class="md-nav__link">
<span class="md-ellipsis">
Enabling HTTP/HTTPS (Optional but Recommended)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#starting-seafile-server" class="md-nav__link">
<span class="md-ellipsis">
Starting Seafile Server
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#enabling-full-text-search" class="md-nav__link">
<span class="md-ellipsis">
Enabling full text search
</span>
</a>
<nav class="md-nav" aria-label="Enabling full text search">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#deploying-elasticsearch" class="md-nav__link">
<span class="md-ellipsis">
Deploying ElasticSearch
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#modifying-seafevents" class="md-nav__link">
<span class="md-ellipsis">
Modifying seafevents
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="installation-of-seafile-server-professional-edition">Installation of Seafile Server Professional Edition<a class="headerlink" href="#installation-of-seafile-server-professional-edition" title="Permanent link">&para;</a></h1>
<p>This manual explains how to deploy and run Seafile Server Professional Edition (Seafile PE) on a Linux server from a pre-built package using MySQL/MariaDB as database. The deployment has been tested for Debian/Ubuntu.</p>
<h2 id="requirements">Requirements<a class="headerlink" href="#requirements" title="Permanent link">&para;</a></h2>
<p>Please refer <a href="../../setup/system_requirements/#seafile-pro">here</a> for system requirements about Seafile PE. In general, we recommend that you should have at least 4G RAM and a 4-core CPU (&gt; 2GHz).</p>
<p>Seafile PE can be used without a paid license with up to three users. Licenses for more user can be purchased in the <a href="https://customer.seafile.com">Seafile Customer Center</a> or contact Seafile Sales at <a href="mailto:sales@seafile.com">sales@seafile.com</a> or one of <a href="https://www.seafile.com/en/partner/">our partners</a>.</p>
<h2 id="setup">Setup<a class="headerlink" href="#setup" title="Permanent link">&para;</a></h2>
<h3 id="installing-and-preparing-the-sql-database">Installing and preparing the SQL database<a class="headerlink" href="#installing-and-preparing-the-sql-database" title="Permanent link">&para;</a></h3>
<p>Seafile supports MySQL and MariaDB. We recommend that you use the preferred SQL database management engine included in the package repositories of your distribution.</p>
<p>You can find step-by-step how-tos for installing MySQL and MariaDB in the <a href="https://www.digitalocean.com/community/tutorials">tutorials on the Digital Ocean website</a>.</p>
<p>Seafile uses the <code>mysql_native_password</code> plugin for authentication. The versions of MySQL and MariaDB installed on Ubuntu/Debian use a different authentication plugin by default. It is therefore required to change to authentication plugin to <code>mysql_native_password</code> for the root user prior to the installation of Seafile. The above mentioned tutorials explain how to do it.</p>
<h3 id="installing-prerequisites">Installing prerequisites<a class="headerlink" href="#installing-prerequisites" title="Permanent link">&para;</a></h3>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>The standard directory <code>/opt/seafile</code> is assumed for the rest of this manual. If you decide to put Seafile in another directory, some commands need to be modified accordingly</p>
</div>
<ol>
<li>
<p>Install cache server (e.g., <em>Redis</em>)</p>
<div class="highlight"><pre><span></span><code>sudo<span class="w"> </span>apt-get<span class="w"> </span>update
sudo<span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>redis-server<span class="w"> </span>libhiredis-dev
</code></pre></div>
</li>
<li>
<p>Install Python and related libraries</p>
<div class="tabbed-set tabbed-alternate" data-tabs="1:3"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Ubuntu 24.04</label><label for="__tabbed_1_2">Debian 13</label><label for="__tabbed_1_3">Debian 12</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Debian 12 and Ubuntu 24.04 are now discouraging system-wide installation of python modules with pip. It is preferred now to install modules into a virtual environment which keeps them separate from the files installed by the system package manager, and enables different versions to be installed for different applications. With these python virtual environments (venv for short) to work, you have to activate the venv to make the packages installed in it available to the programs you run. That is done here with <code>source python-venv/bin/activate</code>.</p>
</div>
<div class="highlight"><pre><span></span><code>sudo apt-get install -y python3 python3-dev python3-setuptools python3-pip python3-ldap python3-rados libmysqlclient-dev libmemcached-dev ldap-utils libldap2-dev python3.12-venv default-libmysqlclient-dev build-essential pkg-config
mkdir /opt/seafile
cd /opt/seafile
# create the vitual environment in the python-venv directory
python3 -m venv python-venv
# activate the venv
source python-venv/bin/activate
# Notice that this will usually change your prompt so you know the venv is active
# install packages into the active venv with pip (sudo isn&#39;t needed because this is installing in the venv, not system-wide).
pip3 install --timeout=3600 boto3 oss2 twilio configparser pytz \
sqlalchemy==2.0.* pymysql==1.1.* jinja2 django-pylibmc pylibmc psd-tools lxml \
django==5.2.* cffi==1.17.1 future==1.0.* mysqlclient==2.2.* captcha==0.7.* django_simple_captcha==0.6.* \
pyjwt==2.10.* djangosaml2==1.11.* pysaml2==7.5.* pycryptodome==3.23.* python-ldap==3.4.* pillow==11.3.* pillow-heif==1.0.* cairosvg==2.8.*
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Debian 12 and Ubuntu 24.04 are now discouraging system-wide installation of python modules with pip. It is preferred now to install modules into a virtual environment which keeps them separate from the files installed by the system package manager, and enables different versions to be installed for different applications. With these python virtual environments (venv for short) to work, you have to activate the venv to make the packages installed in it available to the programs you run. That is done here with <code>source python-venv/bin/activate</code>.</p>
</div>
<div class="highlight"><pre><span></span><code>sudo apt-get install -y python3 python3-dev python3-setuptools python3-pip python3-ldap python3-rados libmariadb-dev-compat libmemcached-dev ldap-utils libldap2-dev libsasl2-dev pkg-config python3.13-venv
mkdir /opt/seafile
cd /opt/seafile
# create the vitual environment in the python-venv directory
python3 -m venv python-venv
# activate the venv
source python-venv/bin/activate
# Notice that this will usually change your prompt so you know the venv is active
# install packages into the active venv with pip (sudo isn&#39;t needed because this is installing in the venv, not system-wide).
pip3 install --timeout=3600 boto3 oss2 twilio configparser pytz \
sqlalchemy==2.0.* pymysql==1.1.* jinja2 django-pylibmc pylibmc psd-tools lxml \
django==5.2.* cffi==1.17.1 future==1.0.* mysqlclient==2.2.* captcha==0.7.* django_simple_captcha==0.6.* \
pyjwt==2.10.* djangosaml2==1.11.* pysaml2==7.5.* pycryptodome==3.23.* python-ldap==3.4.* pillow==11.3.* pillow-heif==1.0.* cairosvg==2.8.*
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Debian 12 and Ubuntu 24.04 are now discouraging system-wide installation of python modules with pip. It is preferred now to install modules into a virtual environment which keeps them separate from the files installed by the system package manager, and enables different versions to be installed for different applications. With these python virtual environments (venv for short) to work, you have to activate the venv to make the packages installed in it available to the programs you run. That is done here with <code>source python-venv/bin/activate</code>.</p>
</div>
<div class="highlight"><pre><span></span><code>sudo apt-get install -y python3 python3-dev python3-setuptools python3-pip python3-ldap python3-rados libmariadb-dev-compat libmemcached-dev ldap-utils libldap2-dev libsasl2-dev pkg-config python3.11-venv
mkdir /opt/seafile
cd /opt/seafile
# create the vitual environment in the python-venv directory
python3 -m venv python-venv
# activate the venv
source python-venv/bin/activate
# Notice that this will usually change your prompt so you know the venv is active
# install packages into the active venv with pip (sudo isn&#39;t needed because this is installing in the venv, not system-wide).
pip3 install --timeout=3600 boto3 oss2 twilio configparser pytz \
sqlalchemy==2.0.* pymysql==1.1.* jinja2 django-pylibmc pylibmc psd-tools lxml \
django==5.2.* cffi==1.17.1 future==1.0.* mysqlclient==2.2.* captcha==0.7.* django_simple_captcha==0.6.* \
pyjwt==2.10.* djangosaml2==1.11.* pysaml2==7.5.* pycryptodome==3.23.* python-ldap==3.4.* pillow==11.3.* pillow-heif==1.0.* cairosvg==2.8.*
</code></pre></div>
</div>
</div>
</div>
</li>
</ol>
<h3 id="creating-user-seafile">Creating user seafile<a class="headerlink" href="#creating-user-seafile" title="Permanent link">&para;</a></h3>
<p>Elasticsearch, the indexing server, cannot be run as root. More generally, it is good practice not to run applications as root. </p>
<p>Create a new user and follow the instructions on the screen:</p>
<div class="tabbed-set tabbed-alternate" data-tabs="2:2"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Ubuntu 24.04</label><label for="__tabbed_2_2">Debian 13/12</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>adduser seafile
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code>/usr/sbin/adduser seafile
</code></pre></div>
</div>
</div>
</div>
<p>Change ownership of the created directory to the new user:</p>
<div class="highlight"><pre><span></span><code>chown -R seafile: /opt/seafile
</code></pre></div>
<p>All the following steps are done as user seafile.</p>
<p>Change to user seafile:</p>
<div class="highlight"><pre><span></span><code>su seafile
</code></pre></div>
<h3 id="placing-the-seafile-pe-license">Placing the Seafile PE license<a class="headerlink" href="#placing-the-seafile-pe-license" title="Permanent link">&para;</a></h3>
<p>Save the license file in Seafile's programm directory <code>/opt/seafile</code>. Make sure that the name is <code>seafile-license.txt</code>. </p>
<div class="admonition danger">
<p class="admonition-title">If the license file has a different name or cannot be read, Seafile server will start with in trailer mode with most THREE users</p>
</div>
<h3 id="downloading-the-install-package">Downloading the install package<a class="headerlink" href="#downloading-the-install-package" title="Permanent link">&para;</a></h3>
<p>The install packages for Seafile PE are available for download in the the <a href="https://customer.seafile.com">Seafile Customer Center</a>. To access the Customer Center, a user account is necessary. The registration is free.</p>
<p>Beginning with Seafile PE 7.0.17, the Seafile Customer Center provides two install packages for every version (using Seafile PE 13.0.10 as an example):</p>
<ul>
<li><em>seafile-pro-server_13.0.10_x86-64_Ubuntu.tar.gz</em>, compiled in Ubuntu environment</li>
</ul>
<p>The former is suitable for installation on Ubuntu/Debian servers.</p>
<p>Download the install package using wget (replace the x.x.x with the version you wish to download):</p>
<div class="highlight"><pre><span></span><code># Debian/Ubuntu
wget -O &#39;seafile-pro-server_x.x.x_x86-64_Ubuntu.tar.gz&#39; &#39;VERSION_SPECIFIC_LINK_FROM_SEAFILE_CUSTOMER_CENTER&#39;
</code></pre></div>
<p>We use Seafile version 13.0.10 as an example in the remainder of these instructions.</p>
<h3 id="uncompressing-the-package">Uncompressing the package<a class="headerlink" href="#uncompressing-the-package" title="Permanent link">&para;</a></h3>
<p>The install package is downloaded as a compressed tarball which needs to be uncompressed.</p>
<p>Uncompress the package using tar:</p>
<div class="highlight"><pre><span></span><code># Debian/Ubuntu
tar xf seafile-pro-server_13.0.10_x86-64_Ubuntu.tar.gz
</code></pre></div>
<p>Now you have:</p>
<div class="highlight"><pre><span></span><code>$ tree -L 2 /opt/seafile
.
├── seafile-license.txt
├── python-venv # you will not see this directory if you use ubuntu 22/debian 10
│   ├── bin
│   ├── include
│   ├── lib
│   ├── lib64 -&gt; lib
│   └── pyvenv.cfg
├── seafile-pro-server-13.0.10
│   ├── check_init_admin.py
│   ├── index_op.py
│   ├── migrate-repo.py
│   ├── migrate-repo.sh
│   ├── migrate.py
│   ├── migrate.sh
│   ├── migrate_ldapusers.py
│   ├── parse_seahub_db.py
│   ├── pro
│   ├── remove-objs.py
│   ├── remove-objs.sh
│   ├── reset-admin.sh
│   ├── run_index_master.sh
│   ├── run_index_worker.sh
│   ├── runtime
│   ├── seaf-backup-cmd.py
│   ├── seaf-backup-cmd.sh
│   ├── seaf-encrypt.sh
│   ├── seaf-fsck.sh
│   ├── seaf-fuse.sh
│   ├── seaf-gc.sh
│   ├── seaf-import.sh
│   ├── seafile
│   ├── seafile-background-tasks.sh
│   ├── seafile-monitor.sh
│   ├── seafile.sh
│   ├── seahub
│   ├── seahub.sh
│   ├── setup-seafile-mysql.py
│   ├── setup-seafile-mysql.sh
│   ├── setup-seafile.sh
│   ├── sql
│   └── upgrade
└── seafile-pro-server_13.0.10_x86-64_Ubuntu.tar.gz
</code></pre></div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>The names of the install packages differ for Seafile CE and Seafile PE. Using Seafile CE and Seafile PE 13.0.10 as an example, the names are as follows:</p>
<ul>
<li>Seafile CE: <code>seafile-server_13.0.10_x86-86.tar.gz</code>; uncompressing into folder <code>seafile-server-13.0.10</code></li>
<li>Seafile PE: <code>seafile-pro-server_13.0.10_x86-86.tar.gz</code>; uncompressing into folder <code>seafile-pro-server-13.0.10</code></li>
</ul>
</div>
<h3 id="setting-up-seafile-pro-databases">Setting up Seafile Pro databases<a class="headerlink" href="#setting-up-seafile-pro-databases" title="Permanent link">&para;</a></h3>
<p>The install package comes with a script that sets Seafile up for you. Specifically, the script creates the required directories and extracts all files in the right place. It can also create a MySQL user and the three databases that <a href="../introduction/components.md">Seafile's components</a> require:</p>
<ul>
<li>ccnet server</li>
<li>seafile server</li>
<li>seahub</li>
</ul>
<div class="admonition note">
<p class="admonition-title">While ccnet server was merged into the seafile-server in Seafile 8.0, the corresponding database is still required for the time being</p>
</div>
<p>Run the script as user seafile:</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>For installations using python virtual environment, activate it if it isn't already active</p>
<div class="highlight"><pre><span></span><code><span class="nb">source</span><span class="w"> </span>python-venv/bin/activate
</code></pre></div>
</div>
<div class="highlight"><pre><span></span><code>cd seafile-pro-server-13.0.10
./setup-seafile-mysql.sh
</code></pre></div>
<p>Configure your Seafile Server by specifying the following three parameters:</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
<th>Note</th>
</tr>
</thead>
<tbody>
<tr>
<td>server name</td>
<td>Name of the Seafile Server</td>
<td>3-15 characters, only English letters, digits and underscore ('_') are allowed</td>
</tr>
<tr>
<td>server's ip or domain</td>
<td>IP address or domain name used by the Seafile Server</td>
<td>Seafile client program will access the server using this address</td>
</tr>
<tr>
<td>fileserver port</td>
<td>TCP port used by the Seafile fileserver</td>
<td>Default port is 8082, it is recommended to use this port and to only change it if is used by other service</td>
</tr>
</tbody>
</table>
<p>In the next step, choose whether to create new databases for Seafile or to use existing databases. The creation of new databases requires the root password for the SQL server. </p>
<p><img alt="grafik" src="../../images/seafile-setup-database.png" /></p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If you don't have the root password, you need someone who has the privileges, e.g., the database admin, to create the three databases required by Seafile, as well as a MySQL user who can access the databases. For example, to create three databases <code>ccnet_db</code> / <code>seafile_db</code> / <code>seahub_db</code> for ccnet/seafile/seahub respectively, and a MySQL user "seafile" to access these databases run the following SQL queries:</p>
<div class="highlight"><pre><span></span><code>create database `ccnet_db` character set = &#39;utf8&#39;;
create database `seafile_db` character set = &#39;utf8&#39;;
create database `seahub_db` character set = &#39;utf8&#39;;
create user &#39;seafile&#39;@&#39;localhost&#39; identified by &#39;seafile&#39;;
GRANT ALL PRIVILEGES ON `ccnet_db`.* to `seafile`@localhost;
GRANT ALL PRIVILEGES ON `seafile_db`.* to `seafile`@localhost;
GRANT ALL PRIVILEGES ON `seahub_db`.* to `seafile`@localhost;
</code></pre></div>
</div>
<div class="tabbed-set tabbed-alternate" data-tabs="3:2"><input checked="checked" id="__tabbed_3_1" name="__tabbed_3" type="radio" /><input id="__tabbed_3_2" name="__tabbed_3" type="radio" /><div class="tabbed-labels"><label for="__tabbed_3_1">[1] Create new ccnet/seafile/seahub databases</label><label for="__tabbed_3_2">[2] Use existing ccnet/seafile/seahub databases</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<p>The script creates these databases and a MySQL user that Seafile Server will use to access them. To this effect, you need to answer these questions:</p>
<table>
<thead>
<tr>
<th>Question</th>
<th>Description</th>
<th>Note</th>
</tr>
</thead>
<tbody>
<tr>
<td>mysql server host</td>
<td>Host address of the MySQL server</td>
<td>Default is localhost</td>
</tr>
<tr>
<td>mysql server port</td>
<td>TCP port used by the MySQL server</td>
<td>Default port is 3306; almost every MySQL server uses this port</td>
</tr>
<tr>
<td>mysql root password</td>
<td>Password of the MySQL root account</td>
<td>The root password is required to create new databases and a MySQL user</td>
</tr>
<tr>
<td>mysql user for Seafile</td>
<td>MySQL user created by the script, used by Seafile's components to access the databases</td>
<td>Default is seafile; the user is created unless it exists</td>
</tr>
<tr>
<td>mysql password for Seafile user</td>
<td>Password for the user above, written in Seafile's config files</td>
<td>Percent sign ('%') is not allowed</td>
</tr>
<tr>
<td>database name</td>
<td>Name of the database used by ccnet</td>
<td>Default is "ccnet_db", the database is created if it does not exist</td>
</tr>
<tr>
<td>seafile database name</td>
<td>Name of the database used by Seafile</td>
<td>Default is "seafile_db", the database is created if it does not exist</td>
</tr>
<tr>
<td>seahub database name</td>
<td>Name of the database used by seahub</td>
<td>Default is "seahub_db", the database is created if it does not exist</td>
</tr>
</tbody>
</table>
</div>
<div class="tabbed-block">
<p>The prompts you need to answer: </p>
<table>
<thead>
<tr>
<th>Question</th>
<th>Description</th>
<th>Note</th>
</tr>
</thead>
<tbody>
<tr>
<td>mysql server host</td>
<td>Host address of the MySQL server</td>
<td>Default is localhost</td>
</tr>
<tr>
<td>mysql server port</td>
<td>TCP port used by MySQL server</td>
<td>Default port is 3306; almost every MySQL server uses this port</td>
</tr>
<tr>
<td>mysql user for Seafile</td>
<td>User used by Seafile's components to access the databases</td>
<td>The user must exists</td>
</tr>
<tr>
<td>mysql password for Seafile user</td>
<td>Password for the user above</td>
<td></td>
</tr>
<tr>
<td>ccnet database name</td>
<td>Name of the database used by ccnet, default is "ccnet_db"</td>
<td>The database must exist</td>
</tr>
<tr>
<td>seafile database name</td>
<td>Name of the database used by Seafile, default is "seafile_db"</td>
<td>The database must exist</td>
</tr>
<tr>
<td>seahub dabase name</td>
<td>Name of the database used by Seahub, default is "seahub_db"</td>
<td>The database must exist</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>If the setup is successful, you see the following output:</p>
<p><img alt="grafik" src="../../images/seafile-setup-output.png" /></p>
<p>The directory layout then looks as follows:</p>
<div class="highlight"><pre><span></span><code>/opt/seafile
├── seafile-license.txt
├── ccnet
├── conf
│   ├── gunicorn.conf.py
│   ├── seafdav.conf
│   ├── seafevents.conf
│   ├── seafile.conf
│   └── seahub_settings.py
├── pro-data
├── python-venv # you will not see this directory if you use ubuntu 22/debian 10
│   ├── bin
│   ├── include
│   ├── lib
│   ├── lib64 -&gt; lib
│   └── pyvenv.cfg
├── seafile-data
│   └── library-template
├── seafile-pro-server-13.0.10
│   ├── check_init_admin.py
│   ├── index_op.py
│   ├── migrate-repo.py
│   ├── migrate-repo.sh
│   ├── migrate.py
│   ├── migrate.sh
│   ├── migrate_ldapusers.py
│   ├── parse_seahub_db.py
│   ├── pro
│   ├── remove-objs.py
│   ├── remove-objs.sh
│   ├── reset-admin.sh
│   ├── run_index_master.sh
│   ├── run_index_worker.sh
│   ├── runtime
│   ├── seaf-backup-cmd.py
│   ├── seaf-backup-cmd.sh
│   ├── seaf-encrypt.sh
│   ├── seaf-fsck.sh
│   ├── seaf-fuse.sh
│   ├── seaf-gc.sh
│   ├── seaf-import.sh
│   ├── seafile
│   ├── seafile-background-tasks.sh
│   ├── seafile-monitor.sh
│   ├── seafile.sh
│   ├── seahub
│   ├── seahub.sh
│   ├── setup-seafile-mysql.py
│   ├── setup-seafile-mysql.sh
│   ├── setup-seafile.sh
│   ├── sql
│   └── upgrade
├── seafile-pro-server_13.0.10_x86-64_Ubuntu.tar.gz
├── seafile-server-latest -&gt; seafile-pro-server-13.0.10
└── seahub-data
└── avatars
</code></pre></div>
<p>The folder <code>seafile-server-latest</code> is a symbolic link to the current Seafile Server folder. When later you upgrade to a new version, the upgrade scripts update this link to point to the latest Seafile Server folder.</p>
<h3 id="create-the-env-file-in-conf-directory">Create the <code>.env</code> file in <code>conf/</code> directory<a class="headerlink" href="#create-the-env-file-in-conf-directory" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span><code>nano<span class="w"> </span>/opt/seafile/conf/.env
</code></pre></div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p><code>JWT_PRIVATE_KEY</code>, A random string with a length of no less than 32 characters can be generated from:
<div class="highlight"><pre><span></span><code>pwgen<span class="w"> </span>-s<span class="w"> </span><span class="m">40</span><span class="w"> </span><span class="m">1</span>
</code></pre></div></p>
</div>
<div class="highlight"><pre><span></span><code><span class="nv">JWT_PRIVATE_KEY</span><span class="o">=</span>&lt;Your<span class="w"> </span>jwt<span class="w"> </span>private<span class="w"> </span>key&gt;
<span class="nv">SEAFILE_SERVER_PROTOCOL</span><span class="o">=</span>https
<span class="nv">SEAFILE_SERVER_HOSTNAME</span><span class="o">=</span>seafile.example.com
<span class="nv">SEAFILE_MYSQL_DB_HOST</span><span class="o">=</span>&lt;your<span class="w"> </span>database<span class="w"> </span>host&gt;
<span class="nv">SEAFILE_MYSQL_DB_PORT</span><span class="o">=</span><span class="m">3306</span>
<span class="nv">SEAFILE_MYSQL_DB_USER</span><span class="o">=</span>seafile
<span class="nv">SEAFILE_MYSQL_DB_PASSWORD</span><span class="o">=</span>&lt;your<span class="w"> </span>MySQL<span class="w"> </span>password&gt;
<span class="nv">SEAFILE_MYSQL_DB_CCNET_DB_NAME</span><span class="o">=</span>ccnet_db
<span class="nv">SEAFILE_MYSQL_DB_SEAFILE_DB_NAME</span><span class="o">=</span>seafile_db
<span class="nv">SEAFILE_MYSQL_DB_SEAHUB_DB_NAME</span><span class="o">=</span>seahub_db
<span class="c1">## Cache</span>
<span class="nv">CACHE_PROVIDER</span><span class="o">=</span>redis<span class="w"> </span><span class="c1"># options: redis (recommend), memcached</span>
<span class="c1">### Redis</span>
<span class="nv">REDIS_HOST</span><span class="o">=</span>redis
<span class="nv">REDIS_PORT</span><span class="o">=</span><span class="m">6379</span>
<span class="nv">REDIS_PASSWORD</span><span class="o">=</span>
<span class="c1">### Memcached</span>
<span class="nv">MEMCACHED_HOST</span><span class="o">=</span>memcached
<span class="nv">MEMCACHED_PORT</span><span class="o">=</span><span class="m">11211</span>
</code></pre></div>
<h3 id="setup-memory-cache">Setup Memory Cache<a class="headerlink" href="#setup-memory-cache" title="Permanent link">&para;</a></h3>
<p>Memory cache is mandatory for pro edition. You may use Memcached or Reids as cache server.</p>
<div class="tabbed-set tabbed-alternate" data-tabs="4:2"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">Memcached</label><label for="__tabbed_4_2">Redis</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<p>Use the following commands to install memcached and corresponding libraies on your system:</p>
<div class="highlight"><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 or modify the following configuration to <code>/opt/seafile/conf/.env</code>:</p>
<div class="highlight"><pre><span></span><code><span class="c1">## Cache</span>
<span class="n">CACHE_PROVIDER</span><span class="o">=</span><span class="n">memcached</span>
<span class="c1">### Memcached</span>
<span class="n">MEMCACHED_HOST</span><span class="o">=</span><span class="n">memcached</span>
<span class="n">MEMCACHED_PORT</span><span class="o">=</span><span class="mi">11211</span>
</code></pre></div>
</div>
<div class="tabbed-block">
<div class="admonition success">
<p class="admonition-title">Redis is supported since version 11.0</p>
</div>
<p>Use the following commands to install redis and corresponding libraies on your system:</p>
<div class="highlight"><pre><span></span><code># on Debian/Ubuntu 18.04+
apt-get install -y redis-server libhiredis-dev
pip3 install redis django-redis
systemctl enable --now redis-server
</code></pre></div>
<p>Add or modify the following configuration to <code>/opt/seafile/conf/.env</code>:</p>
<div class="highlight"><pre><span></span><code><span class="c1">## Cache</span>
<span class="n">CACHE_PROVIDER</span><span class="o">=</span><span class="n">redis</span>
<span class="c1">### Redis</span>
<span class="n">REDIS_HOST</span><span class="o">=</span><span class="n">redis</span>
<span class="n">REDIS_PORT</span><span class="o">=</span><span class="mi">6379</span>
<span class="n">REDIS_PASSWORD</span><span class="o">=</span>
</code></pre></div>
</div>
</div>
</div>
<h3 id="enabling-httphttps-optional-but-recommended">Enabling HTTP/HTTPS (Optional but Recommended)<a class="headerlink" href="#enabling-httphttps-optional-but-recommended" title="Permanent link">&para;</a></h3>
<p>You need at least setup HTTP to make Seafile's web interface work. This manual provides instructions for enabling HTTP/HTTPS for the two most popular web servers and reverse proxies (e.g., <a href="../https_with_nginx/">Nginx</a>).</p>
<h2 id="starting-seafile-server">Starting Seafile Server<a class="headerlink" href="#starting-seafile-server" title="Permanent link">&para;</a></h2>
<p>Run the following commands in <code>/opt/seafile/seafile-server-latest</code>:</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>For installations using python virtual environment, activate it if it isn't already active</p>
<div class="highlight"><pre><span></span><code><span class="nb">source</span><span class="w"> </span>python-venv/bin/activate
</code></pre></div>
</div>
<div class="highlight"><pre><span></span><code>su seafile
./seafile.sh start # Start Seafile service
./seahub.sh start # Start seahub website, port defaults to 127.0.0.1:8000
</code></pre></div>
<div class="admonition success">
<p class="admonition-title">Success</p>
<p>The first time you start Seahub, the script prompts you to create an admin account for your Seafile Server. Enter the email address of the admin user followed by the password, i.e.:</p>
<div class="highlight"><pre><span></span><code>What is the email for the admin account?
[ admin email ] &lt;please input your admin&#39;s email&gt;
What is the password for the admin account?
[ admin password ] &lt;please input your admin&#39;s password&gt;
Enter the password again:
[ admin password again ] &lt;please input your admin&#39;s password again&gt;
</code></pre></div>
</div>
<p>Now you can access Seafile via the web interface at the host address (e.g., https://seafile.example.com).</p>
<h2 id="enabling-full-text-search">Enabling full text search<a class="headerlink" href="#enabling-full-text-search" title="Permanent link">&para;</a></h2>
<p>Seafile uses the indexing server ElasticSearch to enable full text search.</p>
<h3 id="deploying-elasticsearch">Deploying ElasticSearch<a class="headerlink" href="#deploying-elasticsearch" title="Permanent link">&para;</a></h3>
<p>Our recommendation for deploying ElasticSearch is using Docker. Detailed information about installing Docker on various Linux distributions is available at <a href="https://docs.docker.com/engine/install/">Docker Docs</a>.</p>
<p>Seafile PE 9.0 only supports ElasticSearch 7.x. Seafile PE 10.0, 11.0, 12.0, 13.0 only supports ElasticSearch 8.x.</p>
<p>We use ElasticSearch version 8.15.0 as an example in this section. Version 8.15.0 and newer version have been successfully tested with Seafile.</p>
<p>Pull the Docker image:
<div class="highlight"><pre><span></span><code>sudo docker pull elasticsearch:8.15.0
</code></pre></div></p>
<p>Create a folder for persistent data created by ElasticSearch and change its permission:
<div class="highlight"><pre><span></span><code>sudo mkdir -p /opt/seafile-elasticsearch/data &amp;&amp; chmod -R 777 /opt/seafile-elasticsearch/data/
</code></pre></div></p>
<p>Now start the ElasticSearch container using the docker run command:
<div class="highlight"><pre><span></span><code>sudo docker run -d \
--name es \
-p 9200:9200 \
-e &quot;discovery.type=single-node&quot; -e &quot;bootstrap.memory_lock=true&quot; \
-e &quot;ES_JAVA_OPTS=-Xms2g -Xmx2g&quot; -e &quot;xpack.security.enabled=false&quot; \
--restart=always \
-v /opt/seafile-elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:8.15.0
</code></pre></div></p>
<div class="admonition danger">
<p class="admonition-title">Security notice</p>
<blockquote>
<p>We sincerely thank <strong><em>Mohammed Adel</em></strong> of <a href="https://www.safedecision.com.sa/">Safe Decision Co.</a>, for the suggestion of this notice.</p>
</blockquote>
<p>By default, Elasticsearch will only listen on <code>127.0.0.1</code>, but this rule may <strong>become invalid</strong> after Docker exposes the service port, <strong><em>which will make your Elasticsearch service vulnerable to attackers accessing and extracting sensitive data due to exposure to the external network</em></strong>. We recommend that you manually configure the Docker firewall, such as</p>
<div class="highlight"><pre><span></span><code>sudo<span class="w"> </span>iptables<span class="w"> </span>-A<span class="w"> </span>INPUT<span class="w"> </span>-p<span class="w"> </span>tcp<span class="w"> </span>-s<span class="w"> </span>&lt;your<span class="w"> </span>seafile<span class="w"> </span>server<span class="w"> </span>ip&gt;<span class="w"> </span>--dport<span class="w"> </span><span class="m">9200</span><span class="w"> </span>-j<span class="w"> </span>ACCEPT
sudo<span class="w"> </span>iptables<span class="w"> </span>-A<span class="w"> </span>INPUT<span class="w"> </span>-p<span class="w"> </span>tcp<span class="w"> </span>--dport<span class="w"> </span><span class="m">9200</span><span class="w"> </span>-j<span class="w"> </span>DROP
</code></pre></div>
<p>The above command will only allow the host where your Seafile service is located to connect to Elasticsearch, and other addresses will be blocked. If you deploy Elasticsearch based on binary packages, you need to refer to the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.17/important-settings.html#network.host">official document</a> to set the address that Elasticsearch binds to.</p>
</div>
<h3 id="modifying-seafevents">Modifying seafevents<a class="headerlink" href="#modifying-seafevents" title="Permanent link">&para;</a></h3>
<p>Add the following configuration to <code>seafevents.conf</code>:</p>
<div class="highlight"><pre><span></span><code>[INDEX FILES]
es_host = &lt;your elasticsearch server&#39;s IP, e.g., 127.0.0.1&gt; # IP address of ElasticSearch host
es_port = 9200 # port of ElasticSearch host
</code></pre></div>
<p>Finally, restart Seafile:</p>
<div class="highlight"><pre><span></span><code>su seafile
./seafile.sh restart &amp;&amp; ./seahub.sh 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>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../outline/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Outline">
<div class="md-footer__button md-icon">
<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>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Outline
</div>
</div>
</a>
<a href="../https_with_nginx/" class="md-footer__link md-footer__link--next" aria-label="Next: HTTPS with Nginx">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
HTTPS with Nginx
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<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; 2024 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 512 512"><!--! Font Awesome Free 7.1.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 2025 Fonticons, Inc.--><path d="M173.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.9M252.8 8C114.1 8 8 113.3 8 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.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.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">{"annotate": null, "base": "../..", "features": ["navigation.footer", "navigation.tracking", "navigation.sections", "navigation.tabs", "navigation.top", "search.suggest", "search.highlight", "search.share", "math", "content.code.copy", "content.code.annotate"], "search": "../../assets/javascripts/workers/search.7a47a382.min.js", "tags": null, "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"}, "version": {"provider": "mike"}}</script>
<script src="../../assets/javascripts/bundle.e71a0d61.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML"></script>
</body>
</html>