How to use ISPConfig and Seafile without manual file modifications

How to use ISPConfig and Seafile without manual file modifications

How to use ISPConfig and Seafile without manual file modifications

Seafile ISPConfig Tutorial

Seafile is an open-source cloud based file storage system similar to
Dropbox & Box. The difference is that Seafile can be deployed on a
client’s own system. This provides a greater safety and security factor
as the passwords are only interchanged between the client who setup the
system, and his / her own users rather than a corporate cloud hosting
company.

There are a few Seafile server setup tutorials for ISPConfig, but none
that didn’t require a good majority of editing the files that should
really be left alone as per ISPConfig developer recommendations. While
this setup is written for Ubuntu 14.04 LTS and ISPConfig 3, it can be
followed for other distrobutions. This solution works for me, but no
guarantee or warranty is expressed or implied.

It is assumed that the reader is wanting to deploy Seafile using MySQL
and Apache (also https). It is also assumed that you can functionally
use ISPConfig, as this is not an ISPConfig tutorial.

1 Setup Website

Open your ISPConfig hosting control panel, click on the Sites tab, and create a new website.
While you can technically use an existing website, creating a new one
works better as it allows us to keep all the cloud files separated from
other sites. This also is necessary to use the ISPConfig panel for
configuration changes.

In the website configuration panel, click the Options tab and insert
the following in Apache Directives section:

Alias /media /var/www/seafile.myseafile.com/private/seafile/seafile-server-latest/seahub/media

RewriteEngine On

<Location /media>
Require all granted
</Location>

# 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.fcgi$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

directives
You should also create a shell user for this site as it will be
necessary shortly.

ssh user

2 Create Databases

From the Sites panel in ISPConfig,
select Database User and Add new User.
Create a single user per client that will manage that client’s seafile
databases.

db user

 After the database user is created, click Databases, and Add new
Database
. You will need to add three seperate databases: ccnetdbseafiledbseahubdb

db1
db 2
db 3

3 Download and Install Seafile software

There are some required packages that we need to install. SSH into
your website and execute the following commands:

apt-get install python2.7 python-setuptools
python-simplejson python-imaging python-mysqldb python-flupeval(ez_write_tag([[728,90],’howtoforge_com-box-3′,’ezslot_4′,106,’0′,’0′]));

I prefer to have all my servers running inside the private directory rather than the web directory, so we’ll setup as such.

cd private
mkdir seafile
cd seafile

wget
https://bitbucket.org/haiwen/seafile/downloads/seafile-server_3.1.6_x86-64.tar.gz
    or for 32bit
wget
https://bitbucket.org/haiwen/seafile/downloads/seafile-server_3.1.6_i386.tar.gz

tar zxvf seafile-server_3.1.6_x86-64.tar.gz
mkdir installed
mv seafile-server_* installed

cd seafile-server-*
./setup_seafile_mysql.sh eval(ez_write_tag([[580,400],’howtoforge_com-medrectangle-3′,’ezslot_1′,121,’0′,’0′]));

At this point you’ll need to answer the prompted questions as they
relate to your system and installation. When you get to the section
titled Please Choose a way to initialize
seafile databases
you’ll need to select 2
and input the database information from your ISPConfig setup.

4 Initial Run

It’s time to start seafile and make sure the initial setup is working.

./seafile.sh start
./seahub.sh start

After starting the services, open your web browser and navigate
to the website address you created above with port 8000.

http://192.168.1.111:8000/

5 Apache Setup

Most of our setup for Apache is actually done inside the website setup
above. However, we need to add a line to the apache.conf for everything
to work smoothly. Unfortunately, I have not found a way to add this
without editing this single file.

sudo echo “## Seafile External Server” >>
/etc/apache2/apache.conf
sudo echo “FastCGIExternalServer
/var/www/seafile.myDomainHere.com/web/seahub.fcgi -host
127.0.0.1:8000” >> /etc/apache2/apache.conf

Now modify the SERVICE_URL in /path/to/seafile-server/ccnet/ccnet.conf

SERVICE_URL = http://www.myseafile.com

We’ll also need to modify the FILE_SERVER_ROOT in /path/to/seafile-server/seahub_settings.py

FILE_SERVER_ROOT =
‘http://www.myseafile.com/seafhttp’

Restart Apache.

sudo service apache2 restart

Restart Seafile services.

./seafile.sh start
./seahub.sh start-fastcgi

6 Enable HTTPS

The only thing that needs to be done is generating a SSL key from
inside the Sites tab of ISPConfig. Because of the way ISPConfig is
installed and operates, everything else should already be setup. You
may need to make sure Apache gets restarted though.
ssl

7 Start services automatically 

Since the goal here is to keep everything contained with ISPConfig,
rather than creating a startup service, we’re going to add the seafile
script to the users cron jobs. Naturally, you’ll need to make sure
that the client has the ability to add full cron jobs. Make
sure that
you add two different cron jobs; one for seafile and one for seahub.
Insert the following in the Command to Run
section:

/var/www/clients/client1/web42/private/seafile/seafile-server-3.1.6/seahub.sh
start-fastcgi

and
/var/www/clients/client1/web42/private/seafile/seafile-server-3.1.6/seafile_start

UPDATE (November 23, 2014) : Because
it takes a while for the seafile & seahub servers to start, there
were occasions where the second script would run before the previous
script
finished. Thus the server wouldn’t start. I’ve updated the original
seafile startup script to properly work with ISPConfig. I’ve probably
overdone it on the wait commands, but
the script works well using them. Make sure you’re logged in as the
seafile user prior to running the following commands.

Create a startup file:

cd ~/private/seafile
touch startSeafile.sh
chmod +x startSeafile.sh

Paste the following code into the startSeafile.sh script:

#!/bin/bash

# Change the value of “seafile_dir” to your path of seafile installation
seafile_dir=/var/www/clients/client1/web42/private/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

## Sleep command is necessary to prevent MYSQL errors if
## this script runs before MYSQL is fully operational
sleep 60 &
wait %1

case “$1” in
        start)
               
${script_path}/seafile.sh start >> ${seafile_init_log} &
               
wait %1
               
if [  $fastcgi = true ];
               
then
                       
${script_path}/seahub.sh start-fastcgi ${fastcgi_port} >>
${seahub_init_log} &
                       
wait %1
               
else
                       
${script_path}/seahub.sh start >> ${seahub_init_log} &
                       
wait %1
               
fi
        ;;
        restart)
               
${script_path}/seafile.sh restart >> ${seafile_init_log} &
               
wait %1
               
if [  $fastcgi = true ];
               
then
                       
${script_path}/seahub.sh restart-fastcgi ${fastcgi_port} >>
${seahub_init_log} &
                       
wait %1
               
else
                       
${script_path}/seahub.sh restart >> ${seahub_init_log} &
                       
wait $1
               
fi
        ;;
        stop)
               
${script_path}/seafile.sh $1 >> ${seafile_init_log}
               
${script_path}/seahub.sh $1 >> ${seahub_init_log}
        ;;
        *)
               
echo “Usage: /etc/init.d/seafile {start|stop|restart}”
               
exit 1
        ;;
esac

Now you will only need to add the single startServer.sh
cron job into the Commands to Run
section of ISPConfig:

/var/www/clients/client1/web42/private/seafile/startSeafile.sh
start

cron jobs

Thats it!

About the Author

Leave a Reply