Seafile is an open source cloud storage server similar to the popular Dropbox. I have been waiting for an alternative for quite some time and I’m glad to see that one of the open source servers has finally gained a lot of ground.
This post is gear towards being a tutorial rather than anything else. See their website for more details: http://www.seafile.com
This tutorial accomplishes the following goals
- Install the Seafile server
- Restrict to a user
- Auto start on restart
- Secure access through Apache HTTP Server SSL
- Run Seafile from a different path
Prerequisites:
- MySQL Server
- Apache HTTP Server with SSL
Contents
Seafile Installation
Create the Seafile path
$ mkdir /opt/seafile
Create the Seafile user
$ useradd -m -d /opt/seafile -s /bin/false seafile
Change the ownership of the Seafile path
$ chown seafile:seafile /opt/seafile
Change to the new user
$ sudo -u seafile -s /bin/sh
Download the latest Seafile from their website http://seafile.com/en/download/ and extract
$ cd /opt/seafile/ $ wget "https://bitbucket.org/haiwen/seafile/downloads/seafile-server_3.0.0_x86-64.tar.gz" $ tar xzvf seafile-server_3.0.0_x86-64.tar.gz $ rm -f seafile-server_3.0.0_x86-64.tar.gz
There are some dependencies for Seafile.
$ yum -y install sqlite python-simplejson python-setuptools python-imaging
Run the setup and create the MySQL user, database, and tables
$ cd /opt/seafile/seafile-server_3.0.0 $ ./setup-seafile-mysql.sh
This is my configuration:
--------------------------------- This is your configuration --------------------------------- server name: Domain server ip/domain: domain.com ccnet port: 10001 seafile data dir: /opt/seafile/seafile-data seafile port: 12001 httpserver port: 8082 database: create new ccnet database: ccnet-db seafile database: seafile-db seahub database: seahub-db database user: seafile
Start Seafile server for the first time
$ /opt/seafile/seafile-server-latest/seafile.sh start
Start Seafile Hub server for the first time
$ /opt/seafile/seafile-server-latest/seafile.sh start
On the first run, seahub will ask you to set up your admin account:
---------------------------------------- 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 ] user@domain.com What is the password for the admin account? [ admin password ] Enter the password again: [ admin password again ] ---------------------------------------- Successfully created seafile admin ----------------------------------------
Stop the servers
$ /opt/seafile/seafile-server-latest/seahub.sh stop $ /opt/seafile/seafile-server-latest/seafile.sh stop
Return to root access and create a file in /etc/sysconfig/seafile
# Change the value of "user" to your linux user name user=seafile # Change the value of "script_path" to your path of seafile installation seafile_dir=/opt/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 # Change the value of fastcgi to true if fastcgi is to be used fastcgi=true # Set the port of fastcgi, default is 8000. Change it if you need different. fastcgi_port=8000
Create the initialization script for seafile in /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
Create the initialization script for seafile in /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 $RETVAL
Change permissions and add it into chkconfig
$ chmod 755 /etc/init.d/seafile $ chmod 755 /etc/init.d/seahub $ chkconfig --add seafile $ chkconfig seafile on $ chkconfig --add seahub $ chkconfig seahub on
Apache HTTP Server Setup
mod_fastcgi Installation
Install the required packages
$ yum install libtool httpd-devel apr-devel apr gcc make
Download the latest mod_fastcgi and extract
$ wget http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz $ tar xzvf mod_fastcgi-current.tar.gz $ cd mod_fastcgi-2.4.6/
Make a copy of Makefile.AP2
cp Makefile.AP2 Makefile
Compile and install mod_fastcgi for 32-bit OS
$ make top_dir=/usr/lib/httpd $ make install top_dir=/usr/lib/httpd
Compile and install mod_fastcgi for 64-bit OS
$ make top_dir=/usr/lib64/httpd $ make install top_dir=/usr/lib64/httpd
Seafile Configuration
Modify /opt/seafile/ccnet/ccnet.conf
SERVICE_URL = https://domain.com
Modify /opt/seafile/seahub_settings.py and add HTTP_SERVER_ROOT to the top of the file
SITE_ROOT = '/seahub/' HTTP_SERVER_ROOT = 'https://domain.com/seafhttp'
Increase the upload and download limits
[httpserver] port = 8082 # Set maximum upload file size to 5120M. max_upload_size=5120 # Set maximum download directory size to 5120M. max_download_dir_size=5120
Apache HTTP Server Configuration
In the /etc/httpd/conf.d/ssl.conf, add the FastCGI module to the top
LoadModule ssl_module modules/mod_ssl.so LoadModule fastcgi_module modules/mod_fastcgi.so
Before the closing VirtualHost tag, add the Seafile Proxy
FastCGIExternalServer /var/www/html/seahub.fcgi -host 127.0.0.1:8000 Alias /media /opt/seafile/seafile-server-latest/seahub/media RewriteEngine on # # seafile httpserver # ProxyPass /seafhttp http://127.0.0.1:8082 ProxyPassReverse /seafhttp http://127.0.0.1:8082 RewriteRule ^/seafhttp - [QSA,L] # # seahub # RewriteRule ^/(media.*)$ /$1 [QSA,L,PT] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(/seahub.*)$ /seahub.fcgi/$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Stop all the services
$ service httpd stop $ service seahub stop $ service seafile stop
Start all the services
$ service seafile start $ service seahub start $ service httpd start
Open the server on the browser
https://domain.com/seahub
Firewall Configuration
To allow Seafile clients to connect to the server, modify /etc/sysconfig/iptables
# seafile -A INPUT -p tcp -m multiport --dports 10001,12001 -m state --state NEW,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m multiport --sports 10001,12001 -m state --state ESTABLISHED -j ACCEPT
Reset the firewall and network
$ service iptables restart $ service network restart
Edits
2014-06-10: Added upload/download limit settings