seafile搭建个人及企业级网盘

seafile简介

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

seafile个人网盘搭建

下载服务器

seafile官网下载地址
选择下载最新版,这里我用的是最新Linux版的5.1.1 64bit.

解压

将下载下来的压缩包解压到/home/seafile下即可.

1
tar -zxvf seafile-server-5.1.1 -C /home/seafile

系统环境准备

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

  1. 编译安装python2.7
    1
    2
    3
    4
    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下载。
  3. 安装实例:
    1
    2
    3
    tar zxvf Imaging-1.1.7.tar.gz
    cd Imaging-1.1.7
    python2.7 setup.py install #注意是python2.7!否则安装也是按系统python2.6编译的,会导致seafile安装不了

安装seafile服务器

1
2
cd /home/seafile/seafile-server-5.1.1
./setup-seafile-mysql.sh

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

修改防火墙

1
2
3
$ 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

启动、停止seafile服务器

1
2
./seafile.sh start
./seafile.sh stop

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

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

seafile企业网盘搭建

Nginx结合HTTPS下配置seahub保证传输的加密性

  1. 在/home/seafile下生成证书(自用证书,也可以第三方买)
    1
    2
    openssl genrsa -out privkey.pem 2048
    openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
  2. nginx配置文件示例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    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
    1
    2
    ../../sbin/nginx -t
    ../../sbin/nginx -s reload
  4. 修改 SERVICE_URL
    1
    2
    $ vim seafile/conf/ccnet
    SERVICE_URL = http://your domain name
  5. 修改 FILE_SERVER_ROOT
    1
    2
    $ vim seafile/conf/seahub_setting.py
    FILE_SERVER_ROOT = 'https://seafile.in66.cc/seafhttp'
  6. 修改防火墙 增加开放443端口
    1
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

使用memcached提高性能

  1. yum安装memcache
  2. 启动memcached
  3. 编辑sehub_settings.py添加相关配置
    1
    2
    3
    4
    5
    6
    CACHES = {
    'default': {
    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    'LOCATION': '127.0.0.1:11211',
    }
    }

实现开启自启动

  1. 创建/etc/sysconfig/seafile
    1
    2
    3
    4
    5
    6
    7
    8
    $ 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文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    #!/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文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #seafilesebin/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. 接下来启动程序
    1
    2
    3
    4
    5
    6
    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. 执行
    1
    2
    service seafile start
    service seahub start

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

结合LDAP认证

  1. ldap的认证配置自行google下
  2. 结合ldap
    这里我使用Email方式。因为ldap配置时公司几乎都会给个Email账号这样方便在seafile中区分唯一id。
  3. 配置说明:
    1
    2
    3
    4
    5
    6
    [LDAP]
    HOST = ldap://192.168.1.123/ #ldap地址
    BASE = cn=users,accounts,dc=example,dc=com #根据你自己的ldap结构来配置
    USER_DN = administrator@example.local
    PASSWORD = secret
    LOGIN_ATTR = mail
  4. 下面是我的ldap配置:
    1
    2
    3
    4
    [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,死活没用。踩坑成功。。
完成后,直接用ldap账号密码就可以登陆seafile了。

小结:

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

相关链接:
seafile手册
seafile手册2

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: