Table of Contents
- Step 1 - Install Required Dependencies
- Step 2 - Install Nginx and MariaDB
- Step 3 - Create a Database for Seafile
- Step 4 - Install Seafile Server
- Step 5 - Create Admin User for Seafile
- Step 6 - Create a Systemd File for Seafile and Seahub
- Step 7 - Configure Reverse Proxy with Nginx
- Step 9 - Access Seafile Web Interface
- Conclusion
Seafile is a free and open-source cloud-based file sharing platform that can be used for storing files and synchronizing the data across multiple devices. Seafile is a self-hosted and high-performance storage system that allows you to host on your own private servers. Seafile is free to use and very similar to other storage providers including OwnCloud, NextCloud, Google Drive and DropBox.
With Seafile, you can access and sync your files, contacts and data across PC and mobile devices.
Seafile comes with a rich set of features including support for client encryption, support for version control, LDAP authentication, two-factor authentication, antivirus integration, Office web app integration, public link sharing, reliable file synicing, Drive Client support, and many more.
In this tutorial, we will explain how to install and configure a Seafile server with Nginx as a reverse proxy on Ubuntu 18.04.
Step 1 – Install Required Dependencies
First, you will need to install all the dependencies needed for Seafile server installation. You can install all of them by running the following command:
apt-get update -y apt-get install python2.7 libpython2.7 python-setuptools python-pil python-ldap python-urllib3 ffmpeg python-pip python-mysqldb python-memcache python-requests unzip wget -y
Once all the dependencies are installed, you can proceed to the next step.
Step 2 – Install Nginx and MariaDB
Next, you will need to install the Nginx web server and MariaDB database server in your server. You can install them by running the following command:
apt-get install nginx mariadb-server mariadb-client -y
Once the installation is completed, start the Nginx and MariaDB service and enable it to start after system reboot:
systemctl start nginx systemctl start mariadb systemctl enable nginx systemctl enable mariadb
Once you are finished, you can proceed to the next step.
Step 3 – Create a Database for Seafile
Seafile consists of three main components: Seahub, Seafile server and Ccnet server. Each component requires a separate database to store its data. You will need to create a separate database for each of these components.
To do so, login to the MariaDB shell with the following command:
mysql -u root -p
Provide your root password when prompt then create the required databases with the following commands:
CREATE DATABASE seafiledb character set = 'utf8'; CREATE DATABASE ccnetdb character set = 'utf8'; CREATE DATABASE seahubdb character set = 'utf8';
Next, create the database user with the following command:
CREATE USER 'seafileuser'@'localhost' IDENTIFIED BY 'password';
Next, grant all the privileges to the Seafile database user with the following command:
GRANT ALL ON seafiledb.* TO 'seafileuser'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; GRANT ALL ON ccnetdb.* TO 'seafileuser'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; GRANT ALL ON seahubdb.* TO 'seafileuser'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
Next, flush the privileges and exit from the MariaDB shell with the following command:
FLUSH PRIVILEGES; EXIT;
At this point, you have created all the databases required to store the Seafile data.
Step 4 – Install Seafile Server
Next, download the latest version of Seafile from their official website with the wget command:
wget https://download.seadrive.org/seafile-server_7.0.5_x86-64.tar.gz
Once downloaded, extract the downloaded file with the following command:
tar -xvzf seafile-server_7.0.5_x86-64.tar.gz
Next, copy the extracted directory to the Nginx web root directory:
cp -r seafile-server-7.0.5 /var/www/html/seafile
Next, start the Seafile installation script with the following command:
cd /var/www/html/seafile ./setup-seafile-mysql.sh
During the installation, you will be prompted to answer several questions as shown below:
Checking python on this machine ... 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 ] seafile What is the ip or domain of the server? For example: www.mycompany.com, 192.168.1.101 [ This server's ip or domain ] seafile.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 ] seafileuser What is the password for mysql user "seafileuser"? [ password for seafileuser ] verifying password of user seafileuser ... done Enter the existing database name for ccnet: [ ccnet database ] ccnetdb verifying user "seafileuser" access to database ccnetdb ... done Enter the existing database name for seafile: [ seafile database ] seafiledb verifying user "seafileuser" access to database seafiledb ... done Enter the existing database name for seahub: [ seahub database ] seahubdb verifying user "seafileuser" access to database seahubdb ... done --------------------------------- This is your configuration --------------------------------- server name: seafile server ip/domain: seafile.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: seafileuser --------------------------------- Press ENTER to continue, or Ctrl-C to abort ---------------------------------
Once the installation has been completed successfully, you should get the following output:
----------------------------------------------------------------- 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.
Next, give permissions to Seafile with the following command:
chown -R www-data:www-data /var/www/html/
Next, you will need to add a FILE_SERVER_ROOT setting in the file seahub_settings.py:
nano /var/www/html/conf/seahub_settings.py
Add the FILE_SERVER_ROOT settings as shown below:
SECRET_KEY = "x)0=j*l6b+4amq2n^&)c=q5p==exn13%s&6x!*48u4p0p97k)4" FILE_SERVER_ROOT = 'http://seafile.example.com/seafhttp' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', : 'NAME': 'seahubdb', 'USER': 'seafileuser', 'PASSWORD': 'password', 'HOST': '127.0.0.1', 'PORT': '3306' } }
Save and close the file when you are finished.
Step 5 – Create Admin User for Seafile
Next, you will need to create an admin user and set a password for Seafile. To do so, change the directory to seafile and start the seafile service with the following command:
cd /var/www/html/seafile su -p -l www-data -s /bin/bash -c "./seafile.sh start"
Next, start the seahub service and create an admin account with the following command:
su -p -l www-data -s /bin/bash -c "./seahub.sh start"
You will be asked to provide your email address and admin password as shown below:
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 ] [email protected] 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.
Once you are done, stop the seafile and seahub services:
su -p -l www-data -s /bin/bash -c "./seafile.sh stop" su -p -l www-data -s /bin/bash -c "./seahub.sh stop"
Step 6 – Create a Systemd File for Seafile and Seahub
Next, you will need to create a systemd unit file for Seafile and Seahub to manage the service.
First, create a seafile service file with the following command:
nano /etc/systemd/system/seafile.service
Add the following lines:
[Unit] Description=Seafile After= mysql.service After=network.target [Service] User=www-data Group=www-data Type=forking ExecStart=/var/www/html/seafile-server-latest/seafile.sh start ExecStop=/var/www/html/seafile-server-latest/seafile.sh stop [Install] WantedBy=multi-user.target
Save and close the file. Then, create a systemd service file for Seahub with the following command:
nano /etc/systemd/system/seahub.service
Add the following lines:
[Unit] Description=Seafile After= mysql.service After=network.target [Service] User=www-data Group=www-data Type=forking ExecStart=/var/www/html/seafile-server-latest/seahub.sh start ExecStop=/var/www/html/seafile-server-latest/seahub.sh stop [Install] WantedBy=multi-user.target
Save and close the file. Then, reload the systemd daemon with the following command:
systemctl daemon-reload
Next, restart Seafile and Seahub service and enable them to start after system reboot with the following command:
systemctl start seafile systemctl enable seafile systemctl start seahub systemctl enable seahub
To verify the Seafile service, run the following command:
systemctl status seafile
Output:
● seafile.service - Seafile Loaded: loaded (/etc/systemd/system/seafile.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2019-11-28 08:48:31 UTC; 8s ago Process: 15487 ExecStart=/var/www/html/seafile-server-latest/seafile.sh start (code=exited, status=0/SUCCESS) Tasks: 16 (limit: 1150) CGroup: /system.slice/seafile.service ├─15522 /var/www/html/seafile/seafile/bin/seafile-controller -c /var/www/html/ccnet -d /var/www/html/seafile-data -F /var/www/html/c ├─15524 ccnet-server -F /var/www/html/conf -c /var/www/html/ccnet -f /var/www/html/logs/ccnet.log -d -P /var/www/html/pids/ccnet.pid └─15527 seaf-server -F /var/www/html/conf -c /var/www/html/ccnet -d /var/www/html/seafile-data -l /var/www/html/logs/seafile.log -P Nov 28 08:48:28 ubuntu1804 systemd[1]: Starting Seafile...
To verify the Seahub service run the following command:
systemctl status seahub
Output:
● seahub.service - Seafile Loaded: loaded (/etc/systemd/system/seahub.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2019-11-28 08:50:49 UTC; 18s ago Process: 15547 ExecStart=/var/www/html/seafile-server-latest/seahub.sh start (code=exited, status=0/SUCCESS) Main PID: 15573 (python2.7) Tasks: 6 (limit: 1150) CGroup: /system.slice/seahub.service ├─15573 python2.7 /var/www/html/seafile/seahub/thirdpart/gunicorn seahub.wsgi:application -c /var/www/html/conf/gunicorn.conf --prel ├─15579 python2.7 /var/www/html/seafile/seahub/thirdpart/gunicorn seahub.wsgi:application -c /var/www/html/conf/gunicorn.conf --prel ├─15580 python2.7 /var/www/html/seafile/seahub/thirdpart/gunicorn seahub.wsgi:application -c /var/www/html/conf/gunicorn.conf --prel ├─15581 python2.7 /var/www/html/seafile/seahub/thirdpart/gunicorn seahub.wsgi:application -c /var/www/html/conf/gunicorn.conf --prel ├─15582 python2.7 /var/www/html/seafile/seahub/thirdpart/gunicorn seahub.wsgi:application -c /var/www/html/conf/gunicorn.conf --prel └─15583 python2.7 /var/www/html/seafile/seahub/thirdpart/gunicorn seahub.wsgi:application -c /var/www/html/conf/gunicorn.conf --prel Nov 28 08:50:43 ubuntu1804 systemd[1]: Starting Seafile...
Step 7 – Configure Reverse Proxy with Nginx
Next, you will need to install and configure Nginx as a reverse proxy for Seafile to forward the client requests from ports 8000 and 8082 to the Nginx port 80.
To do so, create an Nginx virtual host configuration file with the following command:
nano /etc/nginx/sites-available/seafile
Add the following lines:
server { listen 80; listen [::]:80; root /var/www/html/seafile; server_name seafile.example.com; client_max_body_size 100M; autoindex off; access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; proxy_read_timeout 1200s; } location /seafhttp { rewrite ^/seafhttp(.*)$ $1 break; proxy_pass http://127.0.0.1:8082; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 36000s; proxy_read_timeout 36000s; proxy_send_timeout 36000s; send_timeout 36000s; } location /media { root /var/www/html/seafile-server-latest/seahub; } }
Save and close the file when you are finished. Then, enable the Nginx virtual host with the following command:
ln -s /etc/nginx/sites-available/seafile /etc/nginx/sites-enabled/
Finally, restart the Nginx service with the following command:
systemctl restart nginx
Step 9 – Access Seafile Web Interface
Now, open your web browser and navigate the URL http://seafile.example.com. You should see the Seafile login page:
Provide your admin username, password and click on the Log in button. You should see the Seafile default dashboard:
Conclusion
In the above tutorial, we learned how to install the Seafile server with Nginx as a reverse proxy on Ubuntu 18.04 VPS. I hope you have now enough knowledge to host your own file sharing server using Seafile. Get started with Seafile today on a VPS from Atlantic.Net!