从源码部署 seafile

#+SETUPFILE: ~/Dropbox/Doc/Org_Templates/level-1.org

seafile 是一款很优秀的 开源的 dropbox replace.

部署环境

官方的 wiki 推荐使用 ubuntu 12.04 作为部署的环境, 但是根据我研究的结果, seafile 用到的某些组件和 ubuntu 12.04 的软件包冲突, 比如 django 的 log 模块有问题, 这其实 django 1.3 的一个 bug, 另外的像一些依赖包也有各种各样的问题, 所以方便 起见, 最好的方式就是在稍微新一点的版本上部署, 这里我选择 ubuntu 13.04 的 64 位 server 版.

安装依赖软件包

seafile 官方发行的二进制包很有意思, 他把大部分需要依赖的软件包都包含在 发布的二进制中, 在启动的时候再定制程序加载的路径. 这些依赖中, 部分并没有被 各大发行版收录, 只能通过源码手动安装.

先把 ubuntu 软件源里自带的包装上:

$ sudo apt-get install build-essential libevent-dev libcurl4-openssl-dev \
libglib2.0-dev uuid-dev intltool libsqlite3-dev libmysqlclient-dev libarchive-dev \
flex python-django sqlite3 python-simplejson python-imaging gunicorn python-pip \
python-flup python-chardet python-django-registration python-djblets cmake unzip

还有以下几个包是需要我们手动从 source 安装的

  • libzdb
  • libevhtp
  • djangorestframework

安装 libzdb:

$ wget https://seafile.googlecode.com/files/libzdb-2.11.1-mod.tar.gz
$ tar xf libzdb-2.11.1-mod.tar.gz; cd libzdb-2.11.1
$ ./configure --prefix=/usr && sudo make && sudo make install

安装 libevhtp

$ wget https://github.com/ellzey/libevhtp/archive/1.1.6.zip -O libevhtp-1.1.6.zip
$ unzip libevhtp-1.1.6.zip; cd libevhtp-1.1.6
$ cmake . && sudo make && sudo make install

安装 djangorestframework

$ djangorestframework

安装 seafile

seafile 由以下几大组件构成:

  • Ccnet 网络服务模块
  • Seafile server 数据服务模块
  • Seahub web 后端, 就是一个 django 实例
  • HttpServer: 为 seahub 处理文件上传下载
  • Controller:

在 github 上的项目分布很乱, seahub 是一个单独的项目, seafile 里面包含了 httpserver, controller, monitor, seafile server 还有 windows, linux, mac 的客户端, ios 和 android 客户端是单独的仓库, ccnet 也是一个单独的仓库.

但是在官方发布源码版本的时候, 在 server 这端, 是把 seahub 单独发布一个版本, seafile 单独发布一个版本(包括 ccnet 等)

编译 seafile 的过程稍微复杂一点:

为了升级和管理数据的方式, 官方建议用以下的目录布局.(foo 可以随便取名, 这里是我先用 cloudtimes)

foo/
└── ccnet # ccnet config directory
    └── ccnet.conf # ccnet config file
└── seafile-data # seafile configuration and data
    └── seafile.conf # seafile config file
└── seahub-data/ # seahub data
└── seahub.db # seahub sqlite3 database
└── seahub_settings.py # custom settings for seahub
└── seafile-server
    └── seahub/
    └── seafile-{VERSION} # seafile source code

首先是创建需要的目录布局, 并下载相应的源码

# mkdir -p /data/cloudtimes/seafile-server
# cd /data/cloudtimes/seafile-server/
# wget http://seafile.googlecode.com/files/seafile-latest.tar.gz
# wget http://seafile.googlecode.com/files/seahub-latest.tar.gz
# tar xf seafile-latest.tar.gz
# mv seahub-1.7.0 seahub

这个版本(1.7.1 的启动脚本有点问题, 需要 hack 之): 文件在 /data/cloudtimes/seafile-server/seafile-1.7.1.1/tools

diff --git a/seafile-admin b/seafile-admin
index 86741a0..250705d 100755
--- a/seafile-admin
+++ b/seafile-admin
@@ -561,10 +561,10 @@ def init_seahub():
     create_gunicorn_conf()

 def check_django_version():
-    '''Requires django 1.3'''
+    '''Requires django 1.4'''
     import django
-    if django.VERSION[1] != 3:
-        error('Django 1.3 is required')
+    if django.VERSION[1] != 4:
+        error('Django 1.4 is required')
     else:
         del django

@@ -584,7 +584,7 @@ def check_python_dependencies(silent=False):
     check_python_module('simplejson', 'simplejson', silent=silent)
     check_python_module('sqlite3', 'sqlite3', silent=silent)
     check_python_module('PIL', 'python imaging library(PIL)', silent=silent)
-    check_python_module('django', 'django 1.3', silent=silent)
+    check_python_module('django', 'django 1.4', silent=silent)
     check_python_module('djblets', 'djblets', silent=silent)
     check_python_module('rest_framework', 'django rest framework', silent=silent)

然后编译各个模块:

# cd /data/cloudtimes/seafile-server/seafile-1.7.1.1/libsearpc
# ./configure --prefix=/usr && make && make install

# cd /data/cloudtimes/seafile-server/seafile-1.7.1.1/ccnet
# ./configure --prefix=/usr --disable-client --enable-server
# make && make install

# cd /data/cloudtimes/seafile-server/seafile-1.7.1.1
# ./configure --prefix=/usr --disable-client --enable-server
# make && make install

初始化配置

以上一切都成功后, 使用 seafile-admin 这个工具初始化 seafile 的配置

# cd /data/cloudtimes // 进入这个目录很重要
# seafile-admin setup // 按照提示进入, 配置端口等等
# seafile-admin start // 就这样可以启动 seafile

把 seafile 部署在 apache 上

# apt-get install libapache2-mod-fastcgi
# a2enmod rewrite

编辑 apache 的配置文件, 端口路径根据需要自行设定

FastCGIExternalServer /var/www/seahub.fcgi -host 127.0.0.1:8000
Listen 80
<VirtualHost *:80>
  ServerName 127.0.0.1
  DocumentRoot /var/www
  Alias /media  /data/cloudtimes/seafile-server/seahub/media
  RewriteEngine On
  RewriteRule ^/(media.*)$ /$1 [QSA,L,PT]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ /seahub.fcgi$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</virtualhost>

运行 fastcgi 模式

# seafile-admin start --fastcgi

在 MySQL 上部署 seafile

# apt-get install -y mysql-server mysql-client python-mysqldb

未完待续

Reference

Build and deploy seafile server from source

Deploy Seafile Web with nginx apache

Deploy Seafile with MySQL

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦