Seafile server安装手册
部署 Seafile 服务器(使用 MySQL)
到http://www.seafile.com/download下载最新的服务器安装包.
部署和目录设计
公司的名称为"kaiqigu",你也已经下载seafile-server_1.4.0_x86-64.tar.gz 到你的home 目录下。 在这里建议这样的目录结构:
mkdir kaiqigu
mv seafile-server_1.4.0_x86-64.tar.gz kaiqigu
#将 seafile-server_1.4.0_x86-64.tar.gz 移动到 kaiqigu 目录下后
cd kaiqigu
tar -xzf seafile-server_1.4.0_x86-64.tar.gz
mkdir installed
mv seafile-server_1.4.0_x86-64.tar.gz installed
现在,你的目录看起来应该像这样:
# kaiqigu
├── 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
这样设计目录的好处在于
1:和 seafile 相关的配置文件都可以放在 kaiqigu 目录下,便于集中管理.
2:后续升级时,你只需要解压最新的安装包到"kaiqigu"目录下.
这样你可以重用"kaiqigu"目录下已经存在的配置文件,而不用重新配置.
安装 Seafile 服务器
安装前的准备工作
安装好 CentOS 6.5 的基本服务器,首先需要设置接下来会使用到的 admin 系统账号,并设置好 ssh 的公钥登录,方便接下来的部署。
使用 root 账号登录(或者,具有 root 权限的账号)登录后,为确保 sudo 已经安装了,执行以下命令,如果提示已经安装,则无需任何操作,如果没有安装,则进行安装:
# yum install sudo
接下来,创建 admin 系统账号:
# useradd admin
# mkdir /home/admin/.ssh
# chown admin:admin /home/admin/.ssh/
# chmod 0700 /home/admin/.ssh/
然后,在 .ssh 目录中构建 authorized_keys 文件,方式不限,使用 vi 或者 echo 都行,之后,再设置好 authorized_keys 文件的所有者和属性,操作如下:
# cd /home/admin/.ssh
# echo "xxxxxxx(公钥内容)"> authorized_keys
# chown admin:admin authorized_keys
# chmod 0600 authorized_keys
为方便接下来的操作,赋予 admin 用户 sudo 的权限:
# echo "admin ALL=(ALL) NOPASSWD:ALL">> /etc/sudoers
用 admin 账号登录后,使用 yum 机制安装所需用到的软件包:
$ sudo su
# yum install epel-release
# yum install zlib-devel bzip2-devel ncurses-developenssl-devel
# yum install make gcc-c++ cmake bison-devel
# yum install swig patch sqlite-devel readlinereadline-devel
# yum install rsync nload
# chown admin:admin /data
以 admin 账户登录,执行
$ cd /data
$ mkdir soft
安装Seafile 服务器之前,请确认已安装以下软件
l Nginx
l MySQL server
l Python2.7
Web Server 部分
该部分内容,适用于需要安装 nginx 的 Web Server 服务器上,不需要安装 nginx 的服务器,可以忽略。
在没有特殊需求的情况下,采用 nginx 官方发布的预编译版本进行安装,方便将来的升级维护(需要访问外网):
$ cd /data/soft
$ wgethttp://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ sudo yum installnginx-release-centos-6-0.el6.ngx.noarch.rpm
安装了 nginx 软件仓库后,添加的文件为:
/etc/yum.repos.d/nginx.repo
/etc/pki/rpm-gpg/RPM-GPG-KEY-nginx
紧接着安装 nginx:
$ sudo yum install nginx
安装完成后,相关的目录和文件有:
/etc/rc.d/init.d/nginx# 自启动脚本
/usr/sbin/nginx
/etc/nginx/# 配置文件目录
/var/log/nginx/# 默认的日志目录
/var/run/nginx.pid
/var/run/nginx.lock
/var/cache/nginx/# 相关临时文件目录
管理 nginx :(启动、重启、停止和配置测试)
# service nginx start
# service nginx restart
# service nginx stop
# service nginx configtest
如无特殊应用,使用 centos 默认的 mysql-server (版本为 5.1.73)安装即可。
$ sudo su
# yum install mysql-server
启动 mysql
# service mysqld start
修改 root 账号密码
# /usr/bin/mysqladmin -u root password'new-password'
修改mysql数据存放目录
# /etc/rc.d/init.d/mysqld stop
# cd /var/lib
# cp -a mysql/ /data/
# vim /etc/my.cnf
修改datadir=/var/lib/mysql为datadir=/data/mysql
注释掉socket=/var/lib/mysql/mysql.sock一行,添加socket=/data/mysql/mysql.sock
# vim /etc/rc.d/init.d/mysqld
注释掉datadir="$result"添加datadir="/data/mysql"
# vim /usr/bin/mysqld_safe
修改DATADIR="/var/lib/mysql"为DATADIR="/data/mysql"
建立一个mysql.sock的链接
# ln -s /data/mysql/mysql.sock/var/lib/mysql/mysql.sock
# /etc/rc.d/init.d/mysqld start
进入mysql查看数据目录
sudo mysql -uroot -p xxx
mysql>show variables like '%dir%';
查看datadir目录是否为/data/mysql
该部分内容,适用需要安装 Python 来跑游戏后端应用的服务器,不需要安装 Python 的服务器,可以忽略。
CentOS6.5 默认安装的是 Python 2.6.6 ,我们需要 2.7.x 系列的,尤其是 2.7.8 以上的,运行所需内存降了很多。所以,选择手动编译安装 Python2.7.8 。
在有互联网公网连接的情况下,使用 admin 账号执行如下操作。
编译安装 Python:
$ cd /data/soft
$ wgethttps://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz
$ tar xzvf Python-2.7.10.tgz
$ cd Python-2.7.10
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
安装 setuptools
$ cd /data/soft
$ wgethttps://pypi.python.org/packages/source/s/setuptools/setuptools-15.2.tar.gz
$ tar xzvf setuptools-15.2.tar.gz
$ cd setuptools-15.2
$ sudo /usr/local/bin/python2.7 setup.pyinstall
iPython
安装 pip
$ wgethttps://pypi.python.org/packages/source/p/pip/pip-6.1.1.tar.gz
$ tar xzvf pip-6.1.1.tar.gz
$ cd pip-6.1.1
$ sudo /usr/local/bin/python2.7 setup.pyinstall
使用 pip 安装剩余的需要的组件
$ sudo su
# /usr/local/bin/pip2.7 install redis
# /usr/local/bin/pip2.7 install M2Crypto
# /usr/local/bin/pip2.7 installbackports.ssl_match_hostname
# /usr/local/bin/pip2.7 install greenlet
# /usr/local/bin/pip2.7 installopenpyxl==1.7.0
# /usr/local/bin/pip2.7 install pysqlite
# /usr/local/bin/pip2.7 install readline
# /usr/local/bin/pip2.7 install tornadogevent psutil supervisor
# /usr/local/bin/pip2.7 install ipython
在没有互联网公网连接的情况,需要先在能联网的机器上在 pypi.python.org 网站上将以上软件的源码包都下载下来,然后,复制过来,逐个解压,并通过运行 setup.py 进行安装。
Python访问 MySQL 数据库,需要安装相应的客户端软件包,通常会使用MySQL-python 这个软件包,而这个包,需要 mysql 的开发文件。
可以采用如下的步骤进行安装:
# yum install mysql-devel
# /usr/local/bin/pip2.7 installMySQL-python
# wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz
# tar -xzvf Imaging-1.1.7.tar.gz
# cd Imaging-1.1.7
# /usr/local/bin/python2.7 setup.pyinstall
安装seafile-server-4.1.2
cdseafile-server-4.1.2
./setup-seafile-mysql.sh #运行安装脚本并回答预设问题
如果你的系统中没有安装上面的某个软件,那么 Seafile初始化脚本会提醒你安装相应的软件包.
该脚本会依次询问你一些问题,从而一步步引导你配置 Seafile 的各项参数
在这里, 你会被要求选择一种创建 Seafile 数据库的方式:
-------------------------------------------------------
Please choose a way toinitialize seafile databases:
-------------------------------------------------------
[1] Create newccnet/seafile/seahub databases
[2] Use existingccnet/seafile/seahub databases
具体选择哪项, 取决于你是否拥有根密码.
l 如果选择1, 你需要提供根密码. 脚本程序会创建数据库和用户。
l 如果选择2,ccnet/seafile/seahub 数据库应该已经被你(或者其他人)提前创建。
如果选择 [1] Create new ccnet/seafile/seahub databases,你会被问三个问题:
如果你选择[2] Use existing ccnet/seafile/seahub databases,
你会被问到如下三个问题:
如果安装正确完成,你会看到下面这样的输出
现在你的目录结构看起来应该是这样:
#treehaiwen -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 toseafile-server-1.8.2
├──seahub-data
│ └── avatars
├──seahub_settings.py # optional configfile
└──seahub_settings.pyc
seafile-server-latest文件夹为指向当前Seafile 服务器文件夹的符号链接. 将来你升级到新版本后,升级脚本会自动更新使其始终指向最新的 Seafile 服务器文件夹..
启动 Seafile 服务器和 Seahub 网站
在 seafile-server-1.8.2 目录下,运行如下命令
启动 Seafile:
./seafile.shstart # 启动 Seafile 服务
启动 Seahub
./seahub.shstart <port> # 启动 Seahub 网站 (默认运行在8000端口上)
小贴士:你第一次启动 seahub 时,seahub.sh脚本会提示你创建一个seafile 管理员帐号。
服务启动后, 打开浏览器并输入以下地址
http://192.168.1.111:8000/
你会被重定向到登陆页面. 输入你在安装 Seafile 时提供的用户名和密码后,你会进入 Myhome 页面,新建资料库.
恭喜!现在你已经成功的安装了 Seafile 服务器.
在另一端口上运行 Seahub
如果你不想在默认的 8000 端口上运行 Seahub, 而是想自定义端口(比如8001)中运行,请按以下步骤操作:
关闭 Seafile 服务器
./seahub.shstop # 停止 Seafile 进程
./seafile.shstop # 停止 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端口上)
关闭/重启 Seafile 和 Seahub
关闭
./seahub.sh stop # 停止 Seahub
./seafile.sh stop # 停止 Seafile 进程
重启
./seafile.sh restart # 停止当前的 Seafile 进程,然后重启 Seafile
./seahub.sh restart # 停止当前的 Seahub 进程,并在 8000 端口重新启动 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 进程
备份步骤
你所有的资料库数据都存储在 kaiqigu目录。
Seafile 也在数据库中存储一些重要的元数据。数据库的命名和存储路径取决于你所使用的数据库。
对于 MySQL, 数据库由管理员来创建,所以不同的人部署,可能会有不同的文件名。大体而言,有如下三个数据库会被创建:
・ ccnet-db:包含用户和群组信息
・ seafile-db:包含资料库元数据信息
・ seahub.db:包含网站前端(seahub)所用到的数据库表信息
备份需要如下三步:
・ 可选步: 如果你选择 SQLite 作为数据库,首先停掉 Seafile 服务器;【这里不介绍SQLite数据库备份】
・ 备份数据库;
・ 备份存放 Seafile 数据的目录;
这里假设你的 Seafile 数据位于 /data/kaiqigu目录下,并且你想将其备份到 /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"`
备份 Seafile 资料库数据
由于所有的数据文件都存储在 /data/kaiqigu目录, 备份整个目录即可。你可以直接拷贝整个目录到备份目录,或者你也可以用 rsync 做增量备份。
直接拷贝整个数据目录,
cp-R /data/kaiqigu /backup/data/kaiqigu-`date +"%Y-%m-%d-%H-%M-%S"`
这样每次都会产生一个新的备份文件夹,完成后,可以删掉旧的备份。如果你有很多数据,拷贝整个数据目录会花很多时间,这时你可以用rsync做增量备份。
rsync-az /data/kaiqigu /backup/data
这个命令数据备份到 /backup/data/kaiqigu下。
让拷贝和 rsync 过程成功结束是非常重要的,否则你最近的一些数据将会丢失。
注意: 因为 ccnet/ccnet.conf文件中的 ID 值必须和 ccnet/mykey.peer中值的 SHA1 值保持一致。所以不要忘记拷贝 ccnet/mykey.peer文件。
恢复备份
如果你当前的 Seafile 服务器已经坏掉,将使用另一台机器来提供服务,需要恢复数据:
・ 假设在新机器中,Seafile 也被部署在了 /data/kaiqigu目录中,拷贝 /backup/data/kaiqigu到新机器中即可。
・ 恢复数据库。
恢复数据库
现在你已经拥有了数据库备份文件,你可以按如下步骤来进行恢复。
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