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

 

DB Server 部分

如无特殊应用,使用 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 Server 部分

该部分内容,适用需要安装 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 进行安装。

安装 MySQL-python

Python访问 MySQL 数据库,需要安装相应的客户端软件包,通常会使用MySQL-python 这个软件包,而这个包,需要 mysql 的开发文件。

可以采用如下的步骤进行安装:

# yum install mysql-devel

# /usr/local/bin/pip2.7 installMySQL-python

安装 Imaging

# 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   # 启动 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-dbseahub-dbmysqldump会自动锁住表,所以在你备份 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

 

Mysql-u[username] -p[password] seafile-db

 

mysql -u[username] -p[password]seahub-db.sql.2013-10-19-16-01-05