开源的文件云存储平台 Seafile 操作手册


1. Introduction 2. 概览 i. Seafile 组件 ii. 研发路线图 iii. 常见问题解答 iv. 修改日志 v. 我要参与 3. Linux 下部署 Seafile 服务器 i. 部署 Seafile 服务器(使用 SQLite) ii. 部署 Seafile 服务器(使用 MySQL) iii. Nginx 下配置 Seahub iv. Nginx 下启用 Https v. Apache 下配置 Seahub vi. Apache 下启用 Https vii. Seafile LDAP 配置 viii. 开机启动 Seafile ix. 防火墙设置 x. Logrotate 管理系统日志 xi. 其他部署说明 i. 使用 Memcached ii. 使用 NAT iii. 非根域名下部署 Seahub iv. 从 SQLite 迁移至 MySQL xii. 安装常见问题 xiii. 升级 4. Windows 下部署 Seafile 服务器 i. 下载安装 Windows 版 Seafile 服务器 ii. 安装 Seafile 为 Windows 服务 iii. 所用端口说明 iv. 升级 5. 部署 Seafile 专业版服务器 i. 下载安装 Seafile 专业版服务器 ii. 从社区版迁移至专业版 iii. 升级 iv. Amazon S3 下安装 v. OpenStackSwift 下安装 vi. Ceph 下安装 vii. 配置选项 viii. 其他部署说明 i. 文件搜索说明 ii. 集群部署 iii. 集群中启用搜索和后台服务 iv. NFS 下集群安装 ix. 常见问题解答 x. 软件许可协议 6. 服务器个性化配置 Table of Contents i. ccnet.conf ii. seafile.conf iii. seahub_settings.py iv. 发送邮件提醒 v. 个性化邮件提醒 vi. 用户管理 vii. 存储容量与文件上传/下载大小限制 viii. 自定义 Web 7. 管理员手册 i. 账户管理 ii. 日志 iii. 备份与恢复 iv. Seafile FSCK v. Seafile GC 8. WebDAV 和 FUSE 扩展 i. WebDAV 扩展 ii. FUSE 扩展 9. 安全选项 10. 开发文档 i. 编译 Seafile i. Linux ii. Windows iii. Max OS X iv. Server ii. 开发环境 iii. 编程规范 iv. Web API v. Python API vi. 数据模型 vii. 服务器组件 viii. 同步算法 Seafile 是一个开源的文件云存储平台。它提供更丰富的文件同步和管理功能,以及更好的数据隐私保护和 群组协作功能。。 Seafile 通过“资料库”来分类管理文件,每个资料库可单独同步,用户可加密资料库, 且密码不会保存在服 务器端,所以即使是服务器管理员也无权访问你的文件。 Seafile 允许用户创建“群组”,在群组内同步文件、创建维基、发起讨论等,方便团队内协同工作。 Seafile 及其桌面、移动客户端遵循 GPLv3。 Seahub(Seafile 服务器的 web 端)遵循 Apache License。 本手册“源码”托管在Github https://github.com/haiwen/seafile-docs-cn Twitter: @seafile https://twitter.com/seafile 微博: @seafile 更多内容请见 Seafile Wiki 简介 软件许可协议 关于 联系方式 更多内容 Seafile 组件 FAQ Changelog Roadmap Contribution 概览 Seafile服务器由以下组件构成 Ccnet daemon(客户端为ccnet / 服务器端为ccnet-server):网络服务守护进程。在我们最初的设计 中,Ccnet就像一辆网络流量“公共汽车”,所有客户端和服务器之间的网络流量,以及内部组件之间的 数据传输,都经由Ccnet来处理和转发。但是后来我们发现,文件传输直接由Seafile daemon组件来处 理会更好。 Seafile daemon:数据服务守护进程。 Seahub:网站界面,供用户管理自己在服务器上的数据和账户信息。Seafile服务器通 过"gunicorn"(一个轻量级的Python HTTP服务器)来提供网站支持。Seahub作为gunicorn的一个应 用程序来运行。 FileServer (3.1 版前叫 HttpServer): 处理Seahub端文件的上传与下载。由于gunicorn对大型文件的处 理并不好,所以我们用C语言写了这个FileServer组件,来专门处理文件的上传与下载。 Controller: ccnet和seafile守护进程监视器,必要时会重启守护进程。 桌面客户端与Seafile服务器之间的文件同步过程: 移动客户端与Seafile服务器之间的交互过程: 移动客户端与Seafile服务器(基于Nginx/Apache)之间的交互过程: Seafile服务器组件 Version 3.1 will focus on improving the file syncing algorithm. Including Improve performance: easily syncing 10k+ files in a library. Don't need to download files if they are moved to another directory. Add OAuth support for easy integrating into other systems Enable creating sub-libraries from an encrypted library Rename FileServer to FileServer to remove confusing. Enable deleting of personal messages Improved notification Upgrade pdf.js Password protection for sharing links Seafile roadmap for 3-x Seafile roadmap for 2-x Roadmap 3.1 (To be released before 2014.7.30) Platform Web More details First, you can check the ccnet.log in client ( ~/.ccnet/logs/ccnet.log for Linux, C:/users/your_name/ccnet/logs/ccnet.log for Windows) to see what's wrong. Possible reasons: Miss config of SERVICE_URL : Check whether the value of is set correctly in server's ccnet.conf . Firewall: Ensure the firewall is configured properly. See [[Firewall Settings for Seafile Server ]] Trouble shooting: Manually telnet to see if you can connect: telnet your-server-IP-or-domain 10001 Make sure you firewall for seafile fileserver is opened. Using chrome/firefox debug mode to find which link is given when click download button and what's wrong with this link No, You must have python 2.6 or 2.7 installed on your server. There was an unconfirmed solution on the internet, which later has vanished. (Please explain the installation routine if you successfully set up Seafile in FreeBSD.) You can check the back trace in seahub log files('''installation folder/logs/seahub_django_request.log''') You can also turn on debug by adding DEBUG = True to seahub_settings.py and restart seahub by ./seahub.sh restart , then refresh that page, all the debug infomations will be displayed. Make sure ./seahub.sh was started as: ./seahub.sh start-fastcgi You need to check whether the "avatars" symbolic link under seahub/media/ is correctly link to ../../../seahub-data/avatars. If not, you need to correct the link according to the "minor upgrade" section in [[Upgrading-Seafile-Server]] If your avatars link is correctly linked, and avatars are still broken, you may refresh seahub cache by rm -rf /tmp/seahub_cache/* Modify file seafile.ini under ccnet. This file contains the location of seafile-data. Move seafile-data to FAQ When downloading a library, the client hangs at "connecting server" Failed to upload/download file online Does Seafile server support Python 3? Can Seafile server run on FreeBSD? Website displays "Page unavailable", what can I do? Avatar pictures vanished after upgrading server, what can I do? How to change seafile-data location after setup? another place, like /opt/new/seafile-data . Then modify the file accordingly. Please check logs/seahub.log. There are some common mistakes: 1. Check whether there are some typos in the config, e.g., forget single quote, EMAIL_HOST_USER = XXX, which should be EMAIL_HOST_USER = 'XXX' 2. Your mail server is not available. Failed to send email, what can I do? [API] Add replace if exist into upload-api Show detailed error message when Gunicorn failed to start Improve object and block writting performance Add retry when failed getting database connection changelog of server changelog of client changelog of 2-x Changelog v3.0.4 Server Previous changelog Seafile and its desktop and mobile clients are published under the GPLv3. The Seafile server's web end, i.e. Seahub, is published under the Apache License. Google Group: https://groups.google.com/forum/?fromgroups#!forum/seafile IRC: #seafile on freenode Follow us @seafile https://twitter.com/seafile Find the existing issues that fit your situation if any, or create a new issue. We are using github as our issue tracer https://github.com/haiwen/seafile/issues?state=open Join us on Google Group: https://groups.google.com/forum/?fromgroups#!forum/seafile The source code of seafile is ISO/IEC 9899:1999 (E) (a.k.a. C99) compatible. Take a look at code standard. Contribution Licensing Discussion Reporting a Bug? Code Style 此文档用来说明如何使用预编译安装包来部署 Seafile 服务器. 部署 Seafile 服务器(使用 SQLite) 企业环境下我们建议使用 MySQL 数据库,并将 Seafile 部署在 Nginx 或者 Apache 上,如果对于 Nginx 和 Apache 都不是很熟悉的话,我们建议使用 Nginx,相对于 Apache 来说,Nginx 使用起来比较简单。 基础功能: 部署 Seafile 服务器(使用 MySQL) Nginx 下配置 Seahub Nginx 下启用 Https Apache 下配置 Seahub Apache 下启用 Https 高级功能: Seafile LDAP 配置 开机启动 Seafile 防火墙设置 Logrotate 管理系统日志 使用 Memcached 其他部署事项 使用 NAT 非根域名下部署 Seahub 从 SQLite 迁移至 MySQL 更多配置选项(比如开启用户注册功能),请查看 服务器个性化配置。 注意 如果在部署 Seafile 服务器是遇到困难 1. 阅读 Seafile 组件 以了解 Seafile 的运行原理。 2. 安装常见问题。 3. 通过 论坛 或者 Seafile 服务器管理员 QQ 交流群: 315229116 寻求帮助。 升级 如果想要自己打包 Seafile 服务器(安装在自己喜欢的 Linux 系统中), 请务必使用 tags: Linux 下部署 Seafile 服务器 家庭/个人 环境下部署 Seafile 服务器 生产/企业 环境下部署 Seafile 服务器 升级 Seafile 服务器 个人打包 Seafile 服务器 当 Seafile 客户端发行新版本时,比如 v3.0.1 , 我们会将 v3.0.1 标签打在 ccnet, seafile 和 seafile-client 上。 同样,当 Seafile 服务器发行新版本时,比如 v3.0.1 , 我们会将 v3.0.1 标签打在 ccnet, seafile 和 seahub 上。 对于 libsearpc,会一直使用 v3.0-latest 标签。 注意: 每个项目的版本号和 tag 名,不存在必然联系。 这份文档用来说明如何使用预编译好的文件包来安装和运行 Seafile 服务器。 到下载页面下载最新的服务器安装包. 注意:如果你把 Seafile文件放在一个外部存储的目录里(比如NFS,CIFS),你应该使用 MySQL 而不是 SQLite来作为数据库。请参考[[下载和安装Seafile服务器(使用MySQL)]]。 假设你公司的名称为"haiwen",你也已经下载 seafile-server_1.4.0_* 到你的home 目录下。 我们建议这样 的目录结构: mkdir haiwen mv seafile-server_* haiwen cd haiwen #将 seafile-server_* 移动到 haiwen 目录下后 tar -xzf seafile-server_* mkdir installed mv seafile-server_* installed 现在,你的目录看起来应该像这样: # tree . -L 2 . ├── installed │ └── seafile-server_1.4.0_x86-64.tar.gz └── seafile-server-1.4.0 ├── reset-admin.sh ├── runtime ├── seafile ├── seafile.sh ├── seahub ├── seahub.sh ├── setup-seafile.sh └── upgrade 这样设计目录的好处在于 和 seafile 相关的配置文件都可以放在 haiwen 目录下,便于集中管理. 后续升级时,你只需要解压最新的安装包到"haiwen"目录下. 这样你可以重用"haiwen"目录下已经存在的配置文件,而不用重新配置. 部署 Seafile 服务器(使用 SQLite) 下载 部署和目录结构 安装 Seafile 服务器 安装前的准备工作 安装 Seafile 服务器之前,请确认已安装以下软件 python 2.6.5+ or 2.7 python-setuptools python-simplejson python-imaging sqlite3 #Debian系统下 apt-get update apt-get install python2.7 python-setuptools python-simplejson python-imaging sqlite3 cd seafile-server-* ./setup-seafile.sh #运行安装脚本并回答预设问题 如果你的系统中没有安装上面的某个软件,那么 Seafile 初始化脚本会提醒你安装相应的软件包. [[images/server-setup.png]] 该脚本会依次询问你一些问题,从而一步步引导你配置 Seafile 的各项参数 参数 作用 说明 seafile server name seafile 服务器的名字,将来在客户端会显示 为这个名字 3 ~ 15 个字符,可以用英文字母,数字,下划 线 seafile server ip or domain seafile 服务器的 IP 地址或者域名 客户端将通过这个 IP 或者地址来访问你的 Seafile 服务 ccnet server port ccnet 使用的 TCP 端口 一般使用默认的10001 端口,如果已经被占 用,可以设置为其他的端口 seafile data dir seafile 数据存放的目录,用上面的例子,默 认将是 /data/haiwen/seafile-data seafile 数据将随着使用而逐渐增加,请把它放 在一个有足够大空闲空间的分区上 seafile server port seafile 服务器 使用的 TCP 端口 一般使用默认的 12001 端口,如果已经被占 用,可以设置为其他的端口 seafile fileserver port seafile fileserver 使用的 TCP 端口 一般使用默认的 8082 端口,如果已经被占用, 可以设置为其他的端口 如果安装正确完成,会打印成功消息 [[images/server-setup-successfully.png]] 现在你的目录结构将会是如下: 安装 #tree haiwen -L 2 haiwen ├── ccnet # configuration files │ ├── ccnet.conf │ ├── mykey.peer │ ├── PeerMgr │ └── seafile.ini ├── installed │ └── seafile-server_1.4.0_x86-64.tar.gz ├── seafile-data │ └── seafile.conf ├── seafile-server-1.4.0 # active version │ ├── reset-admin.sh │ ├── runtime │ ├── seafile │ ├── seafile.sh │ ├── seahub │ ├── seahub.sh │ ├── setup-seafile.sh │ └── upgrade ├── seafile-server-latest # symbolic link to seafile-server-1.4.0 ├── seahub-data │ └── avatars ├── seahub.db ├── seahub_settings.py # optional config file └── seahub_settings.pyc seafile-server-latest 文件夹是当前 Seafile 服务器文件夹的符号链接.将来你升级到新版本后, 升级脚本会自 动更新使其始终指向最新的 Seafile 服务器文件夹. 因为 Seafile 在客户端和服务器之间使用持续连接,如果你的客户端数量巨大, 你应该在启动 Seafile 之前 修改你的 Linux 文件最大打开数,如下: ulimit -n 30000 在 seafile-server-1.4.0 目录下,运行如下命令: 启动 Seafile: ./seafile.sh start # 启动 Seafile 服务 启动 Seahub ./seahub.sh start # 启动 Seahub 网站 (默认运行在8000端口上) 启动运行 Seafile 服务器 启动之前 启动 Seafile 服务器和 Seahub 网站 小贴士: 你第一次启动 seahub 时, seahub.sh 脚本会提示你创建一个 seafile 管理员帐号。 服务启动后, 打开浏览器并输入以下地址 http://192.168.1.111:8000/ 你会被重定向到登陆页面. 输入你在安装 Seafile 时提供的用户名和密码后,你会进入 Myhome 页面,新建 资料库. 恭喜! 现在你已经成功的安装了 Seafile 服务器. 如果你不想在默认的 8000 端口上运行 Seahub, 而是想自定义端口(比如8001)中运行,请按以下步骤操 作: 关闭 Seafile 服务器 ./seahub.sh stop # 停止 Seafile 进程 ./seafile.sh stop # 停止 Seahub 更改 haiwen/ccnet/ccnet.conf 文件中 SERVICE_URL 的值(假设你的 ip 或者域名时 192.168.1.100 ), 如 下: SERVICE_URL = http://192.168.1.100:8001 重启 Seafile 服务器 ./seafile.sh start # 启动 Seafile 服务 ./seahub.sh start 8001 # 启动 Seahub 网站 (运行在8001端口上) ccnet.conf 更多细节请看[[Seafile服务器配置选项]]. ./seahub.sh stop # 停止 Seahub ./seafile.sh stop # 停止 Seafile 进程 ./seafile.sh restart # 停止当前的 Seafile 进程,然后重启 Seafile ./seahub.sh restart # 停止当前的 Seahub 进程,并在 8000 端口重新启动 Seahub 在另一端口上运行 Seahub 关闭/重启 Seafile 和 Seahub 关闭 重启 如果停止/重启的脚本运行失败 大多数情况下 seafile.sh seahub.sh 脚本可以正常工作。如果遇到问题: 使用pgrep命令检查 seafile/seahub 进程是否还在运行中 pgrep -f seafile-controller # 查看 Seafile 进程 pgrep -f "manage.py run_gunicorn" # 查看 Seahub 进程 使用pkill命令杀掉相关进程 pkill -f seafile-controller # 结束 Seafile 进程 pkill -f "manage.py run_gunicorn" # 结束 Seafile 进程 查看 Seafile 更多信息请移至.. 管理员手册 OK! 此文档用来说明通过预编译好的安装包,来安装并运行基于 MySQL 的 Seafile 服务器. 到下载页面下载最新的服务器安装包. 假设你公司的名称为 haiwen,你也已经下载 seafile-server_1.4.0_* 到你的 home 目录下。 我们建议这样 的目录结构: mkdir haiwen mv seafile-server_* haiwen cd haiwen #将 seafile-server_* 移动到 haiwen 目录下后 tar -xzf seafile-server_* mkdir installed mv seafile-server_* installed 现在,你的目录看起来应该像这样: #tree haiwen -L 2 haiwen ├── installed │ └── seafile-server_1.8.2_x86-64.tar.gz └── seafile-server-1.8.2 ├── reset-admin.sh ├── runtime ├── seafile ├── seafile.sh ├── seahub ├── seahub.sh ├── setup-seafile.sh └── upgrade 这样设计目录的好处在于 和 seafile 相关的配置文件都可以放在 haiwen 目录下,便于集中管理. 后续升级时,你只需要解压最新的安装包到 haiwen 目录下. 这样你可以重用 haiwen 目录下已经存在的配置文件,而不用重新配置. Seafile 服务器有三个组件需要拥有自己的数据库: ccnet server seafile server seahub 部署 Seafile 服务器(使用 MySQL) 下载 部署和目录设计 准备 MySQL 数据库 Seafile 服务器组件更多信息请看[[Seafile服务器组件概览]]. 有两种方法可以初始化数据库: 1. 通过 setup-seafile-mysql.sh 脚本创建数据库. 2. 自己或其他人(比如数据库管理员)创建 我们建议采用第一种方法. 脚本会要求你提供 MySQL 数据库的的根密码,之后创建: ccnet/seafile/seahub 数据库 一个可以连接到这些数据库的用户 然而,有时你不得不使用第二种方法. 如果你没有根密码,你需要通过拥有这种权限的人(比如数据库管理 员)来帮助你创建三个数据库,和一个能连接这三个数据库的用户. 例如,为 ccnet/seafile/seahub 分别创 建如下三个数据库: ccnet-db / seafile-db / seahub-db , 和一个可以连接这三个数据库的 MySQL 用 户 seafile : create database `ccnet-db` character set = 'utf8'; create database `seafile-db` character set = 'utf8'; create database `seahub-db` character set = 'utf8'; create user 'seafile'@'localhost' identified by 'seafile'; GRANT ALL PRIVILEGES ON `ccnet-db`.* to `seafile`; GRANT ALL PRIVILEGES ON `seafile-db`.* to `seafile`; GRANT ALL PRIVILEGES ON `seahub-db`.* to `seafile`; 安装 Seafile 服务器之前,请确认已安装以下软件 python 2.6.5+ or 2.7 python-setuptools python-simplejson python-imaging python-mysqldb #在Debian/Ubuntu系统下 apt-get update apt-get install python2.7 python-setuptools python-simplejson python-imaging python-mysqldb cd seafile-server-* ./setup-seafile-mysql.sh #运行安装脚本并回答预设问题 如果你的系统中没有安装上面的某个软件,那么 Seafile初始化脚本会提醒你安装相应的软件包. 安装 Seafile 服务器 安装前的准备工作 安装 该脚本会依次询问你一些问题,从而一步步引导你配置 Seafile 的各项参数 参数 作用 说明 seafile server name seafile 服务器的名字,将来在客户端会显示 为这个名字 3 ~ 15 个字符,可以用英文字母,数字,下划 线 seafile server ip or domain seafile 服务器的 IP 地址或者域名 客户端将通过这个 IP 或者地址来访问你的 Seafile 服务 ccnet server port ccnet 使用的 TCP 端口 一般使用默认的10001 端口,如果已经被占 用,可以设置为其他的端口 seafile data dir seafile 数据存放的目录,用上面的例子,默 认将是 /data/haiwen/seafile-data seafile 数据将随着使用而逐渐增加,请把它放 在一个有足够大空闲空间的分区上 seafile server port seafile 服务器 使用的 TCP 端口 一般使用默认的 12001 端口,如果已经被占 用,可以设置为其他的端口 seafile fileserver port seafile fileserver 使用的 TCP 端口 一般使用默认的 8082 端口,如果已经被占用, 可以设置为其他的端口 seahub admin email sehaub管理员的登录帐户名 使用一个 email 地址 seahub admin password seahub 管理员的密码 在这里, 你会被要求选择一种创建 Seafile 数据库的方式: ------------------------------------------------------- Please choose a way to initialize seafile databases: ------------------------------------------------------- [1] Create new ccnet/seafile/seahub databases [2] Use existing ccnet/seafile/seahub databases 具体选择哪项, 取决于你是否拥有根密码. 如果选择 1 , 你需要提供根密码. 脚本程序会创建数据库和用户。 如果选择 2 , ccnet/seafile/seahub 数据库应该已经被你(或者其他人)提前创建。 如果选择 [1] Create new ccnet/seafile/seahub databases ,你会被问三个问题: Question Description Note mysql server host the host address of the mysql server the default is localhost mysql server port the port of the mysql server the default is 3306. Almost every mysql server uses this port. root password the password of mysql root account the root password is required to create new databases and a new user mysql user for seafile the username for seafile programs to use to access MySQL server if the user does not exist, it would be created password for seafile mysql user the password for the user above ccnet dabase name the name of the database used by ccnet, default is "ccnet-db" the database would be created if not existing seafile dabase name the name of the database used by seafile, default is "seafile-db" the database would be created if not existing seahub dabase name the name of the database used by seahub, default is "seahub-db" the database would be created if not existing 如果你选择 [2] Use existing ccnet/seafile/seahub databases , 你会被问到如下三个问题: Question Description Note mysql server host the host address of the mysql server the default is localhost mysql server port the port of the mysql server the default is 3306. Almost every mysql server uses this port mysql user for seafile the user for seafile programs to use to access MySQL server the user must already exists password for seafile mysql user the password for the user above ccnet dabase name the name of the database used by ccnet this database must already exist seafile dabase name the name of the database used by seafile, default is "seafile-db" this database must already exist seahub dabase name the name of the database used by seahub, default is "seahub-db" this database must already exist 如果安装正确完成,你会看到下面这样的输出 现在你的目录结构看起来应该是这样: #tree haiwen -L 2 haiwen ├── ccnet # configuration files │ ├── ccnet.conf │ ├── mykey.peer │ ├── PeerMgr │ └── seafile.ini ├── installed │ └── seafile-server_1.8.2_x86-64.tar.gz ├── seafile-data │ └── seafile.conf ├── seafile-server-1.8.2 # active version │ ├── reset-admin.sh │ ├── runtime │ ├── seafile │ ├── seafile.sh │ ├── seahub │ ├── seahub.sh │ ├── setup-seafile.sh │ └── upgrade ├── seafile-server-latest # symbolic link to seafile-server-1.8.2 ├── seahub-data │ └── avatars ├── seahub_settings.py # optional config file └── seahub_settings.pyc seafile-server-latest 文件夹为指向当前 Seafile 服务器文件夹的符号链接. 将来你升级到新版本后, 升级脚本 会自动更新使其始终指向最新的 Seafile 服务器文件夹.. 因为 Seafile 在客户端和服务器之间使用持续连接,如果你的客户端数量巨大, 你应该在启动 Seafile 之前 修改你的 Linux 文件最大打开数,如下: ulimit -n 30000 在 seafile-server-1.8.2 目录下,运行如下命令 启动 Seafile: ./seafile.sh start # 启动 Seafile 服务 启动 Seahub ./seahub.sh start # 启动 Seahub 网站 (默认运行在8000端口上) 启动 Seafile 服务器 启动之前 启动 Seafile 服务器和 Seahub 网站 小贴士: 你第一次启动 seahub 时, seahub.sh 脚本会提示你创建一个 seafile 管理员帐号。 服务启动后, 打开浏览器并输入以下地址 http://192.168.1.111:8000/ 你会被重定向到登陆页面. 输入你在安装 Seafile 时提供的用户名和密码后,你会进入 Myhome 页面,新建 资料库. 恭喜! 现在你已经成功的安装了 Seafile 服务器. 如果你不想在默认的 8000 端口上运行 Seahub, 而是想自定义端口(比如8001)中运行,请按以下步骤操 作: 关闭 Seafile 服务器 ./seahub.sh stop # 停止 Seafile 进程 ./seafile.sh stop # 停止 Seahub 更改 haiwen/ccnet/ccnet.conf 文件中 SERVICE_URL 的值(假设你的 ip 或者域名时 192.168.1.100 ), 如 下: SERVICE_URL = http://192.168.1.100:8001 重启 Seafile 服务器 ./seafile.sh start # 启动 Seafile 服务 ./seahub.sh start 8001 # 启动 Seahub 网站 (运行在8001端口上) ccnet.conf 更多细节请看(server_configuration.md) . ./seahub.sh stop # 停止 Seahub ./seafile.sh stop # 停止 Seafile 进程 ./seafile.sh restart # 停止当前的 Seafile 进程,然后重启 Seafile ./seahub.sh restart # 停止当前的 Seahub 进程,并在 8000 端口重新启动 Seahub 在另一端口上运行 Seahub 关闭/重启 Seafile 和 Seahub 关闭 重启 如果停止/重启的脚本运行失败 大多数情况下 seafile.sh seahub.sh 脚本可以正常工作。如果遇到问题: 使用pgrep命令检查 seafile/seahub 进程是否还在运行中 pgrep -f seafile-controller # 查看 Seafile 进程 pgrep -f "manage.py run_gunicorn" # 查看 Seahub 进程 使用pkill命令杀掉相关进程 pkill -f seafile-controller # 结束 Seafile 进程 pkill -f "manage.py run_gunicorn" # 结束 Seafile 进程 查看seafile更多信息请移至.. Nginx 下配置 Seahub / Apache 下配置 Seahub Nginx 下启用 Https / Apache 下启用 Https Seafile LDAP配置 管理员手册 OK! Ubuntu 下安装 python-flup 库: sudo apt-get install python-flup Seahub 是 Seafile 服务器的网站界面. FileServer 用来处理浏览器端文件的上传与下载. 默认情况下, 它在 8082 端口上监听 HTTP 请求. 这里我们通过 fastcgi 部署 Seahub, 通过反向代理(Reverse Proxy)部署 FileServer. 我们假设你已经将 Seahub 绑定了域名"www.myseafile.com". 这是一个 Nginx 配置文件的例子. server { listen 80; server_name www.myseafile.com; location / { fastcgi_pass 127.0.0.1:8000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param REMOTE_ADDR $remote_addr; access_log /var/log/nginx/seahub.access.log; error_log /var/log/nginx/seahub.error.log; } location /seafhttp { rewrite ^/seafhttp(.*)$ $1 break; proxy_pass http://127.0.0.1:8082; client_max_body_size 0; proxy_connect_timeout 36000s; proxy_read_timeout 36000s; } location /media { root /home/user/haiwen/seafile-server-latest/seahub; } } Nginx 默认设置 "client_max_body_size" 为 1M。如果上传文件大于这个值的话,会报错,相关 HTTP 状 Nginx 下配置 Seahub 准备工作 Nginx 环境下部署 Seahub/FileServer 态码为 423 ("Request Entity Too Large"). 你可以将值设为 0 以禁用此功能. 你需要在 /data/haiwen/ccnet/ccnet.conf 的 SERVICE_URL 字段中自定义域名。 SERVICE_URL = http://www.myseafile.com 注意:如果你改变了 Seahub的域名,也需要同步更改 SERVICE_URL . 请在 seahub_settings.py 新增一行,设定 FILE_SERVER_ROOT 的值 FILE_SERVER_ROOT = 'http://www.myseafile.com/seafhttp' ./seafile.sh start ./seahub.sh start-fastcgi 修改 ccnet.conf 和 seahub_setting.py 修改 ccnet.conf 修改 seahub_settings.py 启动 Seafile 和 Seahub 免费 Self-Signed SSL 数字认证用户请看. 如果你是 SSL 付费认证用户可跳过此步. openssl genrsa -out privkey.pem 2048 openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095 如果你的 Nginx 并不支持 SSL, 请重新编译, 相关命令如下: ./configure --with-http_stub_status_module --with-http_ssl_module make && make install 假设你已经按照[[在Nginx环境下部署Seafile]]对 nginx 进行了相关设置. 请修改 nginx 配置文件以使用 HTTPS. server { listen 80; server_name www.yourdoamin.com; rewrite ^ https://$http_host$request_uri? permanent; #强制将http重定向到https } server { listen 443; ssl on; ssl_certificate /etc/ssl/cacert.pem; #cacert.pem 文件路径 ssl_certificate_key /etc/ssl/privkey.pem; #privkey.pem 文件路径 server_name www.yourdoamin.com; # ...... fastcgi_param HTTPS on; fastcgi_param HTTP_SCHEME https; } 这里是配置文件示例: Nginx 下启用 Https 在 Seahub 端启用 https 通过 OpenSS L生成 SSL 数字认证 启用 Nginx 的 SSL 模块 (可选) 修改 Nginx 配置文件 配置文件示例 server { listen 80; server_name www.yourdoamin.com; rewrite ^ https://$http_host$request_uri? permanent; #强制将http重定向到https } server { listen 443; ssl on; ssl_certificate /etc/ssl/cacert.pem; #cacert.pem 文件路径 ssl_certificate_key /etc/ssl/privkey.pem; #privkey.pem 文件路径 server_name www.yourdoamin.com; location / { fastcgi_pass 127.0.0.1:8000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param HTTPS on; fastcgi_param HTTP_SCHEME https; access_log /var/log/nginx/seahub.access.log; error_log /var/log/nginx/seahub.error.log; } location /seafhttp { rewrite ^/seafhttp(.*)$ $1 break; proxy_pass http://127.0.0.1:8082; client_max_body_size 0; } location /media { root /home/user/haiwen/seafile-server-latest/seahub; } } nginx -s reload 因为你想使用 https 而非 http, 你需要修改 ccnet/ccnet.conf 中SERVICE_URL字段的值: SERVICE_URL = https://www.yourdomain.com 重新加载 Nginx 修改相关配置以使用 https ccnet 配置 seahub_settings.py 配置 FILE_SERVER_ROOT = 'https://www.yourdomain.com/seafhttp' ./seafile.sh start ./seahub.sh start-fastcgi 启动 Seafile 和 Seahub 1. Ubuntu 下安装 python-flup 库: sudo apt-get install python-flup 2. Ubuntu 下安装和启用 mod_fastcgi 和 mod_rewrite : sudo apt-get install libApache2-mod-fastcgi sudo a2enmod rewrite sudo a2enmod fastcgi 3. 启用 Apache proxy sudo a2enmod proxy_http Seahub 是 Seafile 服务器的网站界面. FileServer 用来处理浏览器端文件的上传与下载. 默认情况下, 它在 8082 端口上监听 HTTP 请求. 这里我们通过 fastcgi 部署 Seahub, 通过反向代理(Reverse Proxy)部署 FileServer. 我们假设你已经将 Seahub 绑定了域名"www.myseafile.com". 首先编辑你的 Apache 配置文件.根据你的 Linux 版本, 你需要在文件末尾增加以下语句: Apache2.conf , for ubuntu/debian: FastCGIExternalServer /var/www/seahub.fcgi -host 127.0.0.1:8000 httpd.conf , for centos/fedora: FastCGIExternalServer /var/www/html/seahub.fcgi -host 127.0.0.1:8000 注意, seahub.fcgi 只是一个位置标识符, 你并不需要在你的系统中新建这个文件夹. 二, 修改 Apache 配置文件: ( sites-enabled/000-default ) for ubuntu/debian ( vhost.conf ) for centos/fedora Apache 下配置 Seahub 准备工作 Apache 环境下部署 Seahub/FileServer ServerName www.myseafile.com DocumentRoot /var/www Alias /media /home/user/haiwen/seafile-server-latest/seahub/media RewriteEngine On Require all granted # # seafile fileserver # ProxyPass /seafhttp http://127.0.0.1:8082 ProxyPassReverse /seafhttp http://127.0.0.1:8082 RewriteRule ^/seafhttp - [QSA,L] # # seahub # RewriteRule ^/(media.*)$ /$1 [QSA,L,PT] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /seahub.fcgi$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 你需要在 /data/haiwen/ccnet/ccnet.conf 的 SERVICE_URL 字段中自定义域名。 SERVICE_URL = http://www.myseafile.com 注意:如果你改变了 Seahub 的域名,也需要同步更改 SERVICE_URL . 请在 seahub_settings.py 新增一行,设定 FILE_SERVER_ROOT 的值 FILE_SERVER_ROOT = 'http://www.myseafile.com/seafhttp' sudo service Apache2 restart ./seafile.sh start ./seahub.sh start-fastcgi 修改 ccnet.conf 和 seahub_setting.py 修改 ccnet.conf 修改 seahub_settings.py 启动 Seafile 和 Seahub 其他说明 阅读Seafile 组件会帮你更好的理解 Seafile 在 Seafile 服务器端有两个组件:Seahub 和 FileServer。 FileServer 通过监听 8082 端口处理文件的上传 与下载. Seahub 通过监听 8000 端口负责其他的WEB页面。在 https 下, Seahub 应该通过 fastcgi 模式监 听 8000 端口 (运行./seahub.sh start-fastcgi). 而且在 fastcgi 模式下, 如果直接访 问 http://domain:8000 时,会返回错误页面. 当一个用户访问 https://domain.com/home/my/ 时, Apache 接受到访问请求后,通过 fastcgi 将其转发至 Seahub。 可通过以下配置来实现: # # seahub # RewriteRule ^/(media.*)$ /$1 [QSA,L,PT] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^/(seahub.*)$ /seahub.fcgi/$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 和 FastCGIExternalServer /var/www/seahub.fcgi -host 127.0.0.1:8000 当一个用户在 Seahub 中点击文件下载链接时, Seahub 读取 FILE_SERVER_ROOT 的值,并将其用户重定 向到 https://domain.com/seafhttp/xxxxx/ 。当 Apache 在 https://domain.com/seafhttp/xxxxx/ 接收到访问 请求后, 它把请求发送到正在监听 127.0.0.1:8082 的 FileServer 组件, 可通过以下配置来实现: ProxyPass /seafhttp http://127.0.0.1:8082 ProxyPassReverse /seafhttp http://127.0.0.1:8082 RewriteRule ^/seafhttp - [QSA,L] 免费 Self-Signed SSL 数字认证用户请看. 如果你是 SSL 付费认证用户可跳过此步. openssl genrsa -out privkey.pem 2048 openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095 假设你已经按照Apache 下配置 Seahub对 Apache 进行了相关设置.请启用 mod_ssl [sudo] a2enmod ssl Windows 下, 你需要在 httpd.conf 中增加 SSL 模块 LoadModule ssl_module modules/mod_ssl.so 接下来修改你的Apache配置文件,这是示例: ServerName www.myseafile.com DocumentRoot /var/www Alias /media /home/user/haiwen/seafile-server-latest/seahub/media SSLEngine On SSLCertificateFile /path/to/cacert.pem SSLCertificateKeyFile /path/to/privkey.pem RewriteEngine On # # seafile fileserver # ProxyPass /seafhttp http://127.0.0.1:8082 ProxyPassReverse /seafhttp http://127.0.0.1:8082 RewriteRule ^/seafhttp - [QSA,L] # # seahub # RewriteRule ^/(media.*)$ /$1 [QSA,L,PT] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /seahub.fcgi/$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] Apache 下启用 Https 通过 OpenSSL 生成 SSL 数字认证 在 Seahub 端启用 https 修改相关配置以使用 https 因为你想使用 https 而非 http, 你需要修改 ccnet/ccnet.conf 中 SERVICE_URL 字段的值: SERVICE_URL = https://www.myseafile.com FILE_SERVER_ROOT = 'https://www.myseafile.com/seafhttp' ./seafile.sh start ./seahub.sh start-fastcgi 阅读Seafile 组件会帮你更好的理解 Seafile. 在 Seafile 服务器端的两个组件:Seahub 和 FileServer. FileServer 通过监听 8082 端口处理文件的上传与 下载. Seahub 通过监听 8000 端口负责其他的WEB页面. 但是在 https 下, Seahub 应该通过 fastcgi 模式监 听8000端口 (运行 ./seahub.sh start-fastcgi ). 而且在 fastcgi 模式下, 如果直接访问 http://domain:8000 , 会返回错误页面. 当一个用户访问 https://domain.com/home/my/ 时, Apache 接受到访问请求后,通过 fastcgi 将其转发至 Seahub. 可通过以下配置来实现: # # seahub # RewriteRule ^/(media.*)$ /$1 [QSA,L,PT] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^/(seahub.*)$ /seahub.fcgi/$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] and FastCGIExternalServer /var/www/seahub.fcgi -host 127.0.0.1:8000 当一个用户在 Seahub 中点击文件下载链接时, Seahub 读取 FILE_SERVER_ROOT 的值,并将其用户重定 向到 https://domain.com/seafhttp/xxxxx/ . https://domain.com/seafhttp 是 FILE_SERVER_ROOT 的值. 这 里, FILE_SERVER 表示是 Seafile 中只负责文件上传与下载的的 FileServer 组件. 当 Apache 在 https://domain.com/seafhttp/xxxxx/ 接收到访问请求后,它把请求发送到正在监 听 127.0.0.1:8082 的 FileServer 组件,可通过以下配置来实现: ccnet 配置 seahub_settings.py 配置 启动Seafile和Seahub 其他说明 ProxyPass /seafhttp http://127.0.0.1:8082 ProxyPassReverse /seafhttp http://127.0.0.1:8082 RewriteRule ^/seafhttp - [QSA,L] 在目前的 Seahub,只支持 email 格式的用户名登陆,所以,使用 UNIX 和 Windows Domain 用户名并不 能登录到 Seahub,后续版本中会对此进行改进. Seafile 会通过数据库和 LDAP 来搜寻用户. 默认首先搜寻 LDAP. (请注意,在安装时设置的 Seafile 管理 员账户,会始终保存在 SQLite/MySQL 数据库中。) 请在 ccnet.conf 下增加以下语句,以使用 LDAP 进行用户认证。 [LDAP] # 主机的 LDAP URL, 支持ldap://, ldaps:// and ldapi:// # 为了使用 TLS, 请对 LDAP 服务器进行配置使其能够监听 LDAPS # 端口, 并在这里指明 ldaps:// 地址. HOST = ldap://ldap.example.com # 设置所有用户均可访问 base DN BASE = ou=users,dc=example,dc=com # 管理员用户 DN 绑定 LDAP. 如未设定,使用默认设置. USER_DN = cn=seafileadmin,dc=example,dc=com # 管理员用户的 DN 密码 PASSWORD = secret # 用户登陆ID, 默认使用邮件格式. LOGIN_ATTR = mail LDAP 配置示例: [LDAP] HOST = ldap://192.168.1.123/ BASE = ou=users,dc=example,dc=com USER_DN = cn=admin,dc=example,dc=com PASSWORD = secret LOGIN_ATTR = mail 活动目录(Active Directory)配置示例: [LDAP] HOST = ldap://192.168.1.123/ BASE = cn=users,dc=example,dc=com USER_DN = cn=admin,cn=users,dc=example,dc=com # or use admin@example.local etc PASSWORD = secret LOGIN_ATTR = mail 如果你使用活动目录(Active Directory)但并没有向用户提供 Email 地址,可进行如下配置:: Seafile LDAP配置 LINUX 下连接LDAP/AD [LDAP] HOST = ldap://192.168.1.123/ BASE = cn=users,dc=example,dc=com USER_DN = cn=admin,cn=users,dc=example,dc=com # or use admin@example.local etc PASSWORD = secret LOGIN_ATTR = userPrincipalName userPrincipalName 是 AD 提供的用户名, 通常隶属于 username@domain-name , 而这里的 username 是 指 Windows 用户登录名. 用户可以通过 username@domain-name 登录到 Seahub, 比 如 poweruser@example.com . 注意这样的用户登陆名并不是实际的 email 地址,Seahub 在这种设置下, 邮件发送功能会失效. 注意: 1. 如果配置项包含中文,需要确保配置文件使用 UTF8 编码保存。 2. 这个文档中描述的配置方法经过很多人在不同的 LDAP/AD 环境下试过,肯定是能工作的。 Windows 下的配置语法与 Linux 下的有些不同. 你不需要增加 ldap:// prefix to the HOST field . 请在 ccnet.conf 下增加以下语句,以使用 LDAP 进行用户认证。 [LDAP] # 在 HOST 域指定 LDAP/AD 服务器端口 HOST = ldap.example.com[:port] # 默认为 'false'. 如果希望 Seafile 可通过 SSL 连接到 LDAP 服务器,请设置为 true. USE_SSL = true | false # 设置所有用户均可方位 base DN BASE = ou=users,dc=example,dc=com # 管理员用户 DN 绑定 LDAP. 如未设定,使用默认设置. USER_DN = cn=seafileadmin,dc=example,dc=com # 管理员用户的 DN 密码 PASSWORD = secret # 用户登陆ID, 默认使用邮件格式. LOGIN_ATTR = mail LDAP 配置示例: [LDAP] HOST = 192.168.1.123 BASE = ou=users,dc=example,dc=com USER_DN = cn=admin,dc=example,dc=com PASSWORD = secret LOGIN_ATTR = mail 活动目录(Active Directory)配置示例: 通过 Windows 服务器连接到 LDAP/AD [LDAP] HOST = 192.168.1.123 BASE = cn=users,dc=example,dc=com USER_DN = cn=admin,cn=users,dc=example,dc=com # or use admin@example.local etc PASSWORD = secret LOGIN_ATTR = mail 如果你使用活动目录(Active Directory)但并没有向用户提供 email 地址,可进行如下配置:: [LDAP] HOST = 192.168.1.123 BASE = cn=users,dc=example,dc=com USER_DN = cn=admin,cn=users,dc=example,dc=com # or use admin@example.local etc PASSWORD = secret LOGIN_ATTR = userPrincipalName userPrincipalName 是 AD 提供的用户名, 通常隶属于 username@domain-name , 而这里的 username 是 指 Windows 用户登录名. 用户可以通过 username@domain-name 登录到 Seahub, 比 如 poweruser@example.com . 注意这样的用户登陆名并不是实际的 email 地址,Seahub 在这种设置下, 邮件发送功能会失效. 当你的公司在使用 Seafile 并且有多于一个 OUs 的时候,多重基准标识名多重基准标识名(Multiple base DN)会很有用处.你可以在"BASE"配置中指定一个基准标识名(base DN)的列表,标识名由";"分开, 比 如: cn=developers,dc=example,dc=com;cn=marketing,dc=example,dc=com 当你的公司组织庞大,但是只有一小部分人使用 Seafile 的时候,搜索过滤器(Search filter)会很有用处. 过滤器可以通过修改"FILTER"配置来实现,例如,在 LDAP 配置中增加以下语句: FILTER = memberOf=CN=group,CN=developers,DC=example,DC=com 请注意上面的示例只是象征性的简介. memberOf 只有在活动目录(Active Directory)中才适用. 这里是另一个示例: FILTER = &(!(UserAccountControl:1.2.840.113556.1.4.803:=2)) 请参考这里 这是因为预编译安装包是在 CentOS 下完成编译与发布的,所以 libldap 会在 /etc/openldap/ldap.conf 查找 配置文件. 而Ubuntu/Debian 使用的是 /etc/ldap/ldap.conf 这个配置文件. 所以在客户端中找不到 CA 文件的 多重基准标识名(Multiple base DN)/可选搜索过滤器(Additional search filter) 常见问题及解决方案 Ubuntu/Debian 下 ldaps(LDAP over SSL)不能正常运行 路径。 解决方法如下 mkdir /etc/openldap && ln -s /etc/ldap/ldap.conf /etc/openldap/ Ubuntu 下,我们使用了这个/etc/init.d/这个脚本来设置 Seafile/Seahub 开机启动. sudo vim /etc/init.d/seafile-server 脚本内容为: (同时需要修改相应的 user 和 script\_path 字段的值) 开机启动 Seafile Ubuntu 下 创建/etc/init.d/seafile-server脚本 #!/bin/sh # 请将 user 改为你的Linux用户名 user=haiwen # 请将 script_dir 改为你的 Seafile 文件安装路径 seafile_dir=/data/haiwen script_path=${seafile_dir}/seafile-server-latest seafile_init_log=${seafile_dir}/logs/seafile.init.log seahub_init_log=${seafile_dir}/logs/seahub.init.log # 若使用 fastcgi, 请将其设置为true fastcgi=false # fastcgi 端口, 默认为 8000. fastcgi_port=8000 case "$1" in start) sudo -u ${user} ${script_path}/seafile.sh start >> ${seafile_init_log} if [ $fastcgi = true ]; then sudo -u ${user} ${script_path}/seahub.sh start-fastcgi ${fastcgi_port} >> ${seahub_init_log} else sudo -u ${user} ${script_path}/seahub.sh start >> ${seahub_init_log} fi ;; restart) sudo -u ${user} ${script_path}/seafile.sh restart >> ${seafile_init_log} if [ $fastcgi = true ]; then sudo -u ${user} ${script_path}/seahub.sh restart-fastcgi ${fastcgi_port} >> ${seahub_init_log} else sudo -u ${user} ${script_path}/seahub.sh restart >> ${seahub_init_log} fi ;; stop) sudo -u ${user} ${script_path}/seafile.sh $1 >> ${seafile_init_log} sudo -u ${user} ${script_path}/seahub.sh $1 >> ${seahub_init_log} ;; *) echo "Usage: /etc/init.d/seafile {start|stop|restart}" exit 1 ;; esac 注意: 如果你想在 fastcgi 下运行 Seahub,请设置 fastcgi 变量为 true mkdir /path/to/seafile/dir/logs 为日志文件创建目录 创建/etc/init/seafile-server.conf文件 非使用 MySQL start on (runlevel [2345]) stop on (runlevel [016]) pre-start script /etc/init.d/seafile-server start end script post-stop script /etc/init.d/seafile-server stop end script start on (started mysql and runlevel [2345]) stop on (runlevel [016]) pre-start script /etc/init.d/seafile-server start end script post-stop script /etc/init.d/seafile-server stop end script sudo chmod +x /etc/init.d/seafile-server 在升级 Seafile 服务器后请记得更新 script\_path 的值. sudo vim /etc/init.d/seafile-server 脚本内容为: (同时需要修改相应的 user 和 script\_path 字段的值) 使用 MySQL 设置 seafile-sever 脚本为可执行文件 完成 其他 Debian 系的 Linux 下 创建脚本/etc/init.d/seafile-server #!/bin/sh ### BEGIN INIT INFO # Provides: seafile-server # Required-Start: $local_fs $remote_fs $network # Required-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Starts Seafile Server # Description: starts Seafile Server ### END INIT INFO # 请将 user 改为你的Linux用户名 user=haiwen # 请将 script_path 改为你的 Seafile 文件安装路径 seafile_dir=/data/haiwen script_path=${seafile_dir}/seafile-server-latest seafile_init_log=${seafile_dir}/logs/seafile.init.log seahub_init_log=${seafile_dir}/logs/seahub.init.log # 若使用 fastcgi, 请将其设置为true fastcgi=false # fastcgi 端口, 默认为 8000. fastcgi_port=8000 case "$1" in start) sudo -u ${user} ${script_path}/seafile.sh start >> ${seafile_init_log} if [ $fastcgi = true ]; then sudo -u ${user} ${script_path}/seahub.sh start-fastcgi ${fastcgi_port} >> ${seahub_init_log} else sudo -u ${user} ${script_path}/seahub.sh start >> ${seahub_init_log} fi ;; restart) sudo -u ${user} ${script_path}/seafile.sh restart >> ${seafile_init_log} if [ $fastcgi = true ]; then sudo -u ${user} ${script_path}/seahub.sh restart-fastcgi ${fastcgi_port} >> ${seahub_init_log} else sudo -u ${user} ${script_path}/seahub.sh restart >> ${seahub_init_log} fi ;; stop) sudo -u ${user} ${script_path}/seafile.sh $1 >> ${seafile_init_log} sudo -u ${user} ${script_path}/seahub.sh $1 >> ${seahub_init_log} ;; *) echo "Usage: /etc/init.d/seafile {start|stop|restart}" exit 1 ;; esac 注意: 如果你想在 fastcgi 下运行 Seahub,请设置 fastcgi 变量为 true 为日志文件创建目录 mkdir /path/to/seafile/dir/logs sudo chmod +x /etc/init.d/seafile-server sudo update-rc.d seafile-server defaults 在升级 Seafile 服务器后请记得更新 script\_path 的值. RHEL/CentOS 下,/etc/rc.local脚本会随系统开机自动执行,所以我们在这个脚本中设置启动Seafile/Seahub. 定位 python(python 2.6 or 2.7) which python2.6 # or "which python2.7" 在 /etc/rc.local 脚本中, 将 python2.6(2.7)路径加入到PATH字段中, 并增加 Seafile/Seahub 启动命令 ` # 假设 python 2.6(2.7) 可执行文件在 /usr/local/bin 目录下 PATH=$PATH:/usr/local/bin/ # 请将 user 改为你的Linux用户名 user=haiwen # 请将 script_path 改为你的 Seafile 文件安装路径 seafile_dir=/data/haiwen script_path=${seafile_dir}/seafile-server-latest sudo -u ${user} ${script_path}/seafile.sh start > /tmp/seafile.init.log 2>&1 sudo -u ${user} ${script_path}/seahub.sh start > /tmp/seahub.init.log 2>&1 注意: 如果你想在fastcgi下启动Seahub,只需将上文中最后一行"seahub.sh start"改为"seahub.sh start- fastcgi" 完成. 在升级 Seafile 服务器后请记得更新 script\_pat 的值. RHEL/CentOS 下 , 我们通过 /etc/init.d/ 脚本将 Seafile/Seahub作为服务程序随开机启动. 设置 seafile-sever 脚本为可执行文件 在 rc.d 中新增 seafile-server 完成 RHEL/CentOS 下 只使用 RHEL/CentOS 为服务程序(service)下 # 请将 user 改为你的Linux用户名 user=haiwen # 请将 script_path 改为你的 Seafile 文件安装路径 seafile_dir=/home/haiwen script_path=${seafile_dir}/seafile-server-latest seafile_init_log=${seafile_dir}/logs/seafile.init.log seahub_init_log=${seafile_dir}/logs/seahub.init.log # 若使用 fastcgi, 请将其设置true fastcgi=false # fastcgi 端口, 默认为 8000. fastcgi_port=8000 #!/bin/bash # # seafile # # chkconfig: - 68 32 # description: seafile # Source function library. . /etc/init.d/functions # Source networking configuration. . /etc/sysconfig/network if [ -f /etc/sysconfig/seafile ];then . /etc/sysconfig/seafile else echo "Config file /etc/sysconfig/seafile not found! Bye." exit 200 fi RETVAL=0 start() { # Start daemons. echo -n $"Starting seafile: " ulimit -n 30000 su - ${user} -c"${script_path}/seafile.sh start >> ${seafile_init_log} 2>&1" RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/seafile return $RETVAL } stop() { echo -n $"Shutting down seafile: " su - ${user} -c"${script_path}/seafile.sh stop >> ${seafile_init_log} 2>&1" RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/seafile 创建/etc/sysconfig/seafile文件 创建/etc/init.d/seafile文件 [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/seafile return $RETVAL } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart|reload) stop start RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart}" RETVAL=3 esac exit $RETVAL #!/bin/bash # # seahub # # chkconfig: - 69 31 # description: seahub # Source function library. . /etc/init.d/functions # Source networking configuration. . /etc/sysconfig/network if [ -f /etc/sysconfig/seafile ];then . /etc/sysconfig/seafile else echo "Config file /etc/sysconfig/seafile not found! Bye." exit 200 fi RETVAL=0 start() { # Start daemons. echo -n $"Starting seahub: " ulimit -n 30000 if [ $fastcgi = true ]; then su - ${user} -c"${script_path}/seahub.sh start-fastcgi ${fastcgi_port} >> ${seahub_init_log} 2>&1" else su - ${user} -c"${script_path}/seahub.sh start >> ${seahub_init_log} 2>&1" fi RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/seahub 创建/etc/init.d/seahub脚本 [ $RETVAL -eq 0 ] && touch /var/lock/subsys/seahub return $RETVAL } stop() { echo -n $"Shutting down seafile: " su - ${user} -c"${script_path}/seahub.sh stop >> ${seahub_init_log} 2>&1" RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/seahub return $RETVAL } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart|reload) stop start RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart}" RETVAL=3 esac exit $RETVAL 接下来启动服务程序: chmod 550 /etc/init.d/seafile chmod 550 /etc/init.d/seahub chkconfig --add seafile chkconfig --add seahub chkconfig seahub on chkconfig seafile on 执行: service seafile start service seahub start 完成 默认情况下,我们开启了以下四个端口: Seahub 8000 FileServer 8082 Ccnet Daemon 10001 Seafile Daemon 12001 如果你在 Nginx/Apache 下运行 Seafile,并且使用了 HTTPS, 请开启以下端口: HTTPS 443 Ccnet Daemon 10001 Seafile Daemon 12001 自 3.1 版本以后,seaf-server 和 ccnet-server 支持通过接收 SIGUR1 信号来管理日志文件。 这个功能在你需要剪切日志文件但是不想关闭服务器的时候非常有用。 注意: 此功能在 Windows 下并不适用 对于 Debian, logrotate 默认存储在 /etc/logrotate.d/ 假设你的 ccnet-server 的日志文件是 /home/haiwen/logs/ccnet.log , ccnet-server 进程的 pidfile 是 /home/haiwen/pids/ccnet.pid . seaf-server's 的日志文件是 /home/haiwen/logs/seaf-server.log , seaf- server 进程的 pidfile 是 /home/haiwen/pids/seaf-server.pid : 则请按如下配置 logroate: /home/haiwen/logs/seaf-server.log { daily missingok rotate 52 compress delaycompress notifempty sharedscripts postrotate [ ! -f /home/haiwen/pids/seaf-server.pid ] || kill -USR1 `cat /home/haiwen/pids/seaf-server.pid` endscript } /home/haiwen/logs/ccnet.log { daily missingok rotate 52 compress delaycompress notifempty sharedscripts postrotate [ ! -f /home/haiwen/pids/ccnet.pid ] || kill -USR1 `cat /home/haiwen/pids/ccnet.pid` endscript } 对于 Debian 用户, 可以将以上配置文件存储在 /etc/logrotate.d/seafile 在服务器端设置 logrotate 工作原理 logrotate 默认配置 配置示例 Seahub 将默认在 /tmp/seahub_cache/ 中缓存文件(avatars, profiles, etc),但是可以使用 memcached 更 改缓存设置。 首先安装 python-memcache, 并在 seahub_settings.py 中加入以下配置信息. CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } } 注意: 请重启 Seahub 以使更改生效. 如果更改没有生效,请删除 seahub_setting.pyc 缓存文件. ./seahub.sh restart 使用 memcached 通过广域网(WAN)访问部署在局域网(LAN)的 Seafile 服务器,需要: 一台支持端口转发的路由器 使用动态域名解析服务 配置 Seafile 服务器 首先,按照部署 Seafile 服务器(使用 SQLite)安装 Seafile 服务器。 并确保以下功能正常运行: 正常访问 Seahub 网站 在 Seafile 客户端可以下载/同步一个资料库 首先, 确保你的路由器支持端口转发功能: 根据路由器管理手册操作说明(或网络搜索), 进入路由器的管理用户界面。 找到包含 "转发" 或者 "高级" 等关键词的页面, 说明此路由器支持端口转发功能。 Seafile 服务器包含很多组件, 请根据以下规则为所有组件设置端口转发。 组件 默认端口 ccnet 10001 seaf-server 12001 fileserver 8082 seahub 8000 如果是在 Apache/Nginx 环境下部署的 Seafile, 则不需要打开 8000 和 8082 端口。 以上是默认端口设置,具体配置可自行更改. 设置端口转发后,可按以下步骤测试是否成功: 打开一个命令行终端 访问 http://who.is 得到本机的IP 通过以下命令连接 Seahub 防火墙 / NAT 设置 安装 Seafile 服务器 在路由器中设置端口转发 确保路由器支持端口转发功能 设置路由转发规则 端口转发测试 telnet 8000 如果端口转发配置成功,命令行会提示连接成功。否则, 会显示 connection refused 或者 connection timeout, 提示连接不成功。 若未成功,原因可能如下: 端口转发配置错误 需要重启路由器 网络不可用 ccnet.conf 中的 "SERVICE_URL" 字段,是用来在在线访问文件时,生成上传/下载链接的,更改此字段 的值为你的IP。 SERVICE_URL = http://:8000 大部分路由器都支持 NAT loopback. 当你通过内网访问 Seafile 时, 即时你的外部 IP 被占用,文件上传/下 载仍然会工作。 完成以上端口转发配置工作后,就可以通过外网 IP 访问部署在局域网内的 Seafile 服务器了。但是对于大 多数人来说, 外网 IP 会被 ISP (互联网服务提供商)定期更改, 这就使得,需要不断的进行重新配置. 可以使用动态域名解析服务来解决这个问题。通过使用域名解析服务,你可以通过域名(而不是 IP)来访 问 Seahub,即使 IP 会不断变化,但是域名始终会指向当前 IP。 互联网上提供域名解析服务的有很多,我们推荐 www.noip.com。 怎样使用域名解析服务,不在本手册说明范围之内,但是基本上,你需要遵循以下步骤: 1. 选择一个域名解析服务提供商。 2. 注册成为此服务商的一个用户。 当你配置好域名解析服务之后,需要对 ccnet.conf 进行更改: SERVICE_URL = http://<你的域名>:8000 然后重新 Seafile 服务. 设置 SERVICE_URL 使用域名解析服务 为什么使用动态域名解析服务? 更改 Seafile 配置 网络设置 默认情况下,你需要打开以下四个端口. | | Seahub | 8000 |- | FileServer | 8082 |- | Ccnet Daemon | 10001 |- | Seafile Daemon | 12001 | 如果你的 Seafile 服务器是运行在 Nginx/Apache 环境下,并且开启了 HTTPS, 则需要开启以下端口: | | HTTPS | 443 |- | Ccnet Daemon | 10001 |- | Seafile Daemon | 12001 | 这份文档将说明如何在网站的非根文件夹下通过 Apache/Nginx 部署 Seafile。 注意: 请先阅读 Nginx 下配置 Seahub 或者 Apache 下配置 Seahub. 首先更改 seahub_settings.py 中一些变量的值: SERVE_STATIC = False MEDIA_URL = '/seafmedia/' SITE_ROOT = '/seafile/' 我们将使用 Nginx 来管理静态文件(js, css, etc), 所以将 SERVE_STATIC 设置为 False 。 可以自定义 MEDIA_URL 的值,但是确保结尾包含斜线。 因为要在 /seafile/ 目录下而不是根目录下部署 Seafile, 所以设置 SITE_ROOT 的值为 /seafile/ 。 接下来,配置 Nginx 如下: server { listen 80; server_name www.example.com; location /seafile { fastcgi_pass 127.0.0.1:8000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # fastcgi_param HTTPS on; # 如果使用 https,请取消掉这行的注释。 access_log /var/log/nginx/seahub.access.log; error_log /var/log/nginx/seahub.error.log; } location /seafhttp { rewrite ^/seafhttp(.*)$ $1 break; proxy_pass http://127.0.0.1:8082; client_max_body_size 0; } location /seafmedia { rewrite ^/seafmedia(.*)$ /media$1 break; root /home/user/haiwen/seafile-server-latest/seahub; } } 在非根域名下部署 Seahub Nginx 下部署 接下来设置 SERVICE_URL 和 FILE_SERVER_ROOT 的值。 首先更改 seahub_settings.py 中一些变量的值: SERVE_STATIC = False MEDIA_URL = '/seafmedia/' SITE_ROOT = '/seafile/' 在 httpd.conf 文件中加入以下语句: FastCGIExternalServer /var/www/seahub.fcgi -host 127.0.0.1:8000 接下来配置 Apache,示例如下: ServerName www.example.com DocumentRoot /var/www Alias /seafmedia /home/user/haiwen/seafile-server-2.0.2/seahub/media RewriteEngine On # # seafile fileserver # ProxyPass /seafhttp http://127.0.0.1:8082 ProxyPassReverse /seafhttp http://127.0.0.1:8082 RewriteRule ^/seafhttp - [QSA,L] # # seahub # RewriteRule ^/(seafmedia.*)$ /$1 [QSA,L,PT] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^/(seafile.*)$ /seahub.fcgi/$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 请注意更改 Alias 的值为自己的文件路径。 为使 Seafile 知道你所使用的域名,请更改 /data/haiwen/ccnet/ccnet.conf 中 SERVICE_URL 变量的值。 SERVICE_URL = http://www.myseafile.com/seafile 注意: 如果以后域名有所变动,请记得更改 SERVICE_URL . Apache 下部署 更改 ccnet.conf 和 seahub_setting.py 更改 ccnet.conf 更改 seahub_settings.py 中 FILE_SERVER_ROOT 的值 FILE_SERVER_ROOT = 'http://www.myseafile.com/seafhttp' ./seafile.sh start ./seahub.sh start-fastcgi 更改 seahub_settings.py 启动 Seafile 和 Seahub 首先请确认 MySQL 的 Python 模块已经安装. Ubuntu 下,安装命令为 apt-get install python-mysqldb . 请按以下步骤操作: 1. 停止 Seafile 和 Seahub 2. 下载 sqlite2mysql.sh 和 sqlite2mysql.py 到 Seafile 的安装根目录( /data/haiwen )里. 3. 运行 sqlite2mysql.sh 脚本 chmod +x sqlite2mysql.sh ./sqlite2mysql.sh 这个脚本将生成三个文件: ccnet-db.sql , seafile-db.sql , seahub-db.sql 。 4. 新建3个数据库,分别命名为 ccnet-db , seafile-db , seahub-db . create database `ccnet-db` character set = 'utf8'; create database `seafile-db` character set = 'utf8'; create database `seahub-db` character set = 'utf8'; 5. 运行 sql 文件: mysql> use `ccnet-db` mysql> source ccnet-db.sql mysql> use `seafile-db` mysql> source seafile-db.sql mysql> use `seahub-db` mysql> source seahub-db.sql 6. 更改配置 在 ccnet/ccnet.conf 中增加以下语句: [Database] ENGINE=mysql HOST=127.0.0.1 USER=root PASSWD=root DB=ccnet-db CONNECTION_CHARSET=utf8 注意: 使用 127.0.0.1 , 不要使用 localhost . 将 seafile-data/seafile.conf 中的数据库配置信息更改文以下语句: 从 SQLite 迁移到 MySQL [database] type=mysql host=127.0.0.1 user=root password=root db_name=seafile-db CONNECTION_CHARSET=utf8 在 seahub_settings.py 中增加以下语句: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'USER' : 'root', 'PASSWORD' : 'root', 'NAME' : 'seahub-db', 'HOST' : '127.0.0.1', 'OPTIONS': { "init_command": "SET storage_engine=INNODB", } } } 7. 重启 Seafile and Seahub 检查 ccnet.conf 中 SERVICE_URL 的配置,检查 seahub_settings.py 中 FILE_SERVER_ROOT 的配置 确认防火墙没有禁用 seafile fileserver 使用 chrome/firefox 调试模式,找到点击下载按钮时使用的链接并查看错误信息。 首先, 检查客户端的 ccnet.log 文件(Linux下 ~/.ccnet/logs/ccnet.log , Windows下 C:/users/your_name/ccnet/logs/ccnet.log ) ,查看错误信息. 可能的错误原因: 忘记配置 SERVICE_URL : 在服务器端查看 ccnet.conf ,确认 SERVICE_URL 设置正确. 防火墙: 确认防火墙设置正确. 详细请见[[Seafile服务器防火墙配置]] 问题解答: 手动进行 telnet 连接: telnet your-server-IP-or-domain 10001 确认 12001 端口已开启 确认 ccnet.conf 中 SERVICE_URL 配置正确. 请确定在 httpd.conf 或者 apache2.conf 中使用了 FastCGIExternalServer /var/www/seahub.fcgi -host 127.0.0.1:8000 尤其是 /var/www/seahub.fcgi 部分. 多媒体文件访问权限错误 (Alias location identified in /etc/apache2/sites-enabled/000-default (Ubuntu) 解决方法: 1. 切换到非根(non-root)用户重新运行安装脚本 2. 复制 /media 文件夹到 var/www/ 下,并在 /etc/apache2/sites-enabled/000-default 中重新编辑文件路 径。 Seafile 使用 Django 1.5, 所需 Python 版本为 2.6.5+ 。 安装常见问题 无法上传/下载 下载资料库时,客户端始终显示"connecting server" 下载文件块失败 Apache 日志文件报错: "File does not exist: /var/www/seahub.fcgi" Apache/HTTPS 下,Seafile 只显示文本文件(没有 CSS 样式和图片显示) 初始化 Seafile 时,显示 "Error when calling the metaclass bases" 错误 使用预编译 Seafile 服务器安装包的用户请看. 如果你是 源码编译安装 Seafile 的,请参考那篇文档中的 升级 部分。 升级之后, 如果没有正常运行,请清空 Seahub 缓存。 假设你现在使用 2.1.0 版本,想要升级到 3.1.0 版本,下载、解压新版本安装包后,得到目录结构如下: haiwen -- seafile-server-2.1.0 -- seafile-server-3.1.0 -- ccnet -- seafile-data 升级到 3.1.0: 1. 关闭 Seafile 服务(如果正在运行): cd haiwen/seafile-server-2.1.0 ./seahub.sh stop ./seafile.sh stop 2. 查看 seafile-server-3.1.0 目录下的升级脚本: cd haiwen/seafile-server-3.1.0 ls upgrade/upgrade_* 可以看到升级脚本文件如下: ... upgrade/upgrade_2.0_2.1.sh upgrade/upgrade_2.1_2.2.sh upgrade/upgrade_2.2_3.0.sh upgrade/upgrade_3.0_3.1.sh 3. 从当前版本(2.1.0)开始,按顺序运行以下脚本: upgrade/upgrade_2.1_2.2.sh upgrade/upgrade_2.2_3.0.sh upgrade/upgrade_3.0_3.1.sh 4. 启动新版本 Seafile 服务器,完成升级: Seafile 升级指南 主版本升级 (比如从 2.x 升级到 3.y) cd haiwen/seafile-server-3.1.0/ ./seafile.sh start ./seahub.sh start 假设你现在使用 3.0.0 版本,想要升级到 3.2.2 版本,下载、解压新版本安装包,得到目录结构如下: haiwen -- seafile-server-3.0.0 -- seafile-server-3.2.2 -- ccnet -- seafile-data 升级到 3.2.2: 1. 关闭 Seafile 服务(如果正在运行): cd haiwen/seafile-server-3.0.0 ./seahub.sh stop ./seafile.sh stop 2. 查看 seafile-server-3.2.2 目录下的升级脚本: cd haiwen/seafile-server-3.2.2 ls upgrade/upgrade_* 可以看到升级脚本文件如下: ... upgrade/upgrade_2.2_3.0.sh upgrade/upgrade_3.0_3.1.sh upgrade/upgrade_3.1_3.2.sh 3. 从当前版本(3.0.0)开始,按顺序运行以下脚本: upgrade/upgrade_3.0_3.1.sh upgrade/upgrade_3.1_3.2.sh 4. 启动新版本 Seafile 服务器,完成升级: cd haiwen/seafile-server-3.2.2/ ./seafile.sh start ./seahub.sh start 小版本升级 (比如从 3.0.x 升级到 3.2.y) 微升级 (比如从 3.1.0 升级到 3.1.2) 类似从 3.1.0 升级到 3.1.2,为微升级。 1. 关闭 Seafile 服务(如果正在运行); 2. 对于此类升级,只需更新头像链接,直接运行升级脚本即可(因为历史原因,此升级脚本命名为 minor- upgrade.sh ): cd seafile-server-3.1.2 upgrade/minor-upgrade.sh 3. 运行升级脚本之后,启动新版本 Seafile 服务器,完成升级; 4. 如果新版本运行正常,可以删除旧版本 Seafile 文件。 rm -rf seafile-server-3.1.0 目前 Seafile Windows 服务器社区版仅支持 SQLite 数据库。Windows 专业版支持搜索,HTTPS, MySQL 数据库, WebDAV。我们测试用的系统是 Windows 2008 server R2 SP1。 下载安装 Windows 版 Seafile 服务器 安装 Seafile 为 Windows 服务 所用端口说明 升级 注意:默认情况下,Seafile 需要用到 8000, 8082, 10001, 12001 四个端口。 垃圾回收不再需要的数据块 如果您安装 Seafile 服务器失败, 请首先查看 seafserv-applet.log 文件。 此文件是在 Seafile 初始化过程中创建的。请执行下面两步: 1. 检查您的 Python 以及 Python 环境变量是否设置正确。 2. 将您的 Seafile 服务器包放在一个简短的路径下, 比如 C:\seafile-packages 。 请使用 Python 2.7.4 32 位版本, 不要使用 Python 3.0 及以上版本。 请先确保您已经更改了 ccnet.conf 配置文件中的 SERVICE_URL ,且更改正确。 1. 使用 python 2.7.4 32 位版本。如果您已经安装了 python 的其他版本,请先卸载然后安装 python 2.7.4 版本。重启 Seafile 服务器确认此问题是否依然存在。 2. 将注册表路径 HKEY_CLASSES_ROOT\MIME\Database\Content Type 下的非 ASCII 键删除,然后重试。 假设你的 Seafile 服务器程序位置为 C:/SeafileProgram , 数据文件夹位置为 D:/seafile-server 。现在你希望 把数据文件夹从 D:/seafile-server 移动到 E:/seafile-server 1. 先在托盘菜单里选 "停止并退出 seafile 服务器" 2. 把数据文件夹 D:/seafile-server 移动到新位置 E:/seafile-server 3. 打开 C:/SeafileProgram 文件夹下的 seafserv.ini 这个文件。这个文件记录了数据文件夹的路径。把这 安装与升级 服务器管理 常见问题 "ERROR: D:/seafile-server\seahub.db not found" 创建 seahub.db 文件失败 不能通过 Web 端上传或下载文件 浏览器不能获得 css 和 javascript 文件 如何移动 seafile-server 文件夹 个文件的内容改为 E:/seafile-server 。 注意: 如果你的新位置的路径包含非英文字符,那么请用支持 UTF8 格式的文本编辑器来编辑 seafserv.ini 文件,并保存为 UTF8 格式。否则 Seafile 服务器程序可 能无法正确读取这个文件的内容。 4. 重新启动 Seafile 服务器。 想了解更多关于 Seafile 服务器的信息, 请访问 https://github.com/haiwen/seafile/wiki 更多信息 下载并安装 python 2.7.4 将 python2.7 的安装路径添加到系统的环境变量中 (PATH 变量)。比如:如果您将 python 2.7.4 安装 在 C:\Python27 路径下,那么就将 C:\Python27 添加到环境变量中。 获取 Seafile 服务器的最新版本。 为 Seafile 服务器程序创建一个新的文件夹,比如 C:\SeafileProgram\ 。请记住此文件夹的位置,我们 将在以后用到它。 将seafile-server_1.7.0_win32.tar.gz解压到 C:\SeafileProgram\ 目录下。 现在,您的目录结构应该像如下这样: C:\SeafileProgram |__ seafile-server-1.7.0 在 C:\SeafileProgram\seafile-server-1.7.0\ 文件夹下,找到run.bat文件并双击,以启动 Seafile 服务器。此 时,您应该注意到 Seafile 服务器的图标已经出现在您的系统托盘中。 现在,您可以在弹出的对话框中选择一个磁盘,以便存储 Seafile 服务器的数据: 请确保选择的磁盘拥有足够的剩余空间 点击确认按钮后, Seafile 将会在您选择的磁盘下为您创建一个名为 seafile-server 的文件夹。这个文件 夹就是 Seafile 服务器的数据文件夹。如果您选择D盘,那么数据文件夹为 D:\seafile-server 右击 Seafile 服务器的系统托盘图标, 选择"添加管理员帐号"选项。在弹出的对话框中输入您的管理员用户 名和密码。 如果操作成功, Seafile 服务器托盘图标处会弹出一个气泡提示您"添加 Seahub 管理员账户成功" 初始化服务器之后,还需配置以下选项: 右击 Seafile 托盘图标,选择"打开 seafile-server 文件夹"选项。您的 seafile-server 数据文件夹将会 打开。 下载安装 Windows 版 Seafile 服务器 安装 Python 2.7.4 下载并解压 Seafile 服务器 启动与初始化 启动 Seafile 服务器 选择一个磁盘作为 Seafile 服务器数据的存储位置 添加管理员帐号 配置 Seafile 服务器 编辑ccnet/ccnet.conf文件。在ccnet.conf文件中更改以下两行: NAME = XXXXX SERVICE_URL = XXX 将NAME的值配置成您的 Seafile 服务器的名字,比如 NAME = my-company-seafile 。这个名字将会在 您的 Seafile 客户端上显示。 将SERVICE_URL的值配置成 http://<您的 IP 地址>:8000 。比如您的 Windows 服务器地址为 192.168.1.100, 那么配置成 SERVICE_URL = http://192.168.1.100:8000 编辑完成后,右击 Seafile 服务器托盘图标,选择"重启 Seafile Server"选项以重启 Seafile 服务器。 打开您的浏览器,访问 http://127.0.0.1:8000 网址。用您的管理员账户登录, 如果成功登录,那么说明您 的 Seafile 服务器初始化成功。 Seafile 服务器的配置到此已经完成。如果您想了解如何使用 Seafile 客户端,请参考 Seafile 客户端手册 您可能还会想要了解以下信息: Seafile LDAP配置 安装 Seafile 为 Windows 服务 所用端口说明 升级 个性化配置 访问Seahub 配置完成 在您的所有用户注销后 Seafile 服务器能够继续保持运行 系统启动时,即使没有用户登录, Seafile 服务器也会开始运行 右击 Seafile 服务器托盘图标,选择"安装为 Windows 服务"选项 在弹出的对话框中,点击是按钮 如果操作成功,将会弹出一个对话框提示您"已经成功安装 Seafile 服务"。 注销当前用户 在另一台电脑上访问 Seahub 。如果 Seahub 网站仍然可以访问,那么说明 Seafile 服务器已经开始作 为 Windows 服务运行 如果您已经将 Seafile 服务器安装为 Windows 服务,那么在您下次系统启动时, Seafile 服务将会在后台 自动运行。这样,当用户登录时, Seafile 服务器托盘图标就不会自动出现。 启动托盘图标,只需双击 C:\SeafileProgram\seafile-server-1.7.0 文件夹下的 run.bat 文件。 如果您想卸载 Seafile 服务器的 Windows 服务,请执行以下两步: 右击托盘图标,选择"卸载 Windows 服务"选项 在弹出的确认对话框中点击"是"按钮 安装 Seafile 为 Windows 服务 将 Seafile 服务器作为 Windows 服务安装的好处 如何作为 Windows 服务安装 确认 Seafile 服务器已经开始作为 Windows 服务运行 安装为 Windows 服务后如何启动托盘图标 卸载 Seafile 服务器的 Windows 服务 Seafile 服务器由多个组件组成,默认情况下用到 8000, 8082, 10001, 12001 四个端口号。 所有端口的相关配置都记录在 ccnet.conf 文件和 seafile.conf 文件中 右击 Seafile 服务器托盘图标,选择"打开 seafile-server 文件夹"选项 打开 seafile-server 目录下的 ccnet 文件夹。 ccnet.conf 文件就在此文件夹下。 右击 Seafile 服务器托盘图标,选择"打开 seafile-server 文件夹"选项 打开 seafile-server 目录下的 seafile-data 文件夹。 seafile.conf 文件就在此文件夹下。 在接下来的部分,我们分别列举了 Seafile 服务器各个组件用到的TCP端口以及如何改变它们(比如,一些 端口很有可能已经被其他应用程序占用)。 注意:如果您改变了以下任何端口,请重启 Seafile 服务器。 ccnet 为 Seafile 服务器提供网络连接服务。 默认端口: 10001 如何设置端口号: 编辑 ccnet.conf 文件。设置在 Network 段下 PORT 的值: [Network] PORT = 10001 seaf-server 为 Seafile 服务器提供数据服务。 默认端口: 12001 如何设置端口号: 编辑 seafile.conf 文件。 设置在 network 段下 port 的值: [network] port=22001 seahub 是 Seafile 服务器的 Web 端。 注意:如果您改变了 Seahub 的端口号, ccnet.conf 文件中的 SERVICE_URL 也应该随之改变。 默认端口: 8000 所用端口说明 配置文件 如何打开 ccnet.conf 文件 如何打开 seafile.conf 文件 ccnet seaf-server seahub 如何设置端口号: 编辑 seafile.conf 文件。 设置在 seahub 段下 port 的值. (此功能在 Seafile Windows 服务器 1.7.0.1 版本加入) [seahub] port=8000 编辑 ccnet.conf 文件,改变 SERVICE_URL 的值。比如, 如果您将端口号重新设置为 8001 ,那么更 改 SERVICE_URL 的值如下: [General] SERVICE_URL = <您的 IP 或者域名>:8001 seafile fileserver 负责为 Seahub 处理文件的上传和下载 默认端口: 8082 如何设置端口号: 编辑 seafile.conf 文件。 设置在 fileserver 段下 port 的值: [fileserver] port=8082 seafile fileserver 小版本升级 大版本升级 升级 Windows 服务 注意:升级之前,你需要先停止 Seafile 服务器 假设升级之前,你的目录结构是: C:/SeafileProgram |______ seafile-server-1.7.0/ 那么,升级的第一步是下载新版本的程序包,并解压到文件夹 `C:/SeafileProgram` 下面。 C:/SeafileProgram |______ seafile-server-1.7.0/ |______ seafile-server-1.8.0/ 现在假定您要将 Seafile 服务器的 Windows 服务从 1.7.0 版本升级到 1.7.1 版本 找到seafile-server-1.7.0/seahub/media/avatars目录 在avatars/文件夹中包含着所有Seafile用户的头像。 如果您有一个用户名为 foo@foo.com 的用户,那么在avatars/文件夹中,您会发现一个叫 作 foo@foo.com 的子文件夹。这个子文件夹包含着用户 foo@foo.com 的头像图片。 将所有像 foo@foo.com 的这种子文件夹拷贝到 seafile-server-1.7.1/seahub/media/avatars 目录下。这样,当 您启动新的 1.7.1 版本的 Seafile 服务器时,这些头像可以正确加载。 现在假定您要将 Seafile 服务器的 Windows 服务从 1.7.x 版本升级到 1.8.y 版本 找到seafile-server-1.8.y/upgrade目录 在这个目录下,右击 upgrade_1.7_1.8.bat 文件 选择"以管理员身份运行" 升级 解压新版本服务器 小版本升级 (如从 1.7.0 版本升级到 1.7.1 版本) 迁移 avatars 文件夹的内容 大版本升级 (如从 1.7.0 版本升级到 1.8.0 版本) 运行数据库升级脚本 拷贝头像 将在seafile-server-1.7.0/seahub/media/avatars目录下的所有子文件夹拷贝到seafile-server- 1.8.0/seahub/media/avatars目录下 如果您已经将 Seafile 服务器作为 Windows 服务安装,您需要做以下几步: 运行老版本的 Seafile Windows 服务器,右击托盘图标,在菜单中选择卸载 Windows 服务 退出老版本的 Seafile Windows 服务器 启动新版本的 Seafile Windows 服务器,右击托盘图标,在菜单中选择安装为 Windows 服务 升级 Windows 服务 下载与安装 Seafile 专业版服务器 从 Seafile 社区版服务器迁移到专业版服务器 升级 Seafile 专业版服务器 S3/Swift/Ceph 安装 Seafile 专业版服务器并使用亚马逊 S3 安装 Seafile 专业版服务器并使用 OpenStackSwift 安装 Seafile 专业版服务器并使用 Ceph 配置选项 Seafile 专业版服务器可配置的选项 关于文件搜索的一些细节 Seafile 专业版服务器的 FAQ Seafile 专业版软件许可协议 部署 Seafile 专业版 安装 搜索功能 FAQ 变更记录 许可证书 准备工作 下载与安装 安装完成 一台至少 2GB 内存的 Linux 服务器 如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令: sudo apt-get install openjdk-7-jre 如果您的系统环境是 CentOS 或者 Red Hat,执行以下命令: sudo yum install java-1.7.0-openjdk 注意:您也可以使用 Oracle JRE. 注意:Seafile 专业版需要 java 1.7 以上版本, 请用 java -version 命令查看您系统中的默认 java 版本. 如果 不是 java 7, 那么, 请 更新默认 java 版本. poppler-utils 提供对 PDF 文件的全文检索功能。 如果您的系统环境是 Ubuntu 或者 Debian,请执行以下命令: sudo apt-get install poppler-utils 如果您的系统环境是 CentOS 或者 Red Hat,请执行以下命令: sudo yum install poppler-utils Libreoffice 和 Python-uno 库为 office 文件提供在线预览功能。如果它们没有安装,office 文件就不能在线 预览。Seafile 需要 libreoffice 4.0 或者以后的版本。 如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令: sudo apt-get install libreoffice python-uno 准备工作 系统最低配置需求 安装 Java 运行时环境 (JRE) 安装 poppler-utils 安装 Libreoffice 和 UNO 库 如果您的系统环境是 CentOS 或者 RHEL,执行以下命令: sudo yum install libreoffice libreoffice-headless libreoffice-pyuno 对于其他的 Linux 发行版您可以参考:Linux 系统下安装 LibreOffice 一般地,您还需要为您的使用语言安装字体,特别是在亚洲地区,否则 office 文件和 pdf 文件不能正确地 显示。 比如, 中国的用户可能希望安装文泉驿系列的 TrueType 字体: # 如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令: sudo apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy 首先确保您已经安装了 python 2.6.5+ 或者 2.7 版本 sudo easy_install pip sudo pip install boto 在安装过程中如果您遇到错误:"Wheel installs require setuptools >= ...", 请在以上两条命令之间运行以 下命令: sudo pip install setuptools --no-use-wheel --upgrade 将您得到的许可证书放在顶层目录下。比如,在这篇文档页面里,我们把 /data/haiwen/ 作为顶层目录。 tar xf seafile-pro-server_2.1.5_x86-64.tar.gz 现在您的目录结构应该像如下这样: haiwen ├── seafile-license.txt └── seafile-pro-server-2.1.5/ 您应该已经注意到社区版服务器和专业版服务器名字的不同。以 64 位的 2.1.5 版本为例: 安装 Python 库 下载与安装 Seafile 专业版服务器 获得许可证书 下载与解压 Seafile 专业版服务器 Seafile 社区版服务器压缩包叫作 seafile-server_2.1.5_x86-86.tar.gz ;解压后,文件夹名叫作 seafile- server-2.1.5 Seafile 专业版服务器压缩包叫作 seafile-pro-server_2.1.5_x86-86.tar.gz ;解压后,文件夹名叫作 seafile-pro-server-2.1.5 Seafile 专业版服务器的安装步骤与Seafile 社区版服务器安装步骤相同。请参考社区维基:下载与安装 Seafile 服务器并使用 MySQL 数据库 在您成功安装 Seafile 专业版服务器之后,您的目录结构应该像如下这样: #tree haiwen -L 2 haiwen ├── seafile-license.txt # license file ├── ccnet # configuration files │ ├── ccnet.conf │ ├── mykey.peer │ ├── PeerMgr │ └── seafile.ini ├── pro-data # data specific for professional version │ └── seafevents.conf ├── seafile-data │ └── seafile.conf ├── seafile-pro-server-2.1.5 │ ├── reset-admin.sh │ ├── runtime │ ├── seafile │ ├── seafile.sh │ ├── seahub │ ├── seahub-extra │ ├── seahub.sh │ ├── setup-seafile.sh │ ├── setup-seafile-mysql.py │ ├── setup-seafile-mysql.sh │ └── upgrade ├── seahub-data │ └── avatars # for user avatars ├── seahub.db ├── seahub_settings.py # seahub config file 到此,Seafile 专业版服务器的基本安装已经完成。 您可能想要了解更多关于 Seafile 专业版服务器的信息: Seafile 专业版服务器的 FAQ 安装 安装完成 限制条件 准备工作 迁移 切换回社区版服务器 您可能已经部署过 Seafile 社区版服务器,并想要切换到专业版,或者反过来从专业版迁移到社区版。但是 有一些限制条件需要您注意: 您只能在相同大版本的社区版服务器和专业版服务器之间进行切换。 这意味着,如果您正在使用 2.0 版本的社区版服务器, 并且想要切换到 2.1 版本的专业版服务器,您必须 先将您的社区版服务器升级到 2.1 版本, 然后按照以下指南切换到 2.1 版本的专业版服务器。(版本号 2.1.x 中的最后一位没有关系) 如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令: sudo apt-get install openjdk-7-jre 如果您的系统环境是 CentOS 或者 Red Hat,执行以下命令: sudo yum install java-1.7.0-openjdk 注意:您也可以使用 Oracle JRE. 注意:Seafile 专业版需要 java 1.7 以上版本, 请用 java -version 命令查看您系统中的默认 java 版本. 如果 不是 java 7, 那么, 请 更新默认 java 版本. poppler-utils 提供对 pdf 文件的全文检索功能。 如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令: sudo apt-get install poppler-utils 如果您的系统环境是 CentOS 或者 Red Hat,执行以下命令: sudo yum install poppler-utils 限制条件 准备工作 安装 Java 运行时环境 (JRE) 安装 poppler-utils 安装 Libreoffice 和 UNO 库 Libreoffice 和 Python-uno 库提供对办公文件的在线预览功能。如果它们没有安装,办公文件就不能在线预 览。 如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令: sudo apt-get install libreoffice python-uno 如果您的系统环境是 CentOS 或者 RHEL,执行以下命令: sudo yum install libreoffice libreoffice-headless libreoffice-pyuno 对于其他的 Linux 发行版您可以参考:Linux 下 LibreOffice 的安装 一般地,您还需要为您的使用语言安装字体,特别是在亚洲地区,否则 office 文件和 pdf 文件不能正确地 显示。 比如, 中国的用户可能希望安装文泉驿系列的 TrueType 字体: # 如果您的系统环境是 Ubuntu 或者 Debian,执行以下命令: sudo apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy 我们假定您已经在 /data/haiwen/seafile-server-2.1.0 目录下部署了 Seafile 社区版服务器的 2.1.0 版本。 将您获得的许可证书放在 Seafile 安装位置的顶层目录下。在我们的例子中,顶层目录是 /data/haiwen/ 。 32 位 64 位 您应该将压缩包解压到您的 Seafile 安装位置的顶层目录,在我们的例子中,顶层目录是 /data/haiwen 。 tar xf seafile-pro-server_2.1.0_x86-64.tar.gz 现在您的目录结构像如下这样: 迁移 获得许可证书 下载与解压 Seafile 专业版服务器 haiwen ├── seafile-license.txt ├── seafile-pro-server-2.1.0/ ├── seafile-server-2.1.0/ ├── ccnet/ ├── seafile-data/ ├── seahub-data/ ├── seahub.db └── seahub_settings.py 您应该已经注意到社区版服务器和专业版服务器名字的不同。以 64 位的 2.1.0 版本为例: Seafile 社区版服务器压缩包叫作 seafile-server_2.1.0_x86-86.tar.gz ;解压后,文件夹名叫作 seafile- server-2.1.0 Seafile 专业版服务器压缩包叫作 seafile-pro-server_2.1.0_x86-86.tar.gz ;解压后,文件夹名叫作 seafile-pro-server-2.1.0 如果 Seafile 社区版服务器正在运行,请先停止它: cd haiwen/seafile-server-2.1.0 ./seafile.sh stop ./seahub.sh stop 运行迁移脚本 cd haiwen/seafile-pro-server-2.1.0/ ./pro/pro.py setup --migrate 迁移脚本将会为您做以下的工作: 确保您满足所有的先决条件 创建必要的额外配置选项 更新 avatar 目录 创建额外的数据库表 现在您的目录结构像如下这样: haiwen ├── seafile-license.txt ├── seafile-pro-server-2.1.0/ ├── seafile-server-2.1.0/ ├── ccnet/ ├── seafile-data/ ├── seahub-data/ ├── seahub.db ├── seahub_settings.py └── pro-data/ 迁移 cd haiwen/seafile-pro-server-2.1.0 ./seafile.sh start ./seahub.sh start 如果 Seafile 专业版服务器正在运行,请先停止它: cd haiwen/seafile-pro-server-2.1.0/ ./seafile.sh stop ./seahub.sh stop 更新 avatar 目录的链接,参考小版本升级 cd haiwen/seafile-server-2.1.0/ ./upgrade/minor-upgrade.sh 启用 Seafile 社区版服务器 cd haiwen/seafile-server-2.1.0/ ./seafile.sh start ./seahub.sh start 启用 Seafile 专业版服务器 切换回社区版服务器 请参考 升级 升级 为了安装 Seafile 专业版服务器并使用亚马逊 S3,您需要: 按照 下载安装 Seafile 专业版服务器 指南安装基本的 Seafile 专业版服务器。 安装 python 的 boto 库。它可以用来访问 S3 服务。 sudo easy_install boto 安装和使用 Memcached. 编辑 /data/haiwen/seafile-data/seafile.conf 文件,添加下面几行: [commit_object_backend] name = s3 # bucket 的名字只能使用小写字母,数字,点号,短划线 bucket = my.commit-objects key_id = your-key-id key = your-secret-key memcached_options = --SERVER=localhost --POOL-MIN=10 --POOL-MAX=100 [fs_object_backend] name = s3 # bucket 的名字只能使用小写字母,数字,点号,短划线 bucket = my.fs-objects key_id = your-key-id key = your-secret-key memcached_options = --SERVER=localhost --POOL-MIN=10 --POOL-MAX=100 [block_backend] name = s3 # bucket 的名字只能使用小写字母,数字,点号,短划线 bucket = my.block-objects key_id = your-key-id key = your-secret-key memcached_options = --SERVER=localhost --POOL-MIN=10 --POOL-MAX=100 建议您为 commit,fs 和 block objects 分别创建 buckets。 key_id 和 key 用来提供 S3 的身份认证。您可 以在您的 AWS 账户页面的"安全证书"段找到 key_id 和 key。 当您在 S3 上创建 buckets 时,请先阅读 S3 bucket 命名规则。注意, 尤其不要在 bucket 的名字中使用大 写字母(不要使用骆驼式命名法,比如 MyCommitOjbects)。 为了获得最佳性能,强烈建议您安装 memcached 并且为 objects 启用 memcache。 Amazom S3 下安装 从专业版服务器的 2.0.5 版本开始,Seafile 可以使用兼容 S3 的云存储(比如 OpenStack/Swift)作为后 端。这篇文档将以使用 Swift 为例。 首先您需要为 Swift 启用 S3 的模拟中间件。有关说明可以参考以下链接: http://www.buildcloudstorage.com/2011/11/s3-apis-on-openstack-swift.html http://docs.openstack.org/grizzly/openstack-compute/admin/content/configuring-swift-with-s3- emulation-to-use-keystone.html 成功安装设置 S3 中间件后,您就可以用任何 S3 的客户端访问它了。在 Swift 中,访问的 key id 作为用户 名 secret key 作为用户的密码。下一步您要做的就是为 Seafile 创建 buckets。使用 Python 的 boto 库您 可以这样做: import boto import boto.s3.connection connection = boto.connect_s3( aws_access_key_id='swifttest:testuser', aws_secret_access_key='testing', port=8080, host='swift-proxy-server-address', is_secure=False, calling_format=boto.s3.connection.OrdinaryCallingFormat()) connection.create_bucket('seafile-commits') connection.create_bucket('seafile-fs') connection.create_bucket('seafile-blocks') 将下面几行追加到 seafile-data/seafile.conf 文件中 OpenStackSwift 下安装 准备工作 修改 seafile.conf 文件 [block_backend] name = s3 bucket = seafile-blocks key_id = swifttest:testuser key = testing host = :8080 path_style_request = true memcached_options = --SERVER=localhost --POOL-MIN=10 --POOL-MAX=100 [commit_object_backend] name = s3 bucket = seafile-commits key_id = swifttest:testuser key = testing host = :8080 path_style_request = true memcached_options = --SERVER=localhost --POOL-MIN=10 --POOL-MAX=100 [fs_object_backend] name = s3 bucket = seafile-fs key_id = swifttest:testuser key = testing host = :8080 path_style_request = true memcached_options = --SERVER=localhost --POOL-MIN=10 --POOL-MAX=100 为了提高性能,Seafile 会在 memcached 中缓存小的 objects。所以强烈建议您安装并且运行 memcached。最好是为 Seafile 提供一个专门的 memcached 实例并为其分配 128MB 的内存空间。 Ceph 是一种可扩展的分布式存储系统。Seafile 可以使用 Ceph 的 RADOS 对象存储层作为存储后端。 Seafile 可以看作 Ceph/RADOS 的客户端,所以它需要访问 ceph 集群的配置文件和密钥环。您必须将 ceph 管理员节点 /etc/ceph 目录下的文件拷贝到 seafile 的机器上。 seafile-machine# sudo scp user@ceph-admin-node:/etc/ceph/ /etc 编辑 seafile-data/seafile.conf 文件,添加以下几行: [block_backend] name = ceph ceph_config = /etc/ceph/ceph.conf pool = seafile-blocks memcached_options = --SERVER=localhost --POOL-MIN=10 --POOL-MAX=100 [commit_object_backend] name = ceph ceph_config = /etc/ceph/ceph.conf pool = seafile-commits memcached_options = --SERVER=localhost --POOL-MIN=10 --POOL-MAX=100 [fs_object_backend] name = ceph ceph_config = /etc/ceph/ceph.conf pool = seafile-fs memcached_options = --SERVER=localhost --POOL-MIN=10 --POOL-MAX=100 建议您为 commit, fs 和 block objects 分别创建连接池: ceph-admin-node# rados mkpool seafile-blocks ceph-admin-node# rados mkpool seafile-commits ceph-admin-node# rados mkpool seafile-fs 为了最佳性能,强烈建议您安装 memcached 并为 objects 启用 memcache。 我们建议您为 memcached 分配 128MB 的内存空间。编辑 /etc/memcached.conf 文件如下: Ceph 下安装 拷贝 ceph 的配置文件和客户端的密钥环 编辑 Seafile 配置文件 安装并启用 memcached # Start with a cap of 64 megs of memory. It's reasonable, and the daemon default # Note that the daemon will grow to this size, but does not start out holding this much # memory # -m 64 -m 128 在 /data/haiwen/pro-data/seafevents.conf 配置文件中: [INDEX FILES] # 要启用搜索,必须设置为 "true" enabled = true # 搜索索引更新的时间间隔。可以是 s(秒), m(分), h(小时), d(天) interval=10m # 如果设置为 "true",搜索索引更新时也会索引办公文件和 pdf 文件中的内容 # 注意: 如果您将此选项从 "false" 设置为 "true", 那么您需要清空搜索索引然后再次更新索引。更多详情请参考 FAQ。 index_office_pdf=false [OFFICE CONVERTER] # 要启用办公文件和 pdf 文件的在线预览功能必须设置为 "true" enabled = true # 能够并发运行的 libreoffice 工作进程数 workers = 1 # 转换后的办公文件和 pdf 文件的存储位置 outputdir = /tmp/ # 允许的最大在线预览页数。默认为 50 页 max-pages = 50 # 允许的最大预览文件的大小,单位是 MB。默认为 2 MB max-size = 2 [SEAHUB EMAIL] # 要启用用户邮件通知,必须设置为 "true" enabled = true # 发送 seahub 邮件的时间间隔。可以是 s(秒), m(分), h(小时), d(天) interval = 30m 以上小节已经列出了 /data/haiwen/pro-data/seafevents.conf 配置文件中的所有配置选项。大多数情况下, 使用默认配置就足够了。但是为了更好地满足自身需求,您可能想要更改其中的某些选项。 我们将这些配置选项列出在下面的表中,以及我们选择默认设置的原因。 段 选项 默认 值 描述 INDEX FILES index_office_pdf false 默认情况下, office 文档和 pdf 文档的全文搜索功能是不开启的。 这是因为它会占用相当大的搜索索引空间。要开启它,将它的值设 置为 "true" 然后重新创建搜索索引。更多详情请参考 [[Seafile 专业 版服务器的 FAQ]]。 OFFICE CONVERTER max-size 2MB 允许的最大在线预览文件的大小是 2MB。在线预览会把 office 和 pdf 文档转换成 HTML 然后在浏览器中显示。如果文件太大,转换 会花费很长时间且占用很多空间。 配置选项 您可能想要更改的配置选项 OFFICE CONVERTER max-pages 50 当在线预览一个 office 或者 pdf 文档时,文档的前 50 页将会首先被 显示。如果此值太大,转换会花费很长时间且占用很多空间。 FAQ 我不能搜索 office/PDF 文档 当我搜索一个关键词时,没有返回结果 不能搜索加密的文件 首先,确认在 seafevents.conf 文件中,已经设置 index_office_pdf = true : [INDEX FILES] ... index_office_pdf = true 然后,检查是否安装 pdftotext 如果 pdftotext 没有安装,就不能从 PDF 文件中提取文本。 which pdftotext 执行上面的命令,如果没有输出,那么您需要安装它: sudo apt-get install poppler-utils pdftotext 安装完成后,您需要重新构建您的搜索索引。 ./pro/pro.py search --clear ./pro/pro.py search --update 默认情况下,搜索索引每 10 分钟更新一次。所以,在第一次索引更新前,无论您搜索什么都不会返回结 果。 为了使搜索能够立即生效,您可以手动更新搜索索引: 确保您已经启动了 Seafile 服务器 手动更新搜索索引: cd haiwen/seafile-pro-server-2.0.4 ./pro/pro.py search --update 这是因为服务器不能索引加密的文件,因为它们被加密了。 常见问题 我不能搜索 office/PDF 文档 当我搜索一个关键词时,没有返回结果 不能搜索加密的文件 The Seafile cluster solution employs a 3-tier architecture: Load balancer tier: Distribute incoming traffic to Seafile servers. HA can be achieved by deploying multiple load balancer instances. Seafile server cluster: a cluster of Seafile server instances. If one instance fails, the load balancer will stop handing traffic to it. So HA is achieved. Backend storage: Distributed storage cluster, such as S3, Openstack Swift, Ceph. This architecture scales horizontally. That is, you can handle more traffic by adding more machines. The architecture is presented in the following picture. At least 2 Linux server with at least 2GB RAM. On each mode, you need to install some python libraries. First make sure your have installed python 2.6 or 2.7, then: sudo easy_install pip sudo pip install boto If you receive an error about "Wheel installs require setuptools >= ...", run this between the pip and boto lines above Deploy in a cluster Architecture Preparation Hardware Install Python libraries sudo pip install setuptools --no-use-wheel --upgrade All seafile server instances will share the same memcached servers. Let's assume that the address of memcached server is 192.168.1.134, listening on port 11211 (the default). By default, memcached only listen on 127.0.0.1. So you should modify memcached.conf and restart memcached. # Specify which IP address to listen on. The default is to listen on all IP addresses # This parameter is one of the only security measures that memcached has, so make sure # it's listening on a firewalled interface. -l 0.0.0.0 It's also recommended to set a higher limit for memcached's memory, such as 256MB. # Start with a cap of 64 megs of memory. It's reasonable, and the daemon default # Note that the daemon will grow to this size, but does not start out holding this much # memory -m 256 You should make sure the config files on every Seafile server are consistent. It's critical that you don't set up seafile server on each machine separately. You should set up seafile server on one machine then copy the config directory to the other machines. Put the license you get under the top level diretory. In our wiki, we use the diretory /data/haiwen/ as the top level directory. tar xf seafile-pro-server_2.1.3_x86-64.tar.gz Now you have: haiwen ├── seafile-license.txt └── seafile-pro-server-2.1.3/ The setup process of Seafile Professional Server is the same as the Seafile Community Server. See Setup Memcached Configure a Single Node Get the license Download/Uncompress Seafile Professional Server Setup Seafile Config Download and Setup Seafile Server With MySQL in the community wiki. Note: Use the load balancer's address or domain name for the server address. Don't use the local IP address of each Seafile server machine. This assures the user will always access your service via the load balancers. After the setup process is done, you still have to do a few manually changes to the config files. You have to add the following configuration to seafile-data/seafile.conf [cluster] enabled = true memcached_options = --SERVER=192.168.1.134 --POOL-MIN=10 --POOL-MAX=100 (Optional) The Seafile server also opens a port for the load balancers to run health checks. Seafile by default use port 11001. You can change this by adding the following config to seafile-data/seafile.conf [cluster] health_check_port = 12345 Add following configuration to seahub_settings.py . These settings tell Seahub to store avatar in database and cache avatar in memcached. CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '192.168.1.134:11211', } } AVATAR_FILE_STORAGE = 'seahub.base.database_storage.DatabaseStorage' Add following to pro-data/seafevents.conf to disable file indexing service: [INDEX FILES] external_es_server = true In cluster environment, we have to store avatars in the database instead of in a local disk. CREATE TABLE `avatar_uploaded` (`filename` TEXT NOT NULL, `filename_md5` CHAR(32) NOT NULL PRIMARY KEY, `data` MEDIUMTEXT NOT NULL, `size` INTEGER NOT NULL, `mtime` datetime NOT NULL); seafile-data/seafile.conf seahub_settings.py pro-data/seafevents.conf Update Seahub Database You also need to add the settings for backend cloud storage systems to the config files. For NFS: Setup Seafile cluster with NFS For S3: Setup With Amazon S3 For OpenStack Swift: Setup With OpenStackSwift For Ceph: Setup With Ceph Once you have finished configuring this single node, start it to test if it can run correctly: cd /data/haiwen/seafile-server-latest ./seafile.sh start ./seahub.sh start Note: The first time you start seahub, the script would prompt you to create an admin account for your seafile server. Open your browser and visit http://ip-address-of-this-node:8000, login with the admin account. Now you have one node working fine, let's continue to configure other nodes. Supposed your seafile installation directory is /data/haiwen , compress this whole directory into a tar ball and copy the tar ball to all other Seafile server machines. You can simply uncompress the tar ball and use it. On each node, run ./seafile.sh and ./seahub.sh to start seafile server. You'll usually want to use Nginx/Apache and https for web access. You need to set it up on each machine running Seafile server. Make sure the certificate on all the servers are the same. For Nginx: Config Seahub with Nginx Enabling Https with Nginx For Apache: Config Seahub with Apache Enabling Https with Apache Beside standard ports of a seafile server, there are 2 firewall rule changes for Seafile cluster: Backend Storage Settings Run and Test the Single Node Configure other nodes Copy the config to all Seafile servers Setup Nginx/Apache and Https Firewall Settings On each Seafile server machine, you should open the health check port (default 11001); On the memcached server, you should open the port 11211. For security, only the Seafile servers should be allow to access this port. Now that your cluster is already running, fire up the load balancer and welcome your users. In the AWS ELB management console, after you've added the Seafile server instances to the instance list, you should do two more configurations. First you should setup TCP listeners Then you setup health check This is a sample /etc/haproxy/haproxy.cfg : (Assume your health check port is 12345 ) Load Balancer Setting AWS Elastic Load Balancer (ELB) HAProxy global log 127.0.0.1 local1 notice maxconn 4096 user haproxy group haproxy defaults log global mode http retries 3 maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen seahub 0.0.0.0:80 mode http option httplog option dontlognull option forwardfor server seahubserver01 192.168.1.165:80 check port 11001 server seahubserver02 192.168.1.200:80 check port 11001 listen seahub-https 0.0.0.0:443 mode tcp option tcplog option dontlognull server seahubserver01 192.168.1.165:443 check port 11001 server seahubserver02 192.168.1.200:443 check port 11001 listen ccnetserver :10001 mode tcp option tcplog balance leastconn server seafserver01 192.168.1.165:10001 check port 11001 server seafserver02 192.168.1.200:10001 check port 11001 listen seafserver :12001 mode tcp option tcplog balance leastconn server seafserver01 192.168.1.165:12001 check port 11001 server seafserver02 192.168.1.200:12001 check port 11001 Now you should be able to test your cluster. Open https://seafile.example.com in your browser and enjoy. You can also sync file with Seafile clients. If the above works, the next step would be Enable search and background tasks in a cluster. See how it runs In the seafile cluster, only one server should run the background tasks, including: indexing files for search email notification You need to choose one node to run the background tasks. Let's assume you have three nodes in your cluster, namely A, B, and C, and you decide that: Node A would run the background tasks Node B and Node C are normal nodes On this node, you need: On Ubuntu/Debian: sudo apt-get install openjdk-7-jre On CentOS/Red Hat: sudo yum install java-1.7.0-openjdk 提示:您也可以使用 Oracle JRE. 注意:Seafile 专业版需要 java 1.7 以上版本, 请用 java -version 命令查看您系统中的默认 java 版本. 如果 不是 java 7, 那么, 请 更新默认 java 版本. REMOVE the line: external_es_server = true In your firewall rules for node A, you should open the port 9500 (for search requests). On nodes B and C, you need to: Enable search and background tasks in a cluster Configuring Node A (the background-tasks node) Install Java Edit pro-data/seafevents.conf Edit the firewall rules Configure Other Nodes Edit pro-data/seafevents.conf, add the following lines: [INDEX FILES] external_es_server = true es_host = es_port = 9500 On node A (the background tasks node), you can star/stop background tasks by: ./seafile-background-tasks.sh { start | stop | restart } Start the background tasks In a Seafile cluster, one common way to share data among the Seafile server instances is to us NFS. You should only share the files objects on NFS. Here we'll provide a tutorial about how and what to share. How to setup nfs server and client is beyond the scope of this wiki. Here are few references: Ubuntu: https://help.ubuntu.com/community/SettingUpNFSHowTo CentOS: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-nfs.html Supposed your seafile server installation directory is /data/haiwen , after you run the setup script there should be a seafile-data directory in it. And supposed you mount the NFS drive on /seafile-nfs , you should follow a few steps: Move the seafile-data folder to /seafile-nfs : mv /data/haiwen/seafile-data /seafile-nfs/ On every node in the cluster, make a symbolic link to the shared seafile-data folder cd /data/haiwen ln -s /seafile-nfs/seafile-data /data/haiwen/seafile-data This way the instances will share the same seafile-data folder. All other config files and log files will remain independent. Setup Seafile cluster with NFS 关于搜索功能的 FAQ Office/PDF 文档预览 FAQ 无论我怎样尝试,加密资料库中的文件都不会出现在搜索结果中 这是因为服务器不能索引加密文件,因为它们是加密的。 我从社区版服务器切换到专业版服务器后,无论我搜索什么,都不会得到结果 默认情况下,搜索索引每 10 分钟更新一次。所以,在第一次索引更新前,无论您搜索什么都不会返回结 果。 为了使搜索能够立即生效,您可以手动更新索引: 确保您已经启动了 Seafile 服务器 手动更新搜索索引: cd haiwen/seafile-pro-server-2.1.5 ./pro/pro.py search --update 如果您的文件很多,这个过程会花费很长一段时间。 我想启用对 office/pdf 文档的全文搜索功能,所以我在配置文件中将 index_office_pdf 的值设置为 true ,但它没起作用。 在这种情况下,您需要做以下几步: 1. 编辑 /data/haiwen/pro-data/seafevents.conf 文件,将 index_office_pdf 的值设置为 true 2. 重启 Seafile 服务器: cd /data/haiwen/seafile-pro-server-2.1.5 ./seafile.sh restart 3. 删除已经存在的搜索索引: ./pro/pro.py search --clear 4. 创建并且再次更新搜索索引: ./pro/pro.py search --update 在 /data/haiwen/pro-data/seafevents.conf 中的 OFFICE CONVERTER 配置部分添加配置选项 关于搜索功能的 FAQ Office/PDF 文档预览 FAQ 怎么修改可预览最大文件大小和页面数? # the max size of documents to allow to be previewed online, in MB. Default is 2 MB max-size = 2 # how many pages are allowed to be previewed online. Default is 50 pages max-pages = 50 然后重启 Seafile 服务 cd /data/haiwen/seafile-pro-server-1.7.0/ ./seafile.sh restart ./seahub.sh restart Seafile Professional Edition SOFTWARE LICENSE AGREEMENT NOTICE: READ THE FOLLOWING TERMS AND CONDITIONS CAREFULLY BEFORE YOU DOWNLOAD, INSTALL OR USE Seafile, Inc'S PROPRIETARY SOFTWARE. BY INSTALLING OR USING THE SOFTWARE, YOU AGREE TO BE BOUND BY THE FOLLOWING TERMS AND CONDITIONS. IF YOU DO NOT AGREE TO THE FOLLOWING TERMS AND CONDITIONS, DO NOT INSTALL OR USE THE SOFTWARE. 1. DEFINITIONS "Seafile, Inc" means Seafile, Inc "You and Your" means the party licensing the Software hereunder. "Software" means the computer programs provided under the terms of this license by Seafile, Inc together with any documentation provided therewith. 2. GRANT OF RIGHTS 2.1 General The License granted for Software under this Agreement authorizes You on a non-exclusive basis to use the Software. The Software is licensed, not sold to You and Seafile, Inc reserves all rights not expressly granted to You in this Agreement. The License is personal to You and may not be assigned by You to any third party. 2.2 License Provisions Subject to the receipt by Seafile, Inc of the applicable license fees, You have the right use the Software as follows: * You may use and install the Software on an unlimited number of computers that are owned, leased, or controlled by you. * Nothing in this Agreement shall permit you, or any third party to disclose or otherwise make available to any third party the licensed Software, source code or any portion thereof. * You agree to indemnify, hold harmless and defend Seafile, Inc from and against any claims or lawsuits, including attorney's fees, that arise as a result from the use of the Software; * You do not permit further redistribution of the Software by Your end-user customers 5. NO DERIVATIVE WORKS The inclusion of source code with the License is explicitly not for your use to customize a solution or re-use in your own projects or products. The benefit of including the source code is for purposes of security auditing. You may modify the code only for emergency bug fixes that impact security or performance and only for use within your enterprise. You may not create or distribute derivative works based on the Software or any part thereof. If you need enhancements to the software features, you should suggest them to Source Tree Solutions for version improvements. 6. OWNERSHIP You acknowledge that all copies of the Software in any form are the sole property of Seafile, Inc. You have no right, title or interest to any such Software or copies thereof except as provided in this Agreement. 7. CONFIDENTIALITY You hereby acknowledge and agreed that the Software constitute and contain valuable proprietary products and trade secrets of Seafile, Inc, embodying substantial creative efforts and confidential information, ideas, and expressions. You agree to treat, and take precautions to ensure that your employees and other third parties treat, the Software as confidential in accordance with the confidentiality requirements herein. 8. DISCLAIMER OF WARRANTIES EXCEPT AS OTHERWISE SET FORTH IN THIS AGREEMENT THE SOFTWARE IS PROVIDED TO YOU "AS IS", AND Seafile, Inc MAKES NO EXPRESS OR IMPLIED WARRANTIES WITH RESPECT TO ITS FUNCTIONALITY, CONDITION, PERFORMANCE, OPERABILITY OR USE. WITHOUT LIMITING THE FOREGOING, Seafile, Inc DISCLAIMS ALL IMPLIED WARRANTIES INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR FREEDOM FROM INFRINGEMENT. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSIONS MAY NOT APPLY TO YOU. THE LIMITED WARRANTY HEREIN GIVES YOU SPECIFIC LEGAL RIGHTS, AND YOU MAY ALSO HAVE OTHER RIGHTS THAT VARY FROM ONE JURISDICTION TO ANOTHER. 9. LIMITATION OF LIABILITY YOU ACKNOWLEDGE AND AGREE THAT THE CONSIDERATION WHICH Seafile, Inc IS CHARGING HEREUNDER DOES NOT INCLUDE ANY CONSIDERATION FOR ASSUMPTION BY Seafile, Inc OF THE RISK OF YOUR CONSEQUENTIAL OR INCIDENTAL DAMAGES WHICH MAY ARISE IN CONNECTION WITH YOUR USE OF THE SOFTWARE. ACCORDINGLY, YOU AGREE THAT Seafile, Inc SHALL NOT BE RESPONSIBLE TO YOU OR ANY THIRD PARTY FOR ANY LOSS-OF-PROFIT, LOST SAVINGS, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF A LICENSING OR USE OF THE SOFTWARE. 10. INDEMNIFICATION You agree to defend, indemnify and hold Seafile, Inc and its employees, agents, representatives and assigns harmless from and against any claims, proceedings, damages, injuries, liabilities, costs, attorney's fees relating to or arising out of Your use of the Software or any breach of this Agreement. 11. TERMINATION Your license is effective until terminated. You may terminate it at any time by destroying the Software or returning all copies of the Software to Seafile, Inc. Your license will terminate immediately without notice if You breach any of the terms and conditions of this Agreement, including non or incomplete payment of the license fee. Upon termination of this Agreement for any reason: You will uninstall all copies of the Software; You will immediately cease and desist all use of the Software; and will destroy all copies of the software in your possesion. 12. UPDATES AND SUPPORT Seafile, Inc has the right, but no obligation, to periodically update the Software, at its complete discretion, without the consent or obligation to You or any licensee or user. 13. TAXES AND OTHER CHARGES You are responsible for paying all sales, use, excise valuated or other taxes or governmental charges in addition to freight, insurance and installation charges and import or export duties. YOU HEREBY ACKNOWLEDGE THAT YOU HAVE READ THIS AGREEMENT, UNDERSTAND IT AND AGREE TO BE BOUND BY ITS TERMS AND CONDITIONS. 本章节用来说明如果个性化配置服务器。 在开源版中由以下三个配置文件: ccnet/ccnet.conf: 用来配置网络 seafile-data/seafile.conf: 用来配置 Seafile 与 FileServer. seahub_settings.py: 用来配置 Seahub 专业版中还包含以下一个配置文件: pro-data/seafevents.conf : 包含搜索与文件预览的配置信息 邮件: 发送邮件提醒 个性化邮件提醒 用户管理 用户管理 用户存储容量和上传/下载文件大小限制 存储容量与文件上传/下载大小限制 自定义 Web 服务器个性化配置 配置文件 配置 自定义 Web 通过修改 ccnet/ccnet.conf 文件,可以对 Seafile 的网络选项进行设置,示例如下: [General] # Seafile 服务器端可不设置 USER_NAME=example # 请不要改变这个 ID. ID=eb812fd276432eff33bcdde7506f896eb4769da0 # Seafile 服务器名称, 客户端可见。 NAME=example # Seahub(Seafile Web)外部链接. 客户端可见. # 域名部分(i.e., www.example.com),在文件同步中也会用到. # 注意: 外部链接意味着"如果你使用 Nginx, 请使用 Nginx 相关地址" SERVICE_URL=http://www.example.com:8000 [Network] # Ccnet 通过此端口监听客户端连接. 如被占用请更改. # Seafile 服务器中有效. PORT=10001 [Client] # Ccnet 通过此端口监听本地连接(如 Seahub 网站)请求. # 此端口如被其他服务占用, Seafile 和 Seahub 将无法正常工作. # 如果你想在同一主机上运行 Seafile 和 Seahub, 请改为客户端使用的端口. PORT=13419 注意: 为使更改生效,请重启 Seafile. cd seafile-server ./seafile.sh restart ccnet.conf 配置 如果你想向所有用户分配存储空间(e.g. 2GB)时 . 你可以在 seafile-data/seafile.conf 文件中增加以下语句 [quota] # 单位为 Gb, 请使用数字 default = 2 这个设置对所有用户生效. 如果你想对某一特定用户进行容量分配, 请以管理员身份登陆 Seahub 网站, 在System Admin页面中进行设置. 如果你不想存储所有的文件修改历史, 可以对所有的资料库,设置一个默认的文件修改历史记录。 [history] keep_days = days of history to keep 可通过 seafile-data/seafile.conf 的 [fileserver] (3.1 版之前用 [httpserver] ) 部分对 Seafile fileserver 进行配 置 [fileserver] # fileserver 的 tcp 端口 port = 8082 更改上传/下载设置. [fileserver] # 上传文件最大为200M. max_upload_size=200 # 最大下载目录限制为200M. max_download_dir_size=200 注意: 请重启 Seafile和 Seahub以使修改生效. ./seahub.sh restart ./seafile.sh restart seafile.conf 配置 存储空间容量设置(seafile.conf) 默认历史记录设置(seafile.conf) Seafile fileserver 配置(seafile.conf) 邮件提醒会使某些功能有更好的用户体验, 比如发送邮件提醒用户新消息到达. 请在 seahub_settings.py 中 加入以下语句以安装邮件提醒功能 (同时需要对你的邮箱进行设置). EMAIL_USE_TLS = False EMAIL_HOST = 'smtp.domain.com' # smpt 服务器 EMAIL_HOST_USER = 'username@domain.com' # 用户名和域名 EMAIL_HOST_PASSWORD = 'password' # 密码 EMAIL_PORT = '25' DEFAULT_FROM_EMAIL = EMAIL_HOST_USER SERVER_EMAIL = EMAIL_HOST_USER Gmail 用户请加入以下语句: EMAIL_USE_TLS = True EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'username@gmail.com' EMAIL_HOST_PASSWORD = 'password' EMAIL_PORT = 587 DEFAULT_FROM_EMAIL = EMAIL_HOST_USER SERVER_EMAIL = EMAIL_HOST_USER 注意1:如果邮件功能不能正常使用,请在 logs/seahub.log 日志文件中查看问题原因. 更多信息请见 Email notification list. 注意2: 如果你想在非用户验证情况下使用邮件服务,请将 EMAIL_HOST_PASSWORD 置为blank ( '' ). Seahub 在默认文件系统(/tmp/seahub_cache/)中缓存文件(avatars, profiles, etc) . 你可以通过 Memcached 进行缓存操作 (前提是你已经安装了 python-memcache 模块). CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } } 通过修改 seahub_settings.py 文件,可以对 Seahub 网站进行更改. Seahub 配置 Seahub 下发送邮件提醒 缓存 Seahub 设置 # 时区设置,更多请见: # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # 部分操作系统下有效. # 如果是 Windows 用户,请设置为你的系统时区. TIME_ZONE = 'UTC' # Seahub 网站 URL. 邮件提醒中会包含此地址 SITE_BASE = 'http://www.example.com/' # 网站名称. 邮件提醒中会包含此名称. SITE_NAME = 'example.com' # 网站标题 SITE_TITLE = 'Seafile' # 若果不想再根路径上运行 Seahub 网站, 请更改此设置. # e.g. setting it to '/seahub/' would run seahub on http://example.com/seahub/. SITE_ROOT = '/' # 是否使用 pdf.js 在线查看 pdf 文件. 默认为 `True`. # NOTE: 1.4版本后可用. USE_PDFJS = True # 是否在网站页面显示注册按钮,默认为 `False`. # NOTE: 1.4版本后可用. ENABLE_SIGNUP = False # 用户注册后是否立刻激活,默认为 `True`. # 如设置为 `False`, 需管理员手动激活. # NOTE: 1.8版本后可用 ACTIVATE_AFTER_REGISTRATION = False # 管理员新增用户后是否给用户发送邮件. 默认为 `True`. # NOTE: 1.4版本后可用. SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER = True # 管理员重置用户密码后是否给用户发送邮件. 默认为 `True`. # NOTE: 1.4版本后可用. SEND_EMAIL_ON_RESETTING_USER_PASSWD = True # 隐藏 `Organization` 标签 . # 如果你希望你的私人 Seafile 像 https://cloud.seafile.com/ 一样运行, 请设置. CLOUD_MODE = True # 在线查看文件大小限制,默认为 30M. FILE_PREVIEW_MAX_SIZE = 30 * 1024 * 1024 # cookie的保存时限,(默认为 2 周). SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2 # 是否存储每次请求的会话数据. SESSION_SAVE_EVERY_REQUEST = False # 浏览器关闭后,是否清空用户会话 cookie SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 使用服务器端的 crypto, 或者用户自行选择 crypto 方法. FORCE_SERVER_CRYPTO = True # 是否可以把一个群组设为公开. ENABLE_MAKE_GROUP_PUBLIC = False 注意: 请重启 Seahub 以使更改生效. 如果更改没有生效,请删除 seahub_setting.pyc 缓存文件. ./seahub.sh restart 邮件提醒会使某些功能有更好的用户体验, 比如发送邮件提醒用户新消息到达. 请在 seahub_settings.py 中 加入以下语句以安装邮件提醒功能 (同时需要对你的邮箱进行设置). EMAIL_USE_TLS = False EMAIL_HOST = 'smtp.domain.com' # smpt 服务器 EMAIL_HOST_USER = 'username@domain.com' # 用户名和域名 EMAIL_HOST_PASSWORD = 'password' # 密码 EMAIL_PORT = '25' DEFAULT_FROM_EMAIL = EMAIL_HOST_USER SERVER_EMAIL = EMAIL_HOST_USER Gmail 用户请加入以下语句: EMAIL_USE_TLS = True EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'username@gmail.com' EMAIL_HOST_PASSWORD = 'password' EMAIL_PORT = 587 DEFAULT_FROM_EMAIL = EMAIL_HOST_USER SERVER_EMAIL = EMAIL_HOST_USER 注意1:如果邮件功能不能正常使用,请在 logs/seahub.log 日志文件中查看问题原因. 更多信息请见 Email notification list. 注意2: 如果你想在非用户验证情况下使用邮件服务,请将 EMAIL_HOST_USER 和 EMAIL_HOST_PASSWORD 置为blank ( '' ). (但是注意一点,这种情况下,邮件将不会记录发件人 From: 信息.) 注意3: 请重启 Seahub 以使更改生效. 如果更改没有生效,请删除 seahub_setting.pyc 缓存文件. ./seahub.sh restart 发送邮件提醒 注意: 不同版本之间有所差异,本文档基于 2.0.1 版本编写。请按提示,自行更改相应代码,以实现个性化 功能。重启 Seahub 以使更改生效。 Subject seahub/seahub/auth/forms.py line:103 Body seahub/seahub/templates/registration/password_reset_email.html Subject seahub/seahub/views/sysadmin.py line:424 Body seahub/seahub/templates/sysadmin/user_add_email.html Subject seahub/seahub/views/sysadmin.py line:368 Body seahub/seahub/templates/sysadmin/user_reset_email.html Subject seahub/seahub/share/views.py line:668 Body seahub/seahub/templates/shared_link_email.html 个性化邮件提醒 用户重置密码 管理员添加新用户 管理员重置用户密码 用户发送文件/文件夹外链 在 seahub_settings.py 配置文件中可以个性化用户管理 # 是否开启用户注册功能,默认为 `False`,不开启. ENABLE_SIGNUP = False # 用户注册后是否立即激活,默认为 `True`,立即激活。 # 如果设置为 `False`,需管理员在系统管理界面激活用户。 ACTIVATE_AFTER_REGISTRATION = False # 管理员添加新用户后,是否给此用户发送邮件提醒。默认为 `True`,发送邮件提醒。 # 此功能只支持 1.4 及之后版本。 SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER = True # 用户登录时,输入几次错误后,显示验证码。 LOGIN_ATTEMPT_LIMIT = 3 # 关闭浏览器后,是否保存 Session Cookie,默认为 `False`,不保存。 SESSION_EXPIRE_AT_BROWSER_CLOSE = False 用户管理 可以通过在 seafile-data/seafile.conf 文件中增加以下语句,来为所有用户设置默认存储容量(比 如,2GB)。 [quota] # 用户存储容量,单位默认为 GB,要求为整数。 default = 2 此设置对所有用户有效,如果想为某一用户单独设置,请在管理员界面更改。 如果你不想保存所有的文件修改历史,可以在 seafile-data/seafile.conf 中设置: [history] # 文件修改历史保存期限(单位为“天”) keep_days = 10 在 seafile-data/seafile.conf 中: [fileserver] # 设置最大上传文件为 200M. max_upload_size=200 # 设置最大下载文件/目录为 200M. max_download_dir_size=200 存储容量与文件上传/下载大小限制 存储容量 文件修改历史保存期限 (seafile.conf) 文件上传/下载大小限制 假设你目前在使用 2.1.0 版本。 在 seafile-server-2.1.0/seahub/media 下新建 custom 。将所有的个性化 文件放到这个文件夹下。 当你升级到 2.1.1 版本的时候,升级脚本会自动的将此文件夹复制到 seafile- server-2.1.1/seahub/media 下。 1. 将 Logo 文件放在 seahub/media/custom/ 文件夹下 2. 在 seahub_settings.py 中,重新定义 LOGO_PATH 的值。 LOGO_PATH = 'custom/mylogo.png' 3. 在 seahub_settings.py 中,重新定义 LOGO_URL 的值。 LOGO_URL = 'http://your-seafile.com' 1. 在 seahub/media/custom/ 中新建 CSS 文件,比如: custom.css 。 2. 在 seahub_settings.py 中,重新定义 BRANDING_CSS 的值。 BRANDING_CSS = 'custom/custom.css' 注意: 仅支持 2.1 及之后的版本 在 /seahub-data/custom 目录下,新建 templates 文件夹。 1. 复制 seahub/seahub/templates/footer.html 到 seahub-data/custom/templates 。 2. 自行编写 footer.html 。 1. 复制 seahub/seahub/templates/download.html 到 seahub-data/custom/templates 。 2. 自行编写 download.html 。 1. 复制 seahub/seahub/help/templates/help.html 到 seahub-data/custom/templates 。 个性化 Seahub 个性化 Logo 及 CSS 样式 自定义 Logo 自定义 Seahub CSS 样式 个性化 Seahub 页面 个性化“页脚”页面 个性化“下载”页面 个性化“帮助”页面 2. 自行编写 help.html 。 作为系统管理员,你可以通过点击网页左上侧的 tools 按钮(在个人头像旁)进入管理界面: 点击完 tools 按钮,你便进入管理界面: 账号管理 日志文件位置 备份和恢复: 备份和恢复 服务器强制关闭或系统坏掉后,恢复损坏的文件: Seafile FSCK 你可以运行Seafile GC来删除无用的文件: Seafile GC 管理员 进入管理界面 账号管理 日志 备份和恢复 当你部署好 Seahub 网站,你应该已经创建好一个管理员账号。用管理员账号登陆后,便可添加、删除, 用户、资料库等。 在 System Admin 页面,管理员可以重置用户密码。 对于私有服务器,默认设置不支持用户通过邮箱来重置密码。如果你想采用这种方式,你必须首先设置邮 件通知。 你可以进入 seafile-server 目录,运行 reset-admin.sh 脚本。这个脚本可以帮助你重置管理员账号和密 码。 账号管理 用户管理 重置用户密码 如果忘记管理员账号或密码如何处理? Seafile 服务器有如下日志文件: Ccnet Log: logs/ccnet.log Seafile server: logs/seafile.log FileServer: logs/http.log Controller: logs/controller.log Seahub:logs/seahub_django_request.log, logs/seahub.log 日志 一般来说,Seafile 备份分为两部分内容: Seafile 资料库数据 数据库 如果你根据我们的手册来安装 Seafile 服务器,你应该有如下目录结构: haiwen # 根目录,haiwen 为示例文件名,如果你安装到其他目录则为相应的目录名 --seafile-server-2.x.x # Seafile 安装包解压缩后目录 --seafile-data # Seafile 配置文件和数据(如果你选择默认方式) --seahub-data # Seahub 数据 --ccnet # Ccnet 配置文件和数据 --seahub.db # Seahub 用到的 sqlite3 数据库文件 --seahub_settings.py # seahub可选属性配置文件 你所有的资料库数据都存储在 haiwen 目录。 Seafile 也在数据库中存储一些重要的元数据。数据库的命名和存储路径取决于你所使用的数据库。 对于 SQLite, 数据库文件也存储在 haiwen 目录。相应的数据文件如下: ccnet/PeerMgr/usermgr.db: 包含用户信息 ccnet/GroupMgr/groupmgr.db: 包含群组信息 seafile-data/seafile.db: 包含资料库元数据信息 seahub.db: 包含网站前端(Seahub)所用到的数据库表信息 对于 MySQL, 数据库由管理员来创建,所以不同的人部署,可能会有不同的文件名。大体而言,有如下三 个数据库会被创建: ccnet-db: 包含用户和群组信息 seafile-db: 包含资料库元数据信息 seahub.db: 包含网站前端(seahub)所用到的数据库表信息 备份需要如下三步: 1. 可选步: 如果你选择 SQLite 作为数据库,首先停掉 Seafile 服务器; 2. 备份数据库; 3. 备份存放 Seafile 数据的目录; 我们假设你的 Seafile 数据位于 /data/haiwen 目录下,并且你想将其备份到 /backup 目录( /backup 目 录可以是 NFS(网络文件系统),可以是另一台机器的 Windows 共享,或者是外部磁盘)。请在 /backup 目录下创建如下目录结构: /backup ---- databases/ 包含数据库备份 ---- data/ 包含 Seafile 数据备份 概述 备份步骤 我们建议你每次将数据库备份到另一个单独文件,并且不要覆盖最近一周来备份过的旧数据库文件。 MySQL 假设你的数据库名分别为 ccnet-db , seafile-db 和 seahub-db 。 mysqldump 会自动锁住表,所以在你备 份 MySql 数据库的时候,不需要停掉 Seafile 服务器。通常因为数据库表非常小,所以执行以下命令备份 不会花太长时间。 mysqldump -h [mysqlhost] -u[username] -p[password] --opt ccnet-db > /backup/databases/ccnet-db.sql.`date +"%Y-%m-%d-%H-%M-%S"` mysqldump -h [mysqlhost] -u[username] -p[password] --opt seafile-db > /backup/databases/seafile-db.sql.`date +"%Y-%m-%d-%H-%M-%S"` mysqldump -h [mysqlhost] -u[username] -p[password] --opt seahub-db > /backup/databases/seahub-db.sql.`date +"%Y-%m-%d-%H-%M-%S"` SQLite 对于 SQLite 数据库,在备份前你需要停掉 Seafile 服务器。 sqlite3 /data/haiwen/ccnet/GroupMgr/groupmgr.db .dump > /backup/databases/groupmgr.db.bak.`date +"%Y-%m-%d-%H-%M-%S"` sqlite3 /data/haiwen/ccnet/PeerMgr/usermgr.db .dump > /backup/databases/usermgr.db.bak.`date +"%Y-%m-%d-%H-%M-%S"` sqlite3 /data/haiwen/seafile-data/seafile.db .dump > /backup/databases/seafile.db.bak.`date +"%Y-%m-%d-%H-%M-%S"` sqlite3 /data/haiwen/seahub.db .dump > /backup/databases/seahub.db.bak.`date +"%Y-%m-%d-%H-%M-%S"` 由于所有的数据文件都存储在 /data/haiwen 目录, 备份整个目录即可。你可以直接拷贝整个目录到备份目 录,或者你也可以用 rsync 做增量备份。 直接拷贝整个数据目录, cp -R /data/haiwen /backup/data/haiwen-`date +"%Y-%m-%d-%H-%M-%S"` 这样每次都会产生一个新的备份文件夹,完成后,可以删掉旧的备份。 如果你有很多数据,拷贝整个数据目录会花很多时间,这时你可以用rsync做增量备份。 rsync -az /data/haiwen /backup/data 这个命令数据备份到 /backup/data/haiwen 下。 让拷贝和 rsync 过程成功结束是非常重要的,否则你最近的一些数据将会丢失。 注意: 因为 ccnet/ccnet.conf 文件中的 ID 值必须和 ccnet/mykey.peer 中值的 SHA1 值保持一致。所以不 备份数据库 备份 Seafile 资料库数据 要忘记拷贝 ccnet/mykey.peer 文件。 如果你当前的 Seafile 服务器已经坏掉,将使用另一台机器来提供服务,需要恢复数据: 1. 假设在新机器中,Seafile 也被部署在了 /data/haiwen 目录中,拷贝 /backup/data/haiwen 到新机器 中即可。 2. 恢复数据库。 现在你已经拥有了数据库备份文件,你可以按如下步骤来进行恢复。 MySQL mysql -u[username] -p[password] ccnet-db < ccnet-db.sql.2013-10-19-16-00-05 mysql -u[username] -p[password] seafile-db < seafile-db.sql.2013-10-19-16-00-20 mysql -u[username] -p[password] seahub-db.sql.2013-10-19-16-01-05 SQLite cd /data/haiwen mv ccnet/PeerMgr/usermgr.db ccnet/PeerMgr/usermgr.db.old mv ccnet/GroupMgr/groupmgr.db ccnet/GroupMgr/groupmgr.db.old mv seafile-data/seafile.db seafile-data/seafile.db.old mv seahub.db seahub.db.old sqlite3 ccnet/PeerMgr/usermgr.db < usermgr.db.bak.xxxx sqlite3 ccnet/GroupMgr/groupmgr.db < groupmgr.db.bak.xxxx sqlite3 seafile-data/seafile.db < seafile.db.bak.xxxx sqlite3 seahub.db < seahub.db.bak.xxxx 恢复备份 恢复数据库 在服务器端,Seafile 通过一种内部格式将文件存储在资料库中。Seafile 对于文件和目录有其独有的表现方 式(类似于Git)。 默认安装下,这些内部对象,会被直接存储在服务器的文件系统中(例如 Ext4,NTFS)。由于大多数文 件系统,不能在服务器非正常关闭或系统崩溃后,保证文件内容的完整性。所以,如果当系统崩溃时,正 在有新的内部对象被写入,那么当系统重启时,这些文件就会被损坏,相应的资料库也无法使用。 注意: 如果你把 seafile-data 目录存储在有后备电源的 NAS(例如 EMC 或 NetApp)系统中,或者使用 S3 作为专业版的服务器,内部对象不会被损坏。 从 2.0 版开始,Seafile 服务器引入了 seafile-fsck 工具来帮助你恢复这些毁坏的对象(类似于git-fsck工 具)。这个工具将会进行如下两项工作: 1. 检查 Seafile 内部对象的完整性,并且删除毁坏的对象。 2. 恢复所有受影响的资料库到最近一致,可用的状态。 seaf-fsck 工具接受如下参数: seaf-fsck [-c config_dir] [-d seafile_dir] [repo_id_1 [repo_id_2 ...]] 附加选项: -D, --dry-run: 检查文件系统对象和块,但是不删除它们。 -s, --strict: 检查文件系统对象id是否和内容一致。 假设你按照标准安装,将 Seafile 安装到 /data/haiwen 目录下,在此目录下,运行如下命令: cd /data/haiwen/seafile-server-{version}/seafile export LD_LIBRARY_PATH=./lib:${LD_LIBRARY_PATH} ./bin/seaf-fsck -c ../../ccnet -d ../../seafile-data 这将会检查所有服务器端的资料库。 如果你知道哪个具体的资料库被毁坏,你也可以在命令行指定资料库 ID。可以通过在 Seahub 中访问资料 库,来获得资料库 ID。在浏览器的地址栏,你将会看到类似于 https://seafile.example.com/repo/601c4f2f- 5209-47a0-b939-1f8c7fae9ff2 的请求地址,其中 601c4f2f-5209-47a0-b939-1f8c7fae9ff2 便是资料库 ID. 在恢复之后,一些最近的文件更改或许会丢失,但是现在你可以访问这个资料库。请注意,此时一些客户 端可能无法同步资料库,在客户端先解除同步,然后重新同步即可。 Seafile FSCK Seafile 利用存储去重技术来减少存储资源的利用。 简单来说,这包含如下两层含义: 不同版本的文件或许会共享一些数据块。 不同的资料库也或许会共享一些数据块。 运用这项技术之后,在你删除一个资料库时,会导致底层数据块不会被立即删除,因此 Seafile 服务器端没 用的数据块将会增多。 通过运行垃圾回收程序,可以清理无用的数据块,释放无用数据块所占用的存储空间。 垃圾回收程序将会清理如下两种无用数据块: 1. 未被资料库所引用的数据块。 2. 设置了历史长度限制的资料库的过期数据块。 运行垃圾回收程序之前,请先在服务器端停掉 Seafile 程序。 这是因为垃圾回收程序,会错误的删除刚刚写入 Seafile 的新的数据块。 运行垃圾回收程序 ./seaf-gc.sh run 程序结束之后,运行以下命令,检查是否误删了还在使用的数据块,如果误删,会显示警告信息。 ./seaf-gc.sh verify 可以通过 dry-run 选项,设置在运行垃圾回收程序前,进行完整性检查 程序将会显示 所有的数据块数量 和 将要被删除的数据块数量 ./seaf-gc.sh dry-run 如果资料库已损坏,因为无法判断数据块是否还在被其他资料库使用,所以垃圾回收程序将会停止运行。 可以通过 force 选项,强制删除已损坏资料库的数据。通过将已损坏资料库的数据块标记为“未使用”,来 将其删除。 ./seaf-gc.sh force 运行垃圾回收程序 Seafile GC 3.1.2 及之后版本 3.1.2 及之前版本 cd seafile-server-{version}/seafile export LD_LIBRARY_PATH=./lib:${LD_LIBRARY_PATH} ./bin/seafserv-gc -c ../../ccnet -d ../../seafile-data 如果你源码编译安装 Seafile 服务器,仅仅运行 seafserv-gc -c ../../ccnet -d ../../seafile-data 当垃圾回收程序结束后,你也可以检查是否一些有用的数据块被错误的删除: seafserv-gc -c ../../ccnet -d ../../seafile-data --verify 如果一些有用的数据块丢失,它将会打印一些警告信息。 如果你想在真正删除一些数据块之前,做一些常规检查,可以使用--dry-run选项 seafserv-gc -c ../../ccnet -d ../../seafile-data --dry-run 这将会向你展示数据块总数量和将被删除数据块数量。 如果在服务器端一些库的元数据被毁坏,垃圾回收程序将会停止处理,因为它无法识别是否一个数据块被 一些毁坏的资料库所使用。如果你不想保留毁坏库的数据块,可以运行垃圾回收程序并使用--ignore-errors 或-i选项。 seafserv-gc -c ../../ccnet -d ../../seafile-data --ignore-errors 这将会屏蔽毁坏资料库的数据块为无用状态并删除掉它们。 Seafile WebDAV和FUSE扩展使得Seafile能够很容易的与第三方应用协调工作。例如,你可以在IOS上通 过WebDAV接口访问Seafile上的文件。 WebDAV和FUSE扩展 Seafile WebDAV Server(SeafDAV)在Seafile Server 2.1.0版本中被加入. 在下面的维基中, 我们假设你将Seafile安装到 /data/haiwen 目录下。 SeafDAV配置文件是 /data/haiwen/conf/seafdav.conf . 如果它还没有被创建,你可以自行创建它。 [WEBDAV] # 默认值是false。改为true来使用SeafDAV server。 enabled = true port = 8080 # 如果fastcgi将被使用则更改fastcgi的值为true。 fastcgi = false # 如果你将seafdav部署到nginx/apache,你需要更改“share_name”的值。 share_name = / 每次配置文件被修改后,你需要重启Seafile服务器使之生效。 ./seafile.sh restart 你的WebDAV客户端将在地址 http://example.com:8080 访问WebDAV服务器。 [WEBDAV] enabled = true port = 8080 fastcgi = false share_name = / 你的WebDAV客户端将在地址 http://example.com/seafdav 访问WebDAV服务器。 [WEBDAV] enabled = true port = 8080 fastcgi = true share_name = /seafdav 在上面的配置中,'''share_name'''的值被改为'''/seafdav''', 它是你指定给seafdav服务器的地址后缀。 WebDAV扩展 SeafDAV配置 示例配置 1: No nginx/apache 示例配置 2: With Nginx/Apache 相应的Nginx配置如下 (无 https): location /seafdav { fastcgi_pass 127.0.0.1:8080; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; access_log /var/log/nginx/seafdav.access.log; error_log /var/log/nginx/seafdav.error.log; } Nginx配置为https: location /seafdav { fastcgi_pass 127.0.0.1:8080; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param HTTPS on; access_log /var/log/nginx/seafdav.access.log; error_log /var/log/nginx/seafdav.error.log; } 首先编辑 apache2.conf 文件, 添加如下这行到文件结尾(或者根据你的Linux发行版将其添加到 httpd.conf ): FastCGIExternalServer /var/www/seafdav.fcgi -host 127.0.0.1:8080 注意, /var/www/seafdav.fcgi 仅仅只是一个占位符, 实际在你的系统并不需要有此文件。 Nginx 无 HTTPS Nginx 有 HTTPS Apache 第二, 修改Apache配置文件 (site-enabled/000-default): 根据你的Apache配置当你[将要部署 Seafile 和 Apache|已经部署 Seafile 和 Apache], 加入Seafdav的相关 配置: ServerName www.myseafile.com DocumentRoot /var/www Alias /media /home/user/haiwen/seafile-server/seahub/media RewriteEngine On # # seafile fileserver # ProxyPass /seafhttp http://127.0.0.1:8082 ProxyPassReverse /seafhttp http://127.0.0.1:8082 RewriteRule ^/seafhttp - [QSA,L] # # seafile webdav # RewriteCond %{HTTP:Authorization} (.+) RewriteRule ^(/seafdav.*)$ /seafdav.fcgi$1 [QSA,L,e=HTTP_AUTHORIZATION:%1] RewriteRule ^(/seafdav.*)$ /seafdav.fcgi$1 [QSA,L] # # seahub # RewriteRule ^/(media.*)$ /$1 [QSA,L,PT] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /seahub.fcgi$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 根据你的apache配置当你配置Seafile网站和Apache并启用Https, 加入seafdav的相关配置: Apache 无 HTTPS Apache 有 HTTPS ServerName www.myseafile.com DocumentRoot /var/www Alias /media /home/user/haiwen/seafile-server/seahub/media SSLEngine On SSLCertificateFile /etc/ssl/cacert.pem SSLCertificateKeyFile /etc/ssl/privkey.pem RewriteEngine On # # seafile fileserver # ProxyPass /seafhttp http://127.0.0.1:8082 ProxyPassReverse /seafhttp http://127.0.0.1:8082 RewriteRule ^/seafhttp - [QSA,L] # # seafile webdav # RewriteCond %{HTTP:Authorization} (.+) RewriteRule ^(/seafdav.*)$ /seafdav.fcgi$1 [QSA,L,e=HTTP_AUTHORIZATION:%1] RewriteRule ^(/seafdav.*)$ /seafdav.fcgi$1 [QSA,L] # # seahub # RewriteRule ^/(media.*)$ /$1 [QSA,L,PT] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /seahub.fcgi$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 在Windows平台,我们推荐使用webdav客户端软件例如Cyberduck或BitKinex. webdav对于Windows浏览 器的支持实现并不是十分可用,因为: Windows 浏览器需要利用HTTP数字认证。但是由于Seafile在服务器端不存储纯文本密码,所以它不支持这个特性。HTTP基本认证只被HTTPS支持(这是合理的)。但是浏览器不支持自我签署的证书。 结论就是如果你有一个合法的ssl证书,你应该能过通过Windows浏览器来访问seafdav。否则你应该使用 客户端软件。Windows XP被声明不支持HTTPS webdav. 在Linux平台你有更多的选择。你可以利用文件管理器例如Nautilus来连接webdav服务器,或者在命令行使 用davfs2。 使用davfs2 关于客户端的注意事项 Windows Linux sudo apt-get install davfs2 sudo mount -t davfs -o uid= https://example.com/seafdav /media/seafdav/ -o选项设置挂载目录的拥有者为,使得非root用户拥有可写权限。 我们建议对于davfs2,禁用锁操作。你需要编辑/etc/davfs2/davfs2.conf use_locks 0 Finder对于WebDAV的支持不稳定而且较慢. 所以我们建议使用webdav客户端软件如Cyberduck. 默认, seafdav是未被启用的。检查你是否在 seafdav.conf 中设置 enabled = true 。 如果没有,更改配置文 件并重启seafle服务器。 如果你将SeafDAV部署在Nginx/Apache, 请确保像上面的配置文件一样更改 share_name 的值。重启Seafile 服务器后重新测试。 Mac OS X 常见问题 客户端无法连接seafdav服务器 客户端得到"Error: 404 Not Found"错误 在Seafile系统上文件被分割成数据块,这意味着在你的Seafile服务器上存储的并不是完整的文件而是数据 块。这种设计能够方便有效的运用数据去重技术。 然而,有时系统管理员想要直接访问服务器上的文件,你可以使用seaf-fuse来做到这点。 Seaf-fuse 是一种FUSE虚拟文件系统的实现. 一句话来说就是,它挂载所有的Seafile文件到一个目录(它被 称为'''挂载点'''),所以你可以像访问服务器上的正常目录一样来访问由Seafile服务器管理的所有文件。 注意: 加密的目录不可以被seaf-fuse来访问。 Seaf-fuse的当前实现是只读访问,这意味着你不能通过挂载的目录来修改文件。 对于debian/centos系统,你需要在“fuse”组才有权限来挂载一个FUSE目录。 假设你想挂载到 /data/seafile-fuse . mkdir -p /data/seafile-fuse 注意: 在启动seaf-fuse之前, 你应该已经通过执行 ./seafile.sh start 启动好Seafile服务器。 ./seaf-fuse.sh start /data/seafile-fuse ./seaf-fuse.sh stop 现在你可以列出 /data/seafile-fuse 目录的内容 $ ls -lhp /data/seafile-fuse drwxr-xr-x 2 root root 4.0K Jan 1 1970 abc@abc.com/ drwxr-xr-x 2 root root 4.0K Jan 1 1970 foo@foo.com/ drwxr-xr-x 2 root root 4.0K Jan 1 1970 plus@plus.com/ drwxr-xr-x 2 root root 4.0K Jan 1 1970 sharp@sharp.com/ drwxr-xr-x 2 root root 4.0K Jan 1 1970 test@test.com/ FUSE扩展 如何启动seaf-fuse 创建一个目录作为挂载点 用脚本来启动seaf-fuse 停止seaf-fuse 挂载目录的内容 顶层目录 顶层目录包含许多子目录,每个子目录对应一个用户 文件和目录的时间戳不会被保存 $ ls -lhp /data/seafile-fuse/abc@abc.com drwxr-xr-x 2 root root 924 Jan 1 1970 5403ac56-5552-4e31-a4f1-1de4eb889a5f_Photos/ drwxr-xr-x 2 root root 1.6K Jan 1 1970 a09ab9fc-7bd0-49f1-929d-6abeb8491397_My Notes/ 从上面的列表可以看出,在用户目录下有一些子目录,每个子目录代表此用户的一个资料库,并且以'''{库 id}-{库名字}'''的格式来命名。 $ ls -lhp /data/seafile-fuse/abc@abc.com/5403ac56-5552-4e31-a4f1-1de4eb889a5f_Photos/ -rw-r--r-- 1 root root 501K Jan 1 1970 image.png -rw-r--r-- 1 root root 501K Jan 1 1970 sample.jpng 如果你运行 ./seaf-fuse.sh start 时,遇到"Permission denied"的错误信息, 很有可能你没有在“fuse用户组”解 决方法: 把你的用户加到fuse组 sudo usermod -a -G fuse 退出shell重新登陆 现在试着再一次执行 ./seaf-fuse.sh start 。 每个用户的目录 资料库的目录 如果出现"Permission denied"的错误 Seafile提供了一个叫做加密资料库的高级功能来保护您的隐私。文件加密/解密在客户端执行。加密资料库 的密码没有保存在服务器端。即便服务器的系统管理员也不能浏览加密资料库文件的内容。 当你创建一个加密资料库,你将为其提供一个密码。所有资料库中的数据在上传到服务器之前都将用密码 进行加密。 加密流程: 1. 生成一个32字节长的加密的强随机数。它将被用作文件加密键(“文件键”)。 2. 用用户提供的密码对文件键进行加密。我们首先用PBKDF2算法从密码中获取到一个键/值对,然后用 AES 256/CBC来加密文件键,所得结果被称之为“加密的文件键”。加密的文件键将会被发送到服务器 并保存下来。当你需要访问那部分数据,你可以从加密的文件键中解密出文件键。 3. 所有的文件数据都将用AES 256/CBC加密的文件键进行加密。我们用PBKDF2算法从文件键中获取键/ 值对。加密完成后,数据将会被传送到服务器端。 上述加密过程即可在桌面客户端执行也可在网站浏览器中执行。浏览器端加密功能可在服务器端使用。当 你从加密的资料库中上传和下载时,如下过程将会发生: 服务器端发回加密的数据,浏览器将会在客户端用JavaScript解密它们。 浏览器在客户端用JavaScript加密后,将加密后的数据发回服务器。服务器端直接保存加密后的结果。 在上述过程中,你的密码将不会在服务器端传输。 当你同步一个加密资料库到桌面客户端或者在网站浏览器中浏览一个资料库,桌面客户端/浏览器需要确认 你的密码。当你创建一个资料库,一个“魔力标志”将会在密码和资料库id中获得。这个标志和资料库一起存 储到服务器端。客户端用这个标志检查你的密码是否正确在你同步和浏览资料库之前。魔力标志是通过 PBKDF2算法经过1000次迭代产生,所以它将非常安全抵抗蛮力破解。 为了最大安全性,纯文本的密码也不会保存在客户端。客户端只保存从“文件键”获得的键/值对,它用来解 密数据。所以如果你忘记密码,你将不能恢复和访问服务器端的数据。 每一个Seafile桌面客户端有一个唯一的私有键。当一个客户端和服务器建立连接,它们将会交换公共键并 协商出一个会话键。会话键是由PDKDF2算法产生的加密的安全随机数。用RSA加密后的会话键将在客户 端和服务器端进行交换。这个会话键将会被用来用AES-256/CBC算法加密数据传输。 当文件下载链接被点击,用户将会获得一个可从fileserver访问此文件的随机URL,这个url将会在1个小时 内合法以支持网站浏览器缓存。 今后,我们将会增加一种机制来深层次的防止通过URLS进行蛮力破解。 安全性 加密资料库如何工作? 客户端与服务器的连接如何加密? 为什么fileserver会传输非共享的私有文件内容给所有知道其URL的 人? How to Build Seafile How to Setup Develop Envirnoment Seafile Code Standard Seafile Open API Seafile Web API Seafile Python API Seafile Implement Detail Seafile Data Model Seafile Server Components Seafile Sync algorithm Develop Documents You can build Seafile from our source code package or from the Github repo directly. Client Linux Max OS X Server Build Seafile server How to Build Seafile The following list is what you need to install on your development machine. You should install all of them before you build seafile. Package names are according to Ubuntu 12.04. For other Linux distros, please find their corresponding names yourself. autoconf/automake/libtool libevent-dev ( 2.0 or later ) libcurl4-openssl-dev (1.0.0 or later) libgtk2.0-dev ( 2.24 or later) uuid-dev intltool (0.40 or later) libsqlite3-dev (3.7 or later) valac (only needed if you build from git repo) libjansson-dev libqt4-dev valac cmake libfuse-dev (for seafile >= 2.1) python-simplejson (for seaf-cli) sudo apt-get install autoconf automake libtool libevent-dev libcurl4-openssl-dev libgtk2.0-dev uuid-dev intltool libsqlite3-dev valac libjansson-dev libqt4-dev cmake libfuse-dev For a fresh Fedora 20 installation, the following will install all dependencies via YUM: $ sudo yum install wget gcc libevent-devel openssl-devel gtk2-devel libuuid-devel sqlite-devel jansson-devel intltool cmake qt-devel fuse-devel libtool vala gcc-c++ First you should get the latest source of libsearpc/ccnet/seafile/seafile-client: Download the source tarball of the latest tag from https://github.com/haiwen/libsearpc/tags (use v3.0-latest) https://github.com/haiwen/ccnet/tags https://github.com/haiwen/seafile/tags https://github.com/haiwen/seafile-client/tags For example, if the latest released seafile client is 3.0.2, then just use the v3.0.2 tags of the four projects. You should get four tarballs: libsearpc-v3.0-latest.tar.gz ccnet-3.0.2.tar.gz Linux Preparation Building seafile-3.0.2.tar.gz seafile-client-3.0.2.tar.gz export version=3.0.2 alias wget='wget --content-disposition -nc' wget https://github.com/haiwen/libsearpc/archive/v3.0-latest.tar.gz wget https://github.com/haiwen/ccnet/archive/v${version}.tar.gz wget https://github.com/haiwen/seafile/archive/v${version}.tar.gz wget https://github.com/haiwen/seafile-client/archive/v${version}.tar.gz Now uncompress them: tar xf libsearpc-v3.0-latest.tar.gz tar xf ccnet-${version}.tar.gz tar xf seafile-${version}.tar.gz tar xf seafile-client-${version}.tar.gz To build Seafile client, you need first build libsearpc and ccnet, seafile. export PREFIX=/usr export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" export PATH="$PREFIX/bin:$PATH" cd libsearpc-${version} ./autogen.sh ./configure --prefix=$PREFIX make sudo make install cd ccnet-${version} ./autogen.sh ./configure --prefix=$PREFIX make sudo make install cd seafile-${version}/ ./autogen.sh ./configure --prefix=$PREFIX --disable-gui make sudo make install set paths libsearpc ccnet seafile seafile-client cd seafile-client-${version} cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX . make sudo make install when installing to a custom $PREFIX , i.e. /opt , you may need a script to set the path variables correctly cat >$PREFIX/bin/seafile-applet.sh <$PREFIX/bin/seaf-cli.sh <" echo "exit." exit 1 } if [ $# != 1 ]; then usage fi python seaf_migrate_3.py $1 NOTE: You can get repo_id at address bar of Seahub or through Seafile web API Then seaf_migrate_3.py will call Seafile-API to copy library: 1. Get library ID from input. 2. Get origin_repo object. 3. Create a new library, set name, desc and owner. Copy Library 4. Copy stuffs from old library to new library. Example code #!/usr/bin/env python import os import stat import sys from seaserv import seafile_api def count_files_recursive(repo_id, path='/'): num_files = 0 for e in seafile_api.list_dir_by_path(repo_id, path): if stat.S_ISDIR(e.mode): num_files += count_files_recursive(repo_id, os.path.join(path, e.obj_name)) else: num_files += 1 return num_files #Get library ID from input origin_repo_id = sys.argv[1] #Get origin_repo object origin_repo = seafile_api.get_repo(origin_repo_id) username = seafile_api.get_repo_owner(origin_repo_id) #Create a new library, set name, desc and owner new_repo_id = seafile_api.create_repo(name=origin_repo.name, desc=origin_repo.desc, username=username, passwd=None) #Copy stuffs from old library to new library dirents = seafile_api.list_dir_by_path(origin_repo_id, '/') for e in dirents: print "copying: " + e.obj_name obj_name = e.obj_name seafile_api.copy_file(origin_repo_id, '/', obj_name, new_repo_id, '/', obj_name, username, 0, 1) print "*" * 60 print "OK, verifying..." print "Origin library(%s): %d files. New Library(%s): %d files." % ( origin_repo_id[:8], count_files_recursive(origin_repo_id), new_repo_id[:8], count_files_recursive(new_repo_id)) print "*" * 60 If you execute script file successfully, you will see these output, and of course a new library at myhome page of Seahub. foo@foo:~/haiwen/seafile-server-3.0.3/upgrade$ ./seaf_migrate_test.sh c8bbb088-cbaf-411d-8bd8-9870763f0e5f Loading ccnet config from /home/foo/haiwen/ccnet Loading seafile config from /home/foo/haiwen/seafile-data copying: test.html copying: test-dir-2 copying: test-dir copying: solar.html copying: examples.desktop ************************************************************ OK, verifying... Origin library(c8bbb088): 10 files. New Library(4d6f4837): 10 files. ************************************************************ This list is based on seafile-server-3.0.3, and parameter was omitted. For more infomation about Seafile-API, please see api.py. seafile_api.add_inner_pub_repo() seafile_api.cancel_copy_task() seafile_api.change_repo_passwd() seafile_api.check_passwd() seafile_api.check_permission() seafile_api.check_quota() seafile_api.check_repo_access_permission() seafile_api.copy_file() seafile_api.count_inner_pub_repos() seafile_api.create_enc_repo() seafile_api.create_repo() seafile_api.create_virtual_repo() seafile_api.del_file() seafile_api.delete_repo_token() seafile_api.delete_repo_tokens_by_peer_id() seafile_api.diff_commits() seafile_api.edit_repo() seafile_api.generate_repo_token() seafile_api.get_commit_list() seafile_api.get_copy_task() seafile_api.get_decrypt_key() seafile_api.get_deleted() seafile_api.get_dir_id_by_commit_and_path() seafile_api.get_dir_id_by_path() seafile_api.get_file_id_by_commit_and_path() seafile_api.get_file_id_by_path() seafile_api.get_file_revisions() seafile_api.get_file_size() seafile_api.get_files_last_modified() seafile_api.get_group_repo_list() List Of Seafile-API seafile_api.get_group_repoids() seafile_api.get_group_repos_by_owner() seafile_api.get_fileserver_access_token() seafile_api.get_inner_pub_repo_list() seafile_api.get_orphan_repo_list() seafile_api.get_owned_repo_list() seafile_api.get_repo() seafile_api.get_repo_list() seafile_api.get_repo_owner() seafile_api.get_repo_size() seafile_api.get_share_in_repo_list() seafile_api.get_share_out_repo_list() seafile_api.get_shared_groups_by_repo() seafile_api.get_user_quota() seafile_api.get_user_self_usage() seafile_api.get_user_share_usage() seafile_api.get_virtual_repo() seafile_api.get_virtual_repos_by_owner() seafile_api.group_share_repo() seafile_api.group_unshare_repo() seafile_api.is_inner_pub_repo() seafile_api.is_password_set() seafile_api.is_repo_owner() seafile_api.is_valid_filename() seafile_api.list_dir_by_commit_and_path() seafile_api.list_dir_by_dir_id() seafile_api.list_dir_by_path() seafile_api.list_file_by_file_id() seafile_api.list_repo_tokens() seafile_api.list_repo_tokens_by_email() seafile_api.move_file() seafile_api.post_dir() seafile_api.post_empty_file() seafile_api.post_file() seafile_api.put_file() seafile_api.query_fileserver_access_token() seafile_api.remove_inner_pub_repo() seafile_api.remove_repo() seafile_api.remove_share() seafile_api.rename_file() seafile_api.revert_dir() seafile_api.revert_file() seafile_api.revert_repo() seafile_api.set_group_repo_permission() seafile_api.set_passwd() seafile_api.set_repo_owner() seafile_api.set_share_permission() seafile_api.set_user_quota() seafile_api.share_repo() seafile_api.unset_passwd() Seafile internally uses a data model similar to GIT's. It consists of Repo , Branch , Commit , FS , and Block . A repo is also called a library. Every repo has an unique id (UUID), and attributes like description, creator, password. Unlike git, only two predefined branches is used, i.e., local and master . In PC client, modifications will first be committed to the local branch. Then the master branch is downloaded from server, and merged into local branch. After that the local branch will be uploaded to server. Then the server will fast-forward its master branch to the head commit of the just uploaded branch. When users update a repo on the web, modifications will first be committed to temporary branch on the server, then merged into the master branch. Like in GIT. There are two types of FS objects, SeafDir Object and Seafile Object . SeafDir Object represents a directory, and Seafile Object represents a file. A file is further divided into blocks with variable lengths. We use Content Defined Chunking algorithm to divide file into blocks. A clear overview of this algorithm can be found at http://pdos.csail.mit.edu/papers/lbfs:sosp01/lbfs.pdf. On average, a block's size is around 1MB. This mechanism makes it possible to deduplicate data between different versions of frequently updated files, improving storage efficiency. It also enables transferring data to/from multiple servers in parallel. Data Model Repo Branch Commit FS Block Seafile server comprises of the following services. Ccnet daemon (ccnet for client side or ccnet-server for server side):networking service daemon. In our initial design, Ccnet worked like a traffic bus. All the network traffic between client, server and internal traffic between different components would go through Ccnet. After further development we found that file transfer is improved by utilizing the Seafile daemon component directly. Seafile daemon:data service daemon Seahub:the website. Seafile server package contains a light-weight Python HTTP server gunicorn that serves the website. Seahub runs as an application within gunicorn. FileServer: handles raw file upload/download functions for Seahub. Due to Gunicorn being poor at handling large files, so we wrote this "FileServer" in the C programming language to serve raw file upload/download. Controller: monitors ccnet and Seafile daemons, restarts them if necessary. The picture below shows how Seafile desktop client syncs files with Seafile server: The picture below shows how Seafile mobile client interacts with Seafile server: The picture below shows how Seafile mobile client interacts with Seafile server if the server is configured behind Nginx/Apache: Components of Seafile Server This article tries to give an overview on Seafile's file synchronization algorithm. For clarity, some details are deliberately omitted, but it should help you get the big picture. To better understand this article, you should first read [[Seafile data model]]. Each downloaded repo is bound to an ordinary local folder. Using Git's terminology, we call this local folder the "worktree". A typical synchronization work flow consists of the following steps: 1. Seafile client daemon detects changes in the worktree (via inotify etc). 2. The daemon commits the changes to the local branch. 3. Download new changes from the master branch on the server (if any). 4. Merge the downloaded branch into local branch (also checkout changes to worktree). 5. Fast-forward upload local branch to server's master branch. Since the above work flow may be interrupted at any point by shutting down the program or computer, after reboot we lose all notifications from the OS. We need a reliable and efficient way to determine which files in the worktree has been changed (even after reboots). We use Git's index file to do this. It caches the timestamps of every file in the worktree when the last commit is generated. So we can easily and reliably detect changed files in the worktree since the latest commit by comparing timestamps. Another notable case is what happens if two clients try to upload to the server simultaneously. The commit procedure on the server ensures atomicity. So only one client will update the master branch successfully, while the other will fail. The failing client will restart the sync work flow later. It will first merge the changes from the succeeded client then upload again. The most tricky part of the syncing algorithm is merging. Git's merge algorithm doesn't work well enough for auto synchronization. Firstly, if a merge is interrupted, git requires you to reset to the latest commit and merge again. It's not a problem for Git since it's a single command. But seafile runs as a daemon and may be kill at any time. The user may have changed some files in the worktree between the interruption and restart. Resetting the worktree will LOSE user's uncommitted data. Secondly, Git's merge command will fail if it fails to update a file in the worktree. But on Windows, an opened Office document will be write-protected by the Office process. So the merge may fail in this case. That's why programs use Git directly for auto-sync is not reliable. Synchronization algorithm The Basic Work Flow Merge Seafile implement its own merge algorithm based on the ideas from Git's merge algorithm. It handles the first problem by "redoing" the merge carefully after restart. It handles the second problem by not starting merge until no file is write-protected in the worktree. Seafile's merge algorithm also handles all the conflict cases handled by Git.
还剩211页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 5 人已下载

下载pdf

pdf贡献者

gbp8

贡献于2014-12-10

下载需要 5 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf