EteSync is a free, open-source, and end-to-end tool used to sync your contacts, calendars, tasks, and notes. It can be easily integrated with your existing apps. You just need one password for login and encryption. EteSync has the ability to share data with other users and synchronization between multiple devices. It also provides an add-on for Mozilla Thunderbird and a client for Web, Desktop, Android, and iOS.

In this post, we will show you how to install EteSync on Ubuntu 20.04 server.[jumpbox]

Step 1 – Install and Configure MariaDB Database

EteSync uses MariaDB as a database backend, so the latest version of MariaDB must be installed on your server.

First, install the required dependencies with the following command:

apt-get update -y
apt-get install software-properties-common curl git gnupg2 -y

Next, download and add the GPG key and repository with the following command:

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mirror.lstn.net/mariadb/repo/10.5/ubuntu focal main'

Next, install the latest version of the MariaDB server with the following command:

apt-get install mariadb-server -y

Next, connect to the MariaDB and create a database and user:

mysql

Once connected, create a database and user with the following command:

create database etebase;
create user etebase@localhost identified by 'password';

Next, grant all the privileges to the etebase database with the following command:

grant all privileges on etebase.* to etebase@localhost;

Next, flush the privileges and exit from the MariaDB with the following command:

flush privileges;
exit;

Step 2 – Install EteSync

First, you will need to install all Python dependencies to your server. You can install all of them with the following command:

apt-get install python3-virtualenv python3-pip gcc build-essential libmysqlclient-dev -y

Once all the dependencies are installed, download the latest version of EteSync with the following command:

git clone https://github.com/etesync/server.git etebase

Next, change the directory to the downloaded directory and create a Python virtual environment with the following command:

cd etebase
virtualenv -p python3 .venv

Next, activate the virtual environment with the following command:

source .venv/bin/activate

Next, install all required dependencies with the following command:

pip install -r requirements.txt

Next, rename the example configuration file:

cp etebase-server.ini.example etebase-server.ini

Next, edit the configuration file with the following command:

nano etebase-server.ini

Change the following lines:

media_root = /mnt
allowed_host1 = etebase.example.com
;engine = django.db.backends.sqlite3
;name = db.sqlite3
engine = django.db.backends.mysql
name = etebase
user = etebase
password = password
host = 127.0.0.1
port = 3306

Save and close the file, then install the Django web socket server and MariaDB client with the following command:

pip3 install daphne mysqlclient aioredis

Next, create Django’s static files with the following command:

./manage.py collectstatic

Next, initialize the application with the following command:

./manage.py migrate

Next, start the EteSync server with the following command:

daphne -b 0.0.0.0 -p 8001 etebase_server.asgi:application

You should get the following output:

2021-03-13 04:30:04,102 INFO     Starting server at tcp:port=8001:interface=0.0.0.0
2021-03-13 04:30:04,103 INFO     HTTP/2 support not enabled (install the http2 and tls Twisted extras)
2021-03-13 04:30:04,103 INFO     Configuring endpoint tcp:port=8001:interface=0.0.0.0
2021-03-13 04:30:04,104 INFO     Listening on TCP address 0.0.0.0:8001

Press CTRL+C to stop the server.

Step 3 – Create a Systemd Service File for EteSync

Next, you will need to create a systemd service file for EteSync. You can create it with the following command:

nano /etc/systemd/system/etebase.service

Add the following lines:

[Unit]
Description=EteSync: End-to-End Encryption to Sync Calendar, Contacts, Tasks and Notes.

[Service]
WorkingDirectory=/root/etebase/
ExecStart=/root/etebase/.venv/bin/daphne -b 127.0.0.1 -p 8001 -u /tmp/etebase_server.sock etebase_server.asgi:application
User=root
Group=root
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

Save and close the file, then reload the systemd daemon with the following command:

systemctl daemon-reload

Next, start the EteSync service and enable it to start at system reboot with the following command:

systemctl start etebase
systemctl enable etebase

Next, verify the status of the EteSync service with the following command:

systemctl status etebase

You should get the following output:

● etebase.service - EteSync: End-to-End Encryption to Sync Calender, Contacts, Tasks and Notes.
     Loaded: loaded (/etc/systemd/system/etebase.service; disabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-03-13 04:30:57 UTC; 6s ago
   Main PID: 13641 (daphne)
      Tasks: 1 (limit: 2353)
     Memory: 48.5M
     CGroup: /system.slice/etebase.service
             └─13641 /root/etebase/.venv/bin/python /root/etebase/.venv/bin/daphne -b 127.0.0.1 -p 8001 -u /tmp/etebase_server.sock etebase_se>

Mar 13 04:30:57 ubuntu2004 systemd[1]: Started EteSync: End-to-End Encryption to Sync Calender, Contacts, Tasks and Notes..
Mar 13 04:30:58 ubuntu2004 daphne[13641]: 2021-03-13 04:30:58,437 INFO     Starting server at tcp:port=8001:interface=127.0.0.1, unix:/tmp/ete>
Mar 13 04:30:58 ubuntu2004 daphne[13641]: 2021-03-13 04:30:58,438 INFO     HTTP/2 support not enabled (install the http2 and tls Twisted extra>
Mar 13 04:30:58 ubuntu2004 daphne[13641]: 2021-03-13 04:30:58,439 INFO     Configuring endpoint tcp:port=8001:interface=127.0.0.1
Mar 13 04:30:58 ubuntu2004 daphne[13641]: 2021-03-13 04:30:58,441 INFO     Listening on TCP address 127.0.0.1:8001
Mar 13 04:30:58 ubuntu2004 daphne[13641]: 2021-03-13 04:30:58,441 INFO     Configuring endpoint unix:/tmp/etebase_server.sock

Step 4 – Configure Nginx for EteSync

Next, install the Nginx with the following command:

apt-get install nginx -y

Once installed, create an Nginx virtual host configuration file with the following command:

nano /etc/nginx/conf.d/etebase.conf

Add the following lines:

upstream etebase {
    server unix:/tmp/etebase_server.sock;
}

server {
    listen 80;
    server_name etebase.example.com;

    charset     utf-8;
    access_log /var/log/nginx/etebase.access;
    error_log /var/log/nginx/etebase.error;

    # max upload size
    client_max_body_size 75M;

    location /static/ {
        alias /root/etebase/static/;
    }

    location / {
        proxy_pass http://etebase;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_redirect of/f;
        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;
    }
}

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

systemctl restart nginx

Step 5 – Create an Admin User

Next, you will need to create an administrative user for EteSync.

First, change the directory to etebase and activate the virtual environment if not activated:

cd etebase
source .venv/bin/activate

Next, create a superuser with the following command:

./manage.py createsuperuser

Provide all information as shown below:

Username: admin
Email address: [email protected]
Password: 
Password (again): 
Superuser created successfully.

Step 6 – Access EteSync

Now, open your web browser and access your EteSync web interface using the URL http://etebase.example.com/admin. You should see the following page:

Provide your username, password and click on the Login button. You should see the EteSync dashboard on the following page:

Conclusion

Congratulations! You have successfully installed and configured EteSync on Ubuntu 20.04 server. You can now easily sync your contacts, calendars, tasks, and notes using VPS hosting from Atlantic.Net!