seafile是一个非常好用的,适合于小团队的文件共享服务软件。同时,它还是一款国内的开源软件,难得可贵。这两天我花了一些时间架设seafile服务,记录下来备用。

seafile介绍

  • 组件

    • ccnet:网络服务

    • seafile server:负责数据访问

    • seahub:网站界面,供用户管理自己在服务器上的数据和账户信息

    • HttpServer: 负责直接从网站上下载和上传文件

    • controller: 负责监控和重启上述部件

  • seafile环境

seafile组网示意图

如图示,seafile服务器位于防火墙之后,需要在防火墙做好端口映射。

我用的是中国移动的宽带,无法通过官网的下载链接直接下载。必须fanqiang到https://code.google.com/p/seafile/downloads/list手工下载,然后再通过winscp传送到linux服务器上,颇为费劲。

安装

服务端支持linux和windows两种操作系统,本文的选择是debian 6 32bit。

  • 准备存储

    事先安装好nfs client,然后挂载NFS

    $ sudo mkdir -p /mnt/seafile
    $ sudo echo "192.168.55.120:/tank/documents/seafile  /mnt/seafile  nfs  defaults  0 1" >> /etc/fstab
    $ sudo mount /mnt/seafile
  • 准备运行环境

    $ sudo aptitude update
    $ sudo aptitude install python2.6 python-setuptools python-simplejson python-imaging sqlite3
  • 安装

    查看系统架构,32bit or 64bit

    $ sudo uname -m

    创建seafile根目录,源文件将解压到该根目录下

    $ sudo mkdir /usr/local/src/seafile
    $ sudo tar -C /usr/local/src/seafile -zxvf seafile-server_1.7.0_i386.tar.gz
  • 配置

    $ cd /usr/local/src/seafile-server-*
    $ sudo ./setup-seafile.sh

    配置参数如下:

参数

说明

seafile server name

seafile服务器的名字,3~15 个字符,可用英文字母,数字,下划线

seafile server ip or domain

seafile服务器的IP地址或者域名。客户端将通过这个IP或者域名来访问Seafile服务。需要注意的是,在本例中,该IP地址应设为防火墙的互联网IP

ccnet server port

默认:10001

seafile data dir

seafile数据存放目录,默认是./seafile/seafile-data,建议放在一个NFS服务器中,方便日后的扩容和维护。

seafile server port

seafile服务器使用的TCP端口,默认为12001

seafile httpserver port

seafile httpserver使用的TCP端口,默认为8082

seahub admin email

sehaub管理员的帐户。该帐号仅是管理员帐号,用于发送邮件通知的email帐号需在seafile.conf中进行配置。

seahub admin password

seahub管理员的密码

seafile的配置文件是分布式的,不同组件的配置文件单独分开,不利于维护。

  • 启动

    $ sudo ./seafile.sh start
    $ sudo ./seahub.sh start

    假如seahub的端口不是默认的8000,则

    $ sudo ./seahub.sh start <new_port>
  • 停止

    $ sudo ./seafile.sh stop
    $ sudo ./seahub.sh stop
  • 重启

    $ sudo ./seafile.sh restart
    $ sudo ./seahub.sh restart

    假如seahub的端口不是默认的8000,则

    $ sudo ./seahub.sh restart <new_port>

升级

由于seafile的开发非常活跃,新版本层出不穷,因而经常需要升级。

升级前需先中止seahub和seafile进程:

$ sudo ./seahub.sh stop
$ sudo ./seafile.sh stop

新下载的版本也一并解压到seafile的根目录下,在本文中指的是`/usr/local/src/seafile`,读者也可以自行选择其它目录。最终的目录结构如下:

/usr/local/src
   -- seafile-server-1.7.0
   -- seafile-server-1.4.5
   -- ccnet
   -- seafile-data
  • 小版本升级

    指的是从1.6.0升级到1.6.1。

    $ cd /usr/local/src/seafile/seafile-server-1.3.1/seahub/media
    $ cp -rf avatars/* ../../../seahub-data/avatars/
    $ sudo rm -rf avatars
    $ sudo ln -s ../../../seahub-data/avatars
  • 连续版本升级

    指的是从1.6.0升级到1.7.0。

    $ cd /usr/local/src/seafile-server1.7.0/upgrade
    $ sudo ./update_1.6_1.7.sh
  • 非连续版本升级

    现在的版本为1.4,最新版本为1.7,需连续执行

    cd /usr/local/src/seafile-server1.7.0/upgrade
    $ sudo ./update_1.4_1.5.sh
    $ sudo ./update_1.5_1.6.sh
    $ sudo ./update_1.6_1.7.sh

    升级完毕后启动seahub和seafile进程。

  • 随机启动

    seafile服务由多个进程共同协作而成,首先创建一个seafile-server配置文件:

    /etc/init.d/seafile-server
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:		seafile-server
    # Required-Start:	$all
    # Required-Stop:	$all
    # Should-Start:		$local_fs
    # Should-Stop:		$local_fs
    # Default-Start:	2 3 4 5
    # Default-Stop:		0 1 6
    ### END INIT INFO
    
    # Change the value of "user" to your user name
    user=root
    
    # Change the value of "script_path" to your path of seafile installation
    script_path=/usr/local/src/seafile/seafile-server-1.7.0
    
    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

    以上脚本仅用于start,缺乏stop和restart的功能。

更新

$ sudo chmod +x /etc/init.d/seafile-server
$ sudo update-rc.d seafile-server defaults

tips

  • 变更默认端口后,seafile可能会出现问题,这种情况下建议直接重装了事,包括服务端和客户端。

  • 客户端的删除

    • 删除客户端之前请确保ccnet进程已杀掉,否则无法正常卸载。

    • 卸载完后,手工删除客户端的配置文件夹C:\用户\<用户名>\ccnet

  • 客户端的配置

    客户端的配置文件为C:\用户\<用户名>\ccnet\ccnet.conf,假如服务端的变更了默认端口号,需在此进行变更。