导入开源的文件云存储平台-Seafile

1 理论基础

1.1 简介

Seafile 是一个开源的文件云存储平台,更注重于隐私保护和对团队文件协作的支持。
Seafile 通过“资料库”来分类管理文件,每个资料库可单独同步,用户可加密资料库, 且密码不会保存在服务器端,所以即使是服务器管理员也无权访问你的文件。
Seafile 允许用户创建“群组”,在群组内同步文件、创建维基、发起讨论等,方便团队内协同工作

1.2 软件许可协议

Seafile 及其桌面、移动客户端遵循 GPLv3。
Seahub(Seafile 服务器的 web 端)遵循 Apache License。

1.3 部署的要求

要求安装以下组件:

python 2.7 (从 Seafile 5.1 开始,python 版本最低要求为2.7)
python-setuptools
python-imaging
python-mysqldb
python-ldap
python-urllib3
python-memcache (或者 python-memcached)

1.4 Seafile的系统架构

wKioL1dngcKD_2fHAACWhEFXCi8437.png

如上图所示,Seafile 包含以下系统组件:

Seahub - 网站界面,供用户管理自己在服务器上的数据和账户信息。Seafile服务器通过"gunicorn"(一个轻量级的Python HTTP服务器)来提供网站支持。Seahub作为gunicorn的一个应用程序来运行。

Seafile server (seaf-server) - 数据服务进程, 处理原始文件的上传/下载/同步。

Ccnet server (ccnet-server) - 内部 RPC 服务进程,连接多个组件。

Controller - 监控 ccnet 和 seafile 进程,必要时会重启进程。

注:

所有 Seafile 服务都可以配置在 Nginx/Apache 后面,由 Nginx/Apache 提供标准的 http(s) 访问。

当用户通过 seahub 访问数据时,seahub 通过 ccnet 提供的内部 RPC 来从 seafile server 获取数据。

2 实践部分

2.1 环境信息

2.1.1 主机信息

hostname=seafile.cmdschool.org

ip address=10.168.0.53

2.1.2 域名解析

配置dns解析或配置host解析,host解析配置如下(客户端和服务端):

1
vim  /etc/hosts

加入如下内容:

1
10.168.0.53   seafile.cmdschool.org

2.1.3 关闭selinux

1
2
setenforce 0
sed  -i  's/SELINUX=enforcing/SELINUX=disabled/g'  /etc/selinux/config

2.2 yum源和安装包

2.2.1 更新系统

1
yum update

2.2.2 数据库的安装

1
yum  install  -y mariadb-server mariadb-devel mariadb

2.2.3 安装脚本运行环境

1
yum  install  -y python-setuptools python-imaging python-ldap MySQL-python python-memcached python-urllib3

2.2.4 安装nginx

1
2
yum  install  -y http: //nginx .org /packages/centos/7/noarch/RPMS/nginx-release-centos-7-0 .el7.ngx.noarch.rpm
yum  install  -y nginx

2.2.5 其他配置工具

1
yum  install  -y net-tools vim wget tree

2.4.6 下载安装包

1
2
cd  ~
wget https: //bintray .com /artifact/download/seafile-org/seafile/seafile-server_5 .1.3_x86-64. tar .gz

2.3 配置数据库

2.3.1 启动数据库并配置数据库开机默认启动

1
2
systemctl start mariadb
systemctl  enable  mariadb

2.3.2 初始化数据库

1
mysql_secure_installation

向导如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[...]
Set root password? [Y /n ] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
  ... Success!
[...]
Remove anonymous  users ? [Y /n ] y
  ... Success!
[...]
Disallow root login remotely? [Y /n ] n
  ... skipping.
[...]
Remove  test  database and access to it? [Y /n ] y
  - Dropping  test  database...
  ... Success!
  - Removing privileges on  test  database...
  ... Success!
[...]
Reload privilege tables now? [Y /n ] y
  ... Success!
[...]

2.4 安装主程序

2.4.1建立目录结构

1
2
mkdir  /home/cmdschool .org
cp  seafile-server_5.1.3_x86-64. tar .gz  /home/cmdschool .org

2.4.2 解压并备份安装包

1
2
3
4
cd  /home/cmdschool .org
tar  -xf seafile-server_5.1.3_x86-64. tar .gz
mkdir  installed
mv  seafile-server_5.1.3_x86-64. tar .gz installed/

检查目录

1
2
cd  /home/cmdschool .org
tree -L 2

显示如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.
├── installed
│   └── seafile-server_5.1.3_x86-64. tar .gz
└── seafile-server-5.1.3
    ├── check_init_admin.py
    ├── reset-admin.sh
    ├── runtime
    ├── seaf- fsck .sh
    ├── seaf-fuse.sh
    ├── seaf-gc.sh
    ├── seafile
    ├── seafile.sh
    ├── seahub
    ├── seahub.sh
    ├── setup-seafile-mysql.py
    ├── setup-seafile-mysql.sh
    ├── setup-seafile.sh
    └── upgrade
  
6 directories, 11 files

2.4.3 运行安装向导

1
2
cd  seafile-server-5.1.3
. /setup-seafile-mysql .sh

显示如下:

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
Checking python on this machine ...
  Checking python module: setuptools ... Done.
  Checking python module: python-imaging ... Done.
  Checking python module: python-mysqldb ... Done.
  
-----------------------------------------------------------------
This script will guide you to setup your seafile server using MySQL.
Make sure you have  read  seafile server manual at
  
        https: //github .com /haiwen/seafile/wiki
  
Press ENTER to  continue
-----------------------------------------------------------------
  
  
What is the name of the server? It will be displayed on the client.
3 - 15 letters or digits
[ server name ] seafile
  
What is the ip or domain of the server?
For example: www.mycompany.com, 192.168.1.101
[ This server's ip or domain ] seafile.cmdschool.org
  
Where  do  you want to put your seafile data?
Please use a volume with enough  free  space
[ default  "/home/cmdschool.org/seafile-data" 
  
Which port  do  you want to use  for  the seafile fileserver?
[ default  "8082" 
  
-------------------------------------------------------
Please choose a way to initialize seafile databases:
-------------------------------------------------------
  
[1] Create new ccnet /seafile/seahub  databases
[2] Use existing ccnet /seafile/seahub  databases
  
[ 1 or 2 ] 1
  
What is the host of mysql server?
[ default  "localhost" 
  
What is the port of mysql server?
[ default  "3306" 
  
What is the password of the mysql root user?
[ root password ] 
  
verifying password of user root ...  done
  
Enter the name  for  mysql user of seafile. It would be created  if  not exists.
[ default  "root"  ] seafile
  
Enter the password  for  mysql user  "seafile" :
[ password  for  seafile ] 
  
verifying password of user seafile ...  done
  
Enter the database name  for  ccnet-server:
[ default  "ccnet-db" 
  
Enter the database name  for  seafile-server:
[ default  "seafile-db" 
  
Enter the database name  for  seahub:
[ default  "seahub-db" 
  
---------------------------------
This is your configuration
---------------------------------
  
    server name:            seafile
    server ip /domain :       seafile.cmdschool.org
  
    seafile data  dir :        /home/cmdschool .org /seafile-data
    fileserver port:        8082
  
    database:               create new
    ccnet database:         ccnet-db
    seafile database:       seafile-db
    seahub database:        seahub-db
    database user:          seafile
  
  
  
---------------------------------
Press ENTER to  continue , or Ctrl-C to abort
---------------------------------
  
Generating ccnet configuration ...
  
done
Successly create configuration  dir  /home/cmdschool .org /ccnet .
Generating seafile configuration ...
  
Done.
done
Generating seahub configuration ...
  
----------------------------------------
Now creating seahub database tables ...
  
----------------------------------------
  
creating seafile-server-latest symbolic link ...  done
  
  
  
  
-----------------------------------------------------------------
Your seafile server configuration has been finished successfully.
-----------------------------------------------------------------
  
run seafile server:     . /seafile .sh { start | stop | restart }
run seahub  server:     . /seahub .sh  { start <port> | stop | restart <port> }
  
-----------------------------------------------------------------
If you are behind a firewall, remember to allow input /output  of these tcp ports:
-----------------------------------------------------------------
  
port of seafile fileserver:   8082
port of seahub:               8000
  
When problems occur, Refer to
  
        https: //github .com /haiwen/seafile/wiki
  
for  information.

2.4.4 确认安装

1
2
cd  /home/cmdschool .org
tree -L 2

显示如下:

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
.
├── ccnet
│   ├── mykey.peer
│   └── seafile.ini
├── conf
│   ├── ccnet.conf
│   ├── seafdav.conf
│   ├── seafile.conf
│   └── seahub_settings.py
├── installed
│   └── seafile-server_5.1.3_x86-64. tar .gz
├── seafile-data
│   └── library-template
├── seafile-server-5.1.3
│   ├── check_init_admin.py
│   ├── reset-admin.sh
│   ├── runtime
│   ├── seaf- fsck .sh
│   ├── seaf-fuse.sh
│   ├── seaf-gc.sh
│   ├── seafile
│   ├── seafile.sh
│   ├── seahub
│   ├── seahub.sh
│   ├── setup-seafile-mysql.py
│   ├── setup-seafile-mysql.sh
│   ├── setup-seafile.sh
│   └── upgrade
├── seafile-server-latest -> seafile-server-5.1.3
└── seahub-data
    └── avatars
  
13 directories, 17 files

2.4.5 启动Seafile

1
/home/cmdschool .org /seafile-server-5 .1.3 /seafile .sh start

显示如下:

1
2
3
4
5
[06 /19/16  13:23:55] .. /common/session .c(132): using config  file  /home/cmdschool .org /conf/ccnet .conf
Starting seafile server, please wait ...
Seafile server started
  
Done.

2.4.6 启动Seahub

1
/home/cmdschool .org /seafile-server-5 .1.3 /seahub .sh start

向导如下:

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
LC_ALL is not  set  in  ENV,  set  to en_US.UTF-8
Starting seahub at port 8000 ...
  
----------------------------------------
It 's the first time you start the seafile server. Now let' s create the admin account
----------------------------------------
  
What is the email  for  the admin account?
[ admin email ] [email protected]
  
What is the password  for  the admin account?
[ admin password ] 
  
Enter the password again:
[ admin password again ] 
  
  
  
----------------------------------------
Successfully created seafile admin
----------------------------------------
  
  
  
  
Seahub is started
  
Done.

2.4.7 配置防护墙

1
2
3
4
firewall-cmd --permanent --add-port=8000 /tcp
firewall-cmd --permanent --add-port=8082 /tcp
firewall-cmd --reload
firewall-cmd --list-all

2.4.8 浏览器测试

1
http: //seafile .cmdschool.org:8000

2.5 配置nginx的http代理

注:以下配置基于2.4章节

2.5.1 配置虚拟服务

1
vim  /etc/nginx/conf .d /seafile .com

输入如下内容:

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
erver {
    listen 80;
    server_name seafile.cmdschool.org;
  
    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   REMOTE_ADDR         $remote_addr;
  
        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/cmdschool .org /seafile-server-latest/seahub ;
    }
}

2.5.2 修改SERVICE_URL和FILE_SERVER_ROOT

界面中单击“系统管理”->“设置”修改如下参数为:

1
2
SERVICE_URL: http: //seafile .cmdschool.org
FILE_SERVER_ROOT: http: //seafile .cmdschool.org /seafhttp

2.5.3 配置启动脚本

1
vim  /home/cmdschool .org /seafile-server-5 .1.3 /seafiled .sh

修改启动参数如下:

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
#!/bin/sh
  
# 请将 user 改为你的Linux用户名
user=seafile
  
# 请将 script_dir 改为你的 Seafile 文件安装路径
seafile_dir= /home/cmdschool .org
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
  
# 若使用 Nginx/Apache, 请将其设置为true, 否者为 false
fastcgi= true
# fastcgi 端口, 默认为 8000.
fastcgi_port=8000
  
case  "$1"  in
        start)
                sudo  -u ${user} ${script_path} /seafile .sh start >> ${seafile_init_log}
                if  [  $fastcgi =  true  ];
                then
                        sudo  -u ${user} ${script_path} /seahub .sh start-fastcgi ${fastcgi_port} >> ${seahub_init_log}
                else
                        sudo  -u ${user} ${script_path} /seahub .sh start >> ${seahub_init_log}
                fi
        ;;
        restart)
                sudo  -u ${user} ${script_path} /seafile .sh restart >> ${seafile_init_log}
                if  [  $fastcgi =  true  ];
                then
                        sudo  -u ${user} ${script_path} /seahub .sh restart-fastcgi ${fastcgi_port} >> ${seahub_init_log}
                else
                        sudo  -u ${user} ${script_path} /seahub .sh restart >> ${seahub_init_log}
                fi
        ;;
        stop)
                sudo  -u ${user} ${script_path} /seafile .sh $1 >> ${seafile_init_log}
                sudo  -u ${user} ${script_path} /seahub .sh $1 >> ${seahub_init_log}
        ;;
        *)
                echo  "Usage: /etc/init.d/seafile-server {start|stop|restart}"
                exit  1
        ;;
esac

2.5.4 添加执行用户和配置目录权限

1
2
3
useradd  seafile -s  /sbin/nologin  -d  /home/cmdschool .org/
chown  -R seafile:seafile  /home/cmdschool .org/
chown  -R seafile:seafile  /tmp/seahub_cache/

 

2.5.5 配置启动服务

1
vim  /lib/systemd/system/seafile .service

输入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=seafile
After=mariadb.service
  
[Service]
Type=forking
ExecStart= /home/cmdschool .org /seafile-server-5 .1.3 /seafiled .sh start
ExecReload= /home/cmdschool .org /seafile-server-5 .1.3 /seafiled .sh restart
ExecStop= /home/cmdschool .org /seafile-server-5 .1.3 /seafiled .sh stop
PrivateTmp= true
  
[Install]
WantedBy=multi-user.target

2.5.6 修改sudo

1
visudo

注释掉如下行:

1
Defaults    requiretty

注:不修改可能使用systemctl命令启动服务时会出错

2.5.7 停止管理员身份运行的主程序

1
2
/home/cmdschool .org /seafile-server-5 .1.3 /seafile .sh stop
/home/cmdschool .org /seafile-server-5 .1.3 /seahub .sh stop

2.5.8 测试服务并配置开机启动

1
2
3
4
5
systemctl start seafile.service
systemctl restart seafile.service
systemctl stop seafile.service
systemctl start seafile.service
systemctl  enable  seafile.service

2.5.9 启动服务并配置开机启动

1
2
systemctl restart nginx
systemctl  enable  nginx

2.5.10 配置防火墙

1
2
3
4
5
firewall-cmd --permanent --remove-port=8000 /tcp
firewall-cmd --permanent --remove-port=8082 /tcp
firewall-cmd --permanent --add-service http
firewall-cmd --reload
firewall-cmd --list-all

2.5.11 浏览器测试

1
http: //seafile .cmdschool.org

2.6 配置nginx的https代理

注:以下配置基于2.5章节

2.6.1 生成私钥

1
openssl genrsa -out privkey.pem 2048

生成如下私钥:

1
privkey.pem

2.6.2 生成公钥

1
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095

向导如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter  '.' , the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:GD
Locality Name (eg, city) [Default City]:DG
Organization Name (eg, company) [Default Company Ltd]:cmdschool.org
Organizational Unit Name (eg, section) []:it
Common Name (eg, your name or your server's  hostname ) []:seafile.cmdschool.org
Email Address []:[email protected]

2.6.3 复制公钥和私钥到指定路径

1
cp  cacert.pem privkey.pem  /etc/ssl/

2.6.4 修改配置文件

1
vim  /etc/nginx/conf .d /seafile .conf

修改配置文件如下:

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  seafile.cmdschool.org;
      rewrite ^ https: // $http_host$request_uri? permanent;    #强制将http重定向到https
    }
    server {
      listen 443;
      ssl on;
      ssl_certificate  /etc/ssl/cacert .pem;            #cacert.pem 文件路径
      ssl_certificate_key  /etc/ssl/privkey .pem;    #privkey.pem 文件路径
      server_name seafile.cmdschool.org;
      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/cmdschool .org /seafile-server-latest/seahub ;
      }
    }

2.6.5 修改SERVICE_URL和FILE_SERVER_ROOT

界面中单击“系统管理”->“设置”修改如下参数为:

1
2
SERVICE_URL: https: //seafile .cmdschool.org
FILE_SERVER_ROOT: https: //seafile .cmdschool.org /seafhttp

2.6.7 重新启动服务

1
systemctl restart seafile.service

2.6.8 配置防火墙

1
2
3
4
firewall-cmd --permanent --remove-service http
firewall-cmd --permanent --add-service https
firewall-cmd --reload
firewall-cmd --list-all

2.6.9 浏览器测试

https://seafile.cmdschool.org
wKiom1doAj6hu4bbAAB0JifoD7M425.png

注:登录帐号和密码(详见2.4.6章节的配置向导生成)

参阅资料:
官方首页
https://www.seafile.com/en/home/

下载地址

https://www.seafile.com/en/download/
安装文档
http://manual-cn.seafile.com

http://manual.seafile.com/

非官方文档

猜你喜欢

转载自www.linuxidc.com/Linux/2016-06/132622.htm