当前位置: 首页 技术教程 正文

Seafile开源的个人网盘及企业网盘搭建

Dr.V |
2560

随着大批网盘的倒下,你还在依靠互联网上的网盘携带传输文件么?本文教你如何自己搭建属于自己的个人大容量网盘及企业网盘。

  1. seafile简介Seafile是一个面向企业、团队的云盘,解决文件管理和共享的问题。在此基础上,Seafile提供群组协作的功能,形成一个以文档为中心的协作平台。并且提供全平台的客户端,包括linux、windows及mac.并且提供手机客户端,支持Android和IOS。

  2. 下载服务器

    seafile官网下载地址

    选择下载最新版,这里我用的是最新Linux版的5.1.1 64bit.

  3. 解压将下载下来的压缩包解压到/home/seafile下即可.
    tar -zxvf seafile-server-5.1.1 -C /home/seafile
  4. 系统环境准备

    因为官方是在centos7上测试的,centos7的自带python是2.7版本的。这里我的系统是centos6.5。而centos6.5的自带python版本是2.6的,所以需要自己编译安装python2.7。

    1)编译安装python2.7

    cd Python-2.7.8
    ./configure --prefix=/usr/local/python2.7
    make
    make install

    2)安装以下软件

    • mysql #yum 安装即可
    • python-setuptools
    • python-imaging
    • python-ldap #与ldap结合认证
    • MySQL-python
    • python-memcached #与memcached结合,提高缓存性能
    • pillow #很重要,解决后期验证码刷不出来的问题
      以上软件包都可以去 pypi 下载。
      安装实例:

      tar zxvf Imaging-1.1.7.tar.gz
      cd Imaging-1.1.7
      python2.7 setup.py install   #注意是python2.7!否则安装也是按系统python2.6编译的,会导致seafile安装不了
  5. 安装seafile服务器
    cd /home/seafile/seafile-server-5.1.1
    ./setup-seafile-mysql.sh

    接下来按照提示一步步填写就ok了.

  6. 修改防火墙
    $ vim /etc/sysconfig/iptables
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 8000 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 8082 -j ACCEPT
  7. 启动、停止seafile服务器
    ./seafile.sh start
    ./seahub.sh start
    ./seafile.sh stop
    ./seafile.sh stop

至此个人网盘就搭建成功了。

当然个人网盘远不能满足我们需求,让我们再看看企业级网盘的应用。

  1. Nginx结合HTTPS下配置seahub保证传输的加密性1)在/home/seafile下生成证书
    openssl genrsa -out privkey.pem 2048
    openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095

    2)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 /home/seafile/cacert.pem;            #cacert.pem 文件路径
       ssl_certificate_key /home/seafile/privkey.pem;    #privkey.pem 文件路径
       server_name www.yourdoamin.com;
       proxy_set_header X-Forwarded-For $remote_addr;
       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;
           proxy_connect_timeout  36000s;
           proxy_read_timeout  36000s;
       }
       location /media {
           root /home/seafile/seafile-server-latest/seahub;
       }
     }

    3)重新加载nginx

    ../../sbin/nginx -t
    ../../sbin/nginx -s reload

    4)修改 SERVICE_URL 和 FILE_SERVER_ROOT

    $ vim seafile/conf/ccnet
    SERVICE_URL = http://your domain name
    $ vim seafile/conf/seahub_setting.py
    FILE_SERVER_ROOT = 'https://seafile.in66.cc/seafhttp'

    5)修改防火墙 增加开放443端口

    -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
  2. 使用memcached提高性能

    1)yum安装memcache

    2)启动memcached

    3)编辑sehub_settings.py添加相关配置

    CACHES = {
     'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': '127.0.0.1:11211',
     }
    }
  3. 编写service服务脚本,实现开启自启动1)创建/etc/sysconfig/seafile
    $ vim /etc/sysconfig/seafile
    user=root
    seafile_dir=/home/seafile
    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_port=8000

2)创建/etc/init.d/seafile文件

$ vim /etc/init.d/seafile
#!/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
        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

3)创建/etc/init.d/seahub文件

$ vim /etc/init.d/seahub
#!/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
        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 $RETVA

4)接下来启动程序

chmod 550 /etc/init.d/seafile
chmod 550 /etc/init.d/seahub
chkconfig --add seafile
chkconfig --add seahub
chkconfig seahub on
chkconfig seafile on

5)执行

service seafile start
service seahub start

企业版的网盘就ok啦!可以给几百人个人都不是事!

美中不足的一点是每个人的账号密码都需要管理员手工常见,麻烦,费事,下面再介绍个更加高大上的,结合ldap来进行认证。

  1. ldap的认证配置我这里就不多说。自行google下。

  2. 结合ldap。
    • 这里我使用Email方式。因为ldap配置时公司几乎都会给个Email账号这样方便在seafile中区分唯一id。

配置说明:

[LDAP]
HOST = ldap://192.168.1.123/  #ldap地址
BASE = cn=users,accounts,dc=example,dc=com  #根据你自己的ldap结构来配置
USER_DN = [email protected]
PASSWORD = secret
LOGIN_ATTR = mail

下面是我的ldap配置:

[LDAP]
HOST = ldap://10.10.106.201/
BASE = cn=users,cn=accounts,dc=in77,dc=cc
LOGIN_ATTR = mail

说明:我没配USER_DN和PASSWORD,因为我的ldap用户匿名用户就可以访问。我刚配的时候就是坑啊!配了USER_DN,死活没用。踩坑成功。。

  1. 完成后,直接用ldap账号密码就可以登陆seafile了。

小结:

seafile还是很强的,可以给文件加密来分享给别人。即使管理员也看不了!

可以分组,只给组内人分享。

相关链接:

seafile手册

seafile手册2

anyShare分享到:

声明:原创文章请勿转载,如需转载请注明出处!