Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

How to Install and Configure Seafile on Ubuntu 16.04.

DZone's Guide to

How to Install and Configure Seafile on Ubuntu 16.04.

Seafile run.

· Open Source Zone ·
Free Resource

New Report Reveals Open Source Risk Is Still a Mystery to Many. Read more.

Introduction

Seafile is a free, open source and cross-platform file storage system similar to Dropbox. It is used for sharing and syncing files between users and groups. It can be easily integrated with LDAP and WebDAV. It supports file versioning, snapshots, and two-factor authentication. You can deploy it with MySQL, MariaDB, PostgreSQL, Apache and NGINX web server. Files are stored on Seafule server and can be synchronized with personal computers and mobile devices through apps. You can also access and manage Seafile through a web browser.

Features:

  • Multi-platform file synchronization.

  • You can create a public link for downloading and uploading files.

  • Supports LDAP, Active Directory authentication and Version control.

  • File locking, Text searching, and Activity logging.

  • Provide access control and Client-side encryption.

  • Desktop clients are available for personal computers running on Windows, macOS, and Linux. Mobile clients are available for iOS, Windows Phone 8 and Android.

In this tutorial, we will be going to learn how to install and configure Seafile server on Ubuntu 16.04.

Requirements

  • A fresh Alibaba cloud Ubuntu 16.04 instance with minimum 2GB RAM.

  • A valid domain name is setup to your instance.

  • A Root password is setup on the server.

Launch Alibaba Cloud ECS Instance

First, login to your Alibaba Cloud ECS Console. Create a new ECS instance, choosing Ubuntu 16.04 as the operating system with at least 2GB RAM. Connect to your ECS instance and log in as the root user.

Once you are logged into your Ubuntu 16.04 instance, run the following command to update your base system with the latest available packages.

apt-get update -y


Install Required Dependencies

Before starting, you will need to install some dependencies in order to install Seafile. You can install all the dependencies by running the following command:

apt-get install apache2 openjdk-8-jre poppler-utils libreoffice libreoffice-script-provider-python libpython2.7 python-pip xfonts-wqy python-imaging python-mysqldb python-setuptools python-memcache ttf-wqy-microhei ttf-wqy-zenhei -y


Next, you will also need to install boto using pip:

pip install boto

Install and Configure Database

First, you will need to install MariaDB server to your system. You can install it by just running the following command:

apt-get install mariadb-server -y


Once the MariaDB is installed, start MariaDB service and enable it to start on boot time with the following command:

systemctl start mysql
systemctl enable mysql


By default, MariaDB is not secured, so you will need to secure it first. You can secure it by running the mysql_secure_installation script:

mysql_secure_installation


Answer all the questions as shown below:

Change the password for root ? N
Remove anonymous users? Y
Disallow root login remotely? Y
Remove test database and access to it? Y
Reload privilege tables now? Y


Once the MariaDB is secured, login to MariaDB shell using the following command:

mysql -u root -p


Enter your root password, then create a database for CCNet, Seafile and Seahub:

MariaDB [(none)]> create database ccnetdb character set = 'utf8';
MariaDB [(none)]> create database seafiledb character set = 'utf8';
MariaDB [(none)]> create database seahubdb character set = 'utf8';


Next, create a user for these databases using the following command:

MariaDB [(none)]> create user seacloud@localhost identified by 'password';


Next, grant all privileges to the Seacloud user on all databases using the following command:

MariaDB [(none)]> grant all privileges on ccnetdb.* to seacloud@localhost identified by 'password';
MariaDB [(none)]> grant all privileges on seafiledb.* to seacloud@localhost identified by 'password';
MariaDB [(none)]> grant all privileges on seahubdb.* to seacloud@localhost identified by 'password';


Next, flush the privileges and exit from the shell:

MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit

Install Seafile

First, you will need to download the latest version of Seafile from their official website. You can download it with the following command:

wget https://download.seadrive.org/seafile-server_6.3.1_x86-64.tar.gz


Once the download is completed, extract the downloaded file with the following command:

tar -xvzf seafile-server_6.3.1_x86-64.tar.gz


Next, move the extracted directory to the Apache web root directory:

mv seafile-server_6.3.1 /var/www/html/seafile


Next, give proper permissions to the Seafile directory:

chown -R www-data:www-data /var/www/html/seafile
chmod -R 777 /var/www/html/seafile


Next, change the directory to Seafile and install Seafile by running setup-seafile-mysql.sh script:

cd /var/www/html/seafile
./setup-seafile-mysql.sh


During installation, you will need to provide some details like, your domain name, database name, password etc. Provide all the details as follows:

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 ] SeafileCloud

What is the ip or domain of the server?
For example: www.mycompany.com, 192.168.1.101
[ This server's ip or domain ] example.com

Where do you want to put your seafile data?
Please use a volume with enough free space
[ default "/var/www/html/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 ] 2

What is the host of mysql server?
[ default "localhost" ] 

What is the port of mysql server?
[ default "3306" ] 

Which mysql user to use for seafile?
[ mysql user for seafile ] seacloud

What is the password for mysql user "seacloud"?
[ password for seacloud ] 

verifying password of user seacloud ...  done

Enter the existing database name for ccnet:
[ ccnet database ] ccnetdb

verifying user "seacloud" access to database ccnetdb ...  done

Enter the existing database name for seafile:
[ seafile database ] seafiledb

verifying user "seacloud" access to database seafiledb ...  done

Enter the existing database name for seahub:
[ seahub database ] seahubdb

verifying user "seacloud" access to database seahubdb ...  done

---------------------------------
This is your configuration
---------------------------------

    server name:            SeafileCloud
    server ip/domain:       example.com

    seafile data dir:       /var/www/html/seafile-data
    fileserver port:        8082

    database:               use existing
    ccnet database:         ccnetdb
    seafile database:       seafiledb
    seahub database:        seahubdb
    database user:          seacloud



---------------------------------
Press ENTER to continue, or Ctrl-C to abort
---------------------------------
Generating ccnet configuration ...

done
Successly create configuration dir /var/www/html/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.


Once the installation is completed successfully, start Seafile and the Seahub server using the following command:

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


You will need to provide email and password for admin account:

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 ] admin@example.com

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.


Configure Apache for Seafile

Next, you will need to configure Apache as a reverse proxy server for seafile-server on port 8000 and 8002. You can do this by creating seafile.conf file:

nano /etc/apache2/sites-enabled/seafile.conf


Add the following lines:

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /var/www/html
    Alias /media  /var/www/html/seafile/seahub/media

    RewriteEngine On

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

    #
    # seafile fileserver
    #
    ProxyPass /seafhttp http://127.0.0.1:8082
    ProxyPassReverse /seafhttp http://127.0.0.1:8082
    RewriteRule ^/seafhttp - [QSA,L]

    #
    # seahub
    #
    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/
</VirtualHost>


Save and close the file, then enable Seafile Virtual Host, rewrite module and proxy module with the following command:

a2ensite seafile
a2enmod rewrite
a2enmod proxy_http


Finally, restart Apache service to apply all the changes:

systemctl restart apache2

Seafile server is now installed and listening on port 80. Open your web browser and type the URL http://example.com. You will be redirected to the following page:

Image title


Now, provide your admin email and password, then click on the Login button. You should see the Seafile dashboard in the following image:

Image title

Secure Seafile with Certbot Certificate

Seafile is now installed and configured. If you want to enable https on Seafile server, then you will need to obtain a certificate from the Certificate Authority (CA).

Here, we will use Let's Encrypt to obtain a certificate using via Certbot. So you will need to add the Certbot PPA to your server. You can add the PPA by running the following command:

add-apt-repository ppa:certbot/certbot
apt-get update -y


Next, install Certbot using the following command:

apt-get install python-certbot-apache -y


Next, create a directory to store certificates:

mkdir /etc/certs


Change the directory to the /etc/certs and download Certbot certificate using the following command:

cd /etc/certs
certbot --apache certonly


Next, enable ssl module with the following command:

a2enmod ssl


Next, open Apache configuration file for Seafile and make the following changes:

nano /etc/apache2/sites-enabled/seafile.conf


Make the following changes:

<VirtualHost *:443>
  ServerName www.example.com
  DocumentRoot /var/www/html

  SSLEngine On
  SSLCertificateFile /etc/certs/cacert.pem
  SSLCertificateKeyFile /etc/certs/privkey.pem

  Alias /media  /var/www/html/seafile-server-latest/seahub/media

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

  RewriteEngine On

  #
  # seafile fileserver
  #
  ProxyPass /seafhttp http://127.0.0.1:8082
  ProxyPassReverse /seafhttp http://127.0.0.1:8082
  RewriteRule ^/seafhttp - [QSA,L]

  #
  # seahub
  #
  SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
  ProxyPass / http://127.0.0.1:8000/
  ProxyPassReverse / http://127.0.0.1:8000/
</VirtualHost>


Save and close the file, then restart Apache service to apply all the changes:

systemctl restart apache2

Now, you can access Seafile server using the URL https://example.com

Create Service File for Seafile and Seahub

Next, you will need to create Seafile and Seahub services file to start and stop the Seafile server.
First, stop Seafile and Seahub service using the following command:

/var/www/html/seafile/seafile.sh stop
/var/www/html/seafile/seahub.sh stop


Next, create a Seafile service file with the following command:

nano /lib/systemd/system/seafile.service


Add the following lines:

[Unit]
Description=Seafile Server
After=network.target mariadb.service

[Service]
Type=oneshot
ExecStart=/var/www/html/seafile/seafile.sh start
ExecStop=/var/www/html/seafile/seafile.sh stop
RemainAfterExit=yes
User=www-data
Group=www-data

[Install]
WantedBy=multi-user.target


Save and close the file, then create a Seahub service file:

nano /lib/systemd/system/seahub.service


Add the following lines:

[Unit]
Description=Seafile Hub
After=network.target seafile.target

[Service]
Type=oneshot
ExecStart=/var/www/html/seafile/seahub.sh start
ExecStop=/var/www/html/seafile/seahub.sh stop
RemainAfterExit=yes
User=www-data
Group=www-data

[Install]
WantedBy=multi-user.target


Save the file once you are done. Next, reload the systemd service and start Seafile and Seahub with the following command:

systemctl daemon-reload
systemctl start seafile
systemctl start seahub


Finally, enable Seafile and Seahub service on boot time:

systemctl enable seafile
systemctl enable seahub

Install Seafile Client

Seafile server is now up and running. It's time to install Seafile client on Ubuntu 16.04 desktop system.
By default, Seafile client is not available in the Ubuntu 16.04 default repository. So you will need to add the repository for Seafile.

You can do this by running the following command:

add-apt-repository ppa:seafile/seafile-client


Next, update the repository and install Seafile client using the following command:

apt-get update
apt-get install seafile-gui -y


Next, open Seafile client from Unity Dash as shown below:

Image title

Image title

Now, choose the folder where you want to store Seafile, then click on the Next button. You should see the following page:

Image title

Here, provide your Seafile server name, username, and password, then click on the Login button. You should see the following page:

Image title


Congratulations! you have successfully installed and configured Seafile server and client. You can now access all your files through a web browser and Seafile client. Seafile client maps storage space in Seafile server as a virtual drive of your local storage. You can access all the files in the Seafile without syncing them.

Software composition Analysis for DevSecOps. Start finding vulnerabilities in your open source components today.

Topics:
storage ,tutorial ,open source ,seafile ,file sharing

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}