Pages

Saturday, 13 May 2017

搭建一个可以在多平台同步的私有云盘 —— Seafile

Seafile 简介

Seafile 是一个开源的文件云存储平台,解决文件集中存储、同步、多平台访问的问题,注重安全和性能。
Seafile 通过“资料库”来分类管理文件,每个资料库可单独同步,用户可加密资料库, 且密码不会保存在服务器端,所以即使是服务器管理员也无权访问你的文件。
Seafile 允许用户创建“群组”,在群组内共享和同步文件,方便了团队协同工作。
Seafile 官方网站:https://www.seafile.com/
Github 开源项目地址:https://github.com/haiwen/seafile
各平台同步客户端下载:https://www.seafile.com/download/

搭建环境

本人测试和教程所用环境为 Debian 7 x64 (我写教程除非不支持这个系统否则我都会用这个系统做教程测试的)
一个刚重装,纯净的 VPS。

本教程示例域名为: demo.toyoo.ml
本教程安装目录为: /root/seafile/...
域名和安装目录,请自行替换为自己的配置。

部署Seafile

为了避免安装依赖时,因为源的问题缺少安装组件,所以请使用最新的Debian 稳定源(jessie)!

Seafile依赖于Python,所以你的VPS中的 Python版本要高于 2.7 。
  1. apt-get update
  2. apt-get install mariadb-server -y
  3. apt-get install python2.7 python-setuptools python-imaging python-ldap python-mysqldb python-memcache python-urllib3 vim -y
第二行代码是安装MariaDB的,安装期间,会提示你输入要设置的 数据库ROOT账号的密码 注意,输入的时候是看不到输入内容的,盲输!
提示可能是这样的:
  1. While not mandatory, it is highly recommended that you set a password for the MariaDB administrative "root" user.
  2. If this field is left blank, the password will not be changed.
  3. New password for the MariaDB "root" user:
  4. Repeat password for the MariaDB "root" user:
第三行就是让你输入 ROOT的密码,第四行是让你重复输入一遍刚才设置的 ROOT密码。

下载解压

假设你当前是在 /root 文件夹内执行以下命令,后面的所有seafile目录都是在 /root 文件夹内的。
  1. mkdir seafile && cd seafile
创建一个 seafile 文件夹并进入文件夹,以后你的 seafile相关文件都在 /root/seafile 文件夹中了。
  1. uname -m
  2. #查看自己的VPS 系统位数,如果返回 X86_X64 那么就使用第一行代码,如果是 i386 那就使用第二行代码。
  3. wget "http://seafile-downloads.oss-cn-shanghai.aliyuncs.com/seafile-server_6.0.7_x86-64.tar.gz"
  4. wget "http://seafile-downloads.oss-cn-shanghai.aliyuncs.com/seafile-server_6.0.7_i386.tar.gz"
此处的下载链接版本可能不是最新的,最新版本请查看这里
  1. tar -xzf seafile-server_*.tar.gz
  2. mkdir installed && mv seafile-server_*.tar.gz installed
  3. # 解压下载的压缩包文件,并把压缩包文件移到新建的 installed 文件夹。

开始安装

  1. cd seafile-server-* && chmod +x *.sh
  2. ./setup-seafile-mysql.sh
  3. # 运行安装脚本并回答问题
根据下面的中文注释填写。

  1. root@DOUBI:~/seafile/seafile-server-6.0.7# ./setup-seafile-mysql.sh
  2. Checking python on this machine ...
  3. Checking python module: setuptools ... Done.
  4. Checking python module: python-imaging ... Done.
  5. Checking python module: python-mysqldb ... Done.
  6.  
  7. -----------------------------------------------------------------
  8. This script will guide you to setup your seafile server using MySQL.
  9. Make sure you have read seafile server manual at
  10.  
  11. https://github.com/haiwen/seafile/wiki
  12.  
  13. Press ENTER to continue
  14. # 一开始会检查依赖是否安装完整,如果不完整会提示你缺少什么,如果完整就会让你 按回车键 继续。
  15.  
  16. -----------------------------------------------------------------
  17. What is the name of the server? It will be displayed on the client.
  18. 3 - 15 letters or digits
  19. [ server name ] DOUBI
  20. # 输入你的服务名字,不过没什么卵用,据说已经废弃了这个选项。
  21.  
  22. What is the ip or domain of the server?
  23. For example: www.mycompany.com, 192.168.1.101
  24. [ This server ip or domain ] demo.toyoo.ml
  25. # 输入你的域名或者IP,如果你有域名,那么就输入域名,IP请输入VPS的公网IP
  26.  
  27. Where do you want to put your seafile data?
  28. Please use a volume with enough free space
  29. [ default "/root/seafile/seafile-data" ]
  30. # 输入你要设置的数据储存文件夹,默认回车即可
  31.  
  32. Which port do you want to use for the seafile fileserver?
  33. [ default "8082" ]
  34. # 输入你的 文件同步端口,这个直接回车,不要改!
  35.  
  36. -------------------------------------------------------
  37. Please choose a way to initialize seafile databases:
  38. -------------------------------------------------------
  39.  
  40. [1] Create new ccnet/seafile/seahub databases
  41. [2] Use existing ccnet/seafile/seahub databases
  42.  
  43. [ 1 or 2 ] 1
  44. # 选项1指的是,Seafile自动给你创建数据库。
  45. # 选项2指的是,你自己已经创建好了数据库。
  46. # 这里选择 1 ,回车后就会提示你输入要创建的数据库信息了。
  47.  
  48. What is the host of mysql server?
  49. [ default "localhost" ]
  50. # 问你Mysql服务器的位置在哪里,默认本地,直接回车
  51.  
  52. What is the port of mysql server?
  53. [ default "3306" ]
  54. # 问你Mysql的端口是什么,默认3306,直接回车
  55.  
  56. What is the password of the mysql root user?
  57. [ root password ]
  58. # 让你输入你前面安装依赖的时候设置的数据库ROOT密码(注意这里输入密码不会显示出来,盲输,或者直接粘贴)
  59.  
  60. verifying password of user root ... done
  61. # 如果密码正确就会提示这个
  62. Enter the name for mysql user of seafile. It would be created if not exists.
  63. [ default "seafile" ]
  64. # 问你要创建的数据库名,下面几个全部直接回车!
  65.  
  66. Enter the password for mysql user "seafile":
  67. [ password for seafile ]
  68. # 回车
  69.  
  70. Enter the database name for ccnet-server:
  71. [ default "ccnet-db" ]
  72. # 回车
  73.  
  74. Enter the database name for seafile-server:
  75. [ default "seafile-db" ]
  76. # 回车
  77.  
  78. Enter the database name for seahub:
  79. [ default "seahub-db" ]
  80.  
  81. ---------------------------------
  82. This is your configuration
  83. ---------------------------------
  84.  
  85. server name: DOUBI
  86. server ip/domain: demo.toyoo.ml
  87.  
  88. seafile data dir: /root/seafile/seafile-data
  89. fileserver port: 8082
  90.  
  91. database: create new
  92. ccnet database: ccnet-db
  93. seafile database: seafile-db
  94. seahub database: seahub-db
  95. database user: seafile
  96.  
  97. ---------------------------------
  98. Press ENTER to continue, or Ctrl-C to abort
  99. ---------------------------------
  100. # 这里会提醒你查看一下信息是否输入错误,如果无误,按回车键 继续。
  101.  
  102. Generating ccnet configuration ...
  103.  
  104. done
  105. Successly create configuration dir /root/seafile/ccnet.
  106. Generating seafile configuration ...
  107.  
  108. Done.
  109. done
  110. Generating seahub configuration ...
  111.  
  112. ----------------------------------------
  113. Now creating seahub database tables ...
  114. ----------------------------------------
  115.  
  116. creating seafile-server-latest symbolic link ... done
  117.  
  118. -----------------------------------------------------------------
  119. Your seafile server configuration has been finished successfully.
  120. -----------------------------------------------------------------
  121.  
  122. run seafile server: ./seafile.sh { start | stop | restart }
  123. run seahub server: ./seahub.sh { start | stop | restart }
  124.  
  125. -----------------------------------------------------------------
  126. If you are behind a firewall, remember to allow input/output of these tcp ports:
  127. -----------------------------------------------------------------
  128.  
  129. port of seafile fileserver: 8082
  130. port of seahub: 8000
  131.  
  132. When problems occur, Refer to
  133.  
  134. https://github.com/haiwen/seafile/wiki
  135.  
  136. for information.
  137. # 到这里就安装完成了。
这时候,基本的Seafile服务以及安装完毕,下面只要启动就可以直接使用了。

启动运行

/root/seafile/seafile-server-*.*.* 目录下,运行如下命令:
  1. ./seafile.sh start
  2. # 启动 Seafile 服务
  3. ./seahub.sh start
  4. # 启动 Seahub 网站 (默认运行在8000端口上,可以加上端口参数比如:./seahub.sh start 8888
注意:第一次启动 Seahub 时, seahub.sh 脚本会提示你创建一个 seafile 管理员帐号。

服务启动后无报错,打开浏览器并输入你当时设置的 域名或者公网IP,比如:
  1. http://demo.toyoo.ml:8000/
  2. http://1.1.1.1:8000/
然后你就会看到登录页面了,输入账号密码后登录即可。
这时候,你就成功的完成了Seafile服务最基本的搭建和使用,目前已经可以正常使用和运行了。

更改端口

如果你觉得域名或者IP后面还需要输入 8000 端口很麻烦,那么你可以更改端口,比如你要设置为 80 端口。
通过上面你设置的 IP或者域名 进入Seafile网站后,点击右上角的用户头像 — 系统设置 — 设置 — URL
然后如下图所示,把第一个红框圈中的 http://demo.toyoo.ml:8000 改为 http://demo.toyoo.ml (80可以不用写,443也是,其他端口就需要写端口号了)
然后右边会出来一个 √ 和 × ,点击 对号√ 保存。
注意:下图中我是完整了设置了Ngxin和SSL,如果没有设置Nginx,
那么 FILE_SERVER_ROOT 默认即可.
 

使用说明:

启动服务
  1. ./seafile.sh start
  2. # 启动 Seafile 服务
  3. ./seahub.sh start 8001
  4. # 启动 Seahub 网站 (运行在 8001 端口上,默认不写参数为 8000)
如果你配置Nginx/Apache后,那么就用下面的代码启动:
  1. ./seafile.sh start
  2. ./seahub.sh start-fastcgi
停止服务
  1. ./seahub.sh stop
  2. # 停止 Seahub
  3. ./seafile.sh stop
  4. # 停止 Seafile 进程
重启服务
  1. ./seafile.sh restart
  2. # 停止当前的 Seafile 进程,然后重启 Seafile
  3. ./seahub.sh restart
  4. # 停止当前的 Seahub 进程,并在 8000 端口重新启动 Seahub

配置Nginx(可选)

默认自带的HTTP服务器,有一些限制,不够灵活,比如不能直接SSL,所以我们可以在前面加上Nginx。
安装Nginx:
  1. apt-get install nginx -y
安装后默认自动启动,然后查看端口使用情况,看一看 80 端口是否被Nginx占用,如果是其他程序占用,请先关闭。
  1. netstat -lntp
确定 Nginx 安装运行正常后,我们新建一个虚拟主机配置文件:
  1. vi /etc/nginx/sites-available/seafile.conf
然后按 I键 进入编辑模式,并粘贴一下内容(自己修改 第三行的域名 和 倒数第三行的Seafile目录)
配置文件示例:

  1. server {
  2. listen 80;
  3. server_name demo.toyoo.ml;
  4.  
  5. proxy_set_header X-Forwarded-For $remote_addr;
  6.  
  7. location / {
  8. fastcgi_pass 127.0.0.1:8000;
  9. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  10. fastcgi_param PATH_INFO $fastcgi_script_name;
  11.  
  12. fastcgi_param SERVER_PROTOCOL $server_protocol;
  13. fastcgi_param QUERY_STRING $query_string;
  14. fastcgi_param REQUEST_METHOD $request_method;
  15. fastcgi_param CONTENT_TYPE $content_type;
  16. fastcgi_param CONTENT_LENGTH $content_length;
  17. fastcgi_param SERVER_ADDR $server_addr;
  18. fastcgi_param SERVER_PORT $server_port;
  19. fastcgi_param SERVER_NAME $server_name;
  20. fastcgi_param REMOTE_ADDR $remote_addr;
  21.  
  22. access_log /var/log/nginx/seahub.access.log;
  23. error_log /var/log/nginx/seahub.error.log;
  24. }
  25.  
  26. location /seafhttp {
  27. rewrite ^/seafhttp(.*)$ $1 break;
  28. proxy_pass http://127.0.0.1:8082;
  29. client_max_body_size 0;
  30. proxy_connect_timeout 36000s;
  31. proxy_read_timeout 36000s;
  32. }
  33.  
  34. location /media {
  35. root /root/seafile/seafile-server-latest/seahub;
  36. }
  37. }
注意:中间的两行 access_log 和 error_log 是日志记录,如果不需要的话,可以关闭访问日志,只保留错误日志,否则时间长了,日志大小感人。
  1. access_log /var/log/nginx/seahub.access.log;
  2. error_log /var/log/nginx/seahub.error.log;
  3. # 正常开启 访问和错误 日志记录
  4. access_log off;
  5. error_log /var/log/nginx/seahub.error.log;
  6. # 关闭访问日志记录,开启错误日志记录
  7. access_log off;
  8. error_log off;
  9. # 关闭 访问和错误 日志记录
修改并设置完后,按 ESC键 退出编辑模式,然后输入 :wq 保存并退出VI。
然后我们删除默认的Nginx 虚拟主机配置文件,并创建刚才我们新建的配置文件软连接。
  1. rm -rf /etc/nginx/sites-enabled/default
  2. ln -s /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/seafile.conf
然后我们设置一下我们的网页文件权限,否则Nginx会报错 403。
  1. chown root:root -R /root/seafile/seafile-server-latest/seahub/media
然后我们打开 nginx.conf 文件,
  1. vi /etc/nginx/nginx.conf
I键 进入编辑模式,修改 user www-date; (可能会不一样,如果没有就自己添加到第一行)为 user root; (注意最后的 分号 ; 结尾),然后按 ESC键 退出编辑模式,然后输入 :wq 保存并退出VI。
然后我们,打开 Seafile网站,在右上角的用户头像 — 系统设置 — 设置 — URL中分别设置 SERVICE_URL 和 FILE_SERVER_ROOT 为:
  1. SERVICE_URLhttp://demo.toyoo.ml
  2.  
  3. FILE_SERVER_ROOThttp://demo.toyoo.ml/seafhttp
并点右边的 对号 √ 保存。
重启Nginx:
  1. service nginx restart
重启seafile:
  1. ./seahub.sh stop
  2. ./seafile.sh stop
  3.  
  4. # 设置Nginx/Apache以后就用下面代码启动。
  5.  
  6. ./seafile.sh start
  7. ./seahub.sh start-fastcgi
这时候你再打开你的 Seafile网站 看一看是否正常。
Nginx使用说明:
  1. service nginx start
  2. # 启动Nginx
  3. service nginx stop
  4. # 停止Nginx
  5. service nginx restart
  6. # 重启Nginx
  7. nginx -s reload
  8. # 重载Nginx配置

配置SSL(可选)

如果你想要保证数据安全,那么你可以配置SSL,这个需要根据上面的教程配置过Nginx。
首先你要有SSL证书,可用letscrypt的免费SSL证书。
然后把你的 SSL证书(.crt)和SSL密匙(.key) 文件假设放到 /root 文件夹下面。
然后根据情况,自己修改 第5、6行 SSL证书/密匙 位置,第10行 域名,倒数第3行 seafile目录,第 14-16 行是访问HTTP重定向到HTTPS。
配置文件示例:

查看HTTPS配置示例
  1. server {
  2. listen 80;
  3. listen 443 ssl;
  4. ssl on;
  5. ssl_certificate /root/toyoo.ml.crt;
  6. ssl_certificate_key /root/toyoo.ml.key;
  7. ssl_session_cache shared:SSL:10m;
  8. ssl_session_timeout 10m;
  9. add_header Strict-Transport-Security "max-age=31536000";
  10. server_name demo.toyoo.ml;
  11.  
  12. proxy_set_header X-Forwarded-For $remote_addr;
  13.  
  14. if ( $scheme = http ){
  15. return 301 https://$server_name$request_uri;
  16. }
  17. location / {
  18. fastcgi_pass 127.0.0.1:8000;
  19. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  20. fastcgi_param PATH_INFO $fastcgi_script_name;
  21.  
  22. fastcgi_param SERVER_PROTOCOL $server_protocol;
  23. fastcgi_param QUERY_STRING $query_string;
  24. fastcgi_param REQUEST_METHOD $request_method;
  25. fastcgi_param CONTENT_TYPE $content_type;
  26. fastcgi_param CONTENT_LENGTH $content_length;
  27. fastcgi_param SERVER_ADDR $server_addr;
  28. fastcgi_param SERVER_PORT $server_port;
  29. fastcgi_param SERVER_NAME $server_name;
  30. fastcgi_param REMOTE_ADDR $remote_addr;
  31. fastcgi_param HTTPS on;
  32. fastcgi_param HTTP_SCHEME https;
  33.  
  34. access_log /var/log/nginx/seahub.access.log;
  35. error_log /var/log/nginx/seahub.error.log;
  36. }
  37.  
  38. location /seafhttp {
  39. rewrite ^/seafhttp(.*)$ $1 break;
  40. proxy_pass http://127.0.0.1:8082;
  41. client_max_body_size 0;
  42. proxy_connect_timeout 36000s;
  43. proxy_read_timeout 36000s;
  44. }
  45.  
  46. location /media {
  47. root /root/seafile/seafile-server-latest/seahub;
  48. }
  49. }
然后打开 虚拟主机配置文件:
  1. vi /etc/nginx/sites-available/seafile.conf
把里面的内容全部删除,并把修改后的配置文件内容粘贴进去。
然后我们,打开 Seafile网站,在右上角的用户头像 — 系统设置 — 设置 — URL中分别设置 SERVICE_URL 和 FILE_SERVER_ROOT 为:
  1. SERVICE_URLhttps://demo.toyoo.ml
  2. FILE_SERVER_ROOThttps://demo.toyoo.ml/seafhttp
并点右边的 对号 √ 保存。
重载Nginx配置:
  1. nginx -s reload
如果没有报错,那么就继续重启seafile:
  1. ./seahub.sh stop
  2. ./seafile.sh stop
  3.  
  4. # 设置Nginx/Apache以后就用下面代码启动。
  5.  
  6. ./seafile.sh start
  7. ./seahub.sh start-fastcgi
然后你尝试使用 HTTPS 访问网站试试。

简单的搭建教程就到这里了,有什么需要补充的请在下面评论留言。
参考资料,seafile官方服务器手册:
https://manual-cn.seafile.com/deploy/using_mysql.html
https://manual-cn.seafile.com/deploy/deploy_with_nginx.html
https://manual-cn.seafile.com/deploy/https_with_nginx.html
-------------------

搭建自己的云盘服务器seafile
更新你的 CentOS 系统.
为了系统更加稳定,将系统更新更新 更新完后将系统进行重启,下面命令已加入重启命令
sudo yum install epel-release
sudo yum update -y && sudo reboot
安装依赖环境
sudo yum install python python-setuptools python-imaging python-ldap python-memcached MySQL-python mariadb mariadb-server
接下来,启动其中的 MariaDB 服务
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
接下来安装 MySQL
sudo /usr/bin/mysql_secure_installation
下载并解压缩 Seafile 服务器端
下载并解压最新版本的 Seafile 服务器存档(目前最新版为 5.1.4 )
cd 
wget https://bintray.com/artifact/download/seafile-org/seafile/seafile-server_5.1.4_x86-64.tar.gz
解压和安装
tar -zxvf seafile-server_5.1.4_x86-64.tar.gz
sudo mkdir -p /opt/seafile/installed
sudo mv seafile-server_5.1.4_x86-64.tar.gz /opt/seafile/installed
sudo mv seafile-server-5.1.4/ /opt/seafile
cd /opt/seafile/seafile-server-5.1.4
sudo ./setup-seafile-mysql.sh
运行下面命令启动
sudo ./seafile.sh start
sudo ./seahub.sh start
##修改防火墙规则 为了允许 Seafile 服务端和客户端之间的 Web 访问和文件同步,使用以下命令修改防火墙规则:
sudo firewall-cmd --zone=public --permanent --add-port=8082/tcp
sudo firewall-cmd --zone=public --permanent --add-port=8000/tcp
sudo firewall-cmd --reload
打开浏览器查看成果:
http://<这里输入你们服务器公网 ip>:8000
------------------------------------------------
 
文件云存储 Seafile

Seafile 是由国内团队开发的开源云存储系统。提供更丰富的文件同步和管理功能,以及更好的数据隐私保护和群组协作功能。Seafile 支持 Mac、Linux、Windows 三个桌面平台,支持 Android 和 iOS 移动平台。

Github:https://github.com/haiwen/seafile
 

No comments:

Post a Comment