How to Install Collaborative Real-time Editor Etherpad on Ubuntu 18.04
This tutorial exists for these OS versions
- Ubuntu 24.04 (Noble Numbat)
- Ubuntu 20.04 (Focal Fossa)
- Ubuntu 18.04 (Bionic Beaver)
On this page
- Prerequisites
- What we will do?
- Step 1 - Install Packages Dependencies
- Step 2 - Install Nodejs
- Step 3 - Install and Configure MySQL
- Step 4 - Download Etherpad
- Step 5 - Configure Etherpad
- Step 6 - Setup Etherpad as a service
- Step 7 - Install and Configure Nginx as a Reverse proxy
- Step 8 - Setup UFW Firewall
- Step 9 - Testing
- Reference
Etherpad is a real-time collaborative editor based on Node.js. It's an open source, web-based collaborative editor for multi-user access with the ability to import/export to various office file formats and highly customizable online editor.
In this tutorial, I will guide you step-by-step to install and configure the Etherpad-lite on Ubuntu 18.04 Server. We will install the Etherpad-lite with the MySQL as a database, the Nginx web server as a reverse proxy, and enable the HTTPS secure connection on it.
Prerequisites
- Ubuntu 18.04 server
- Root privileges
What we will do?
- Install Packages Dependencies
- Install Nodejs
- Install and Configure MySQL
- Download Etherpad
- Configure Etherpad
- Setup Etherpad as a Service
- Setup Nginx as a Reverse Proxy for Etherpad
- Setup UFW Firewall
- Testing
Step 1 - Install Packages Dependencies
The first step we will do in this guide is to install all package dependencies for Nodejs installation.
Run the apt command below.
sudo apt install gzip git curl python libssl-dev pkg-config gcc g++ make build-essential -y
Wait for all installation.
Step 2 - Install Nodejs
Etherpad requires Node.js >= 6.9, and in this step we will install Nodejs 9.11 that can be installed from the nodesource repository.
Add the nodesource Nodejs repository and install the Node.js package using commands below.
curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
sudo apt install -y nodejs
After this, check the nodejs and npm commands.
nodejs --version
npm --version
The Node.js v9.11 has been installed on Ubuntu 18.04 server.
Step 3 - Install and Configure MySQL
In this tutorial, we will be using MySQL as the database for Etherpad.
Install MySQL database server using the apt command below.
sudo apt install mysql-server mysql-client
After the installation is complete, start the mysql service and enable it to launch everytime at system boot.
sudo systemctl start mysql
sudo systemctl enable mysql
The MySQL server has been installed.
Next, we will configure the mysql root password and create a new database and user for our etherpad installation.
To configure the MySQL root password, run the command below.
mysql_secure_installation
Type your strong mysql root password.
Now login to the mysql shell using root user.
mysql -u root -p
Create a new database named 'etherpad_db' and user 'hakase', and run mysql queries below.
create database etherpad_db;
grant all privileges on etherpad_db.* to hakase@localhost identified by 'Hakase321@#';
flush privileges;
MySQL database for etherpad installation has been created.
Step 4 - Download Etherpad
In this step, we will create a new user and download the etherpad source code.
Create a new user named 'etherpad' and login to the user.
useradd -m -s /bin/bash etherpad
su - etherpad
Now clone the etherpad repository.
git clone git://github.com/ether/etherpad-lite.git
Go to the 'etherpad-lite/' directory and run the bash script to start etherpad.
cd etherpad-lite/
bin/run.sh
You will get the result as below.
Open your web browser and type the server IP address with port '9001'.
http://192.168.33.10:9001/
And you will see the etherpad home page.
Back to your terminal and press 'Ctrl+c' to exit from the application.
Step 5 - Configure Etherpad
In this step, we will do the basic configuration of etherpad collaborative editor.
Login to the etherpad user and go to the 'etherpad-lite' directory.
su - etherpad
cd etherpad-lite/
Edit the configuration 'settings.json' using vim editor.
vim settings.json
Change the ip address to '127.0.0.1' or localhost, because we will run the etherpad on Nginx reverse proxy.
"ip": "127.0.0.1",
"port" : 9001,
Now disable the default dirty database by adding the comment '/* .... */', and paste the MySQL database configuration.
/*
"dbType" : "dirty",
"dbSettings" : {
"filename" : "var/dirty.db"
},
*/
MySQL database configuration.
"dbType" : "mysql",
"dbSettings" : {
"user" : "hakase",
"host" : "localhost",
"port" : 3306,
"password": "Hakase321@#",
"database": "etherpad_db",
"charset" : "utf8mb4"
},
Next, we will enable the admin user by removing the comment from those lines and change the password value with a new password.
"users": {
"admin": {
// "password" can be replaced with "hash" if you install ep_hash_auth
"password": "hakase123@#",
"is_admin": true
},
"user": {
// "password" can be replaced with "hash" if you install ep_hash_auth
"password": "aqwe123@#",
"is_admin": false
}
},
Save and exit.
The basic etherpad configuration has been completed.
Step 6 - Setup Etherpad as a service
Now we will run etherpad as a systemd service on our ubuntu system.
Go to the '/etc/systemd/system' directory and create a new service file named 'etherpad.service'.
cd /etc/systemd/system/
vim etherpad.service
Paste configurations below.
[Unit]
Description=Etherpad-lite, the collaborative editor.
After=syslog.target network.target
[Service]
Type=simple
User=etherpad
Group=etherpad
WorkingDirectory=/home/etherpad/etherpad-lite
Environment=NODE_ENV=production
ExecStart=/usr/bin/nodejs /home/etherpad/etherpad-lite/node_modules/ep_etherpad-lite/node/server.js
Restart=always # use mysql plus a complete settings.json to avoid Service hold-off time over, scheduling restart.
[Install]
WantedBy=multi-user.target
Save and exit.
Reload the systemd service lists.
sudo systemctl daemon-reload
Start the etherpad service and enable it to launch every time at system boot.
sudo systemctl start etherpad
sudo systemctl enable etherpad
And the ether is up and running as a service on localhost ip with the default port 9001.
Check the service using commands below.
sudo systemctl status etherpad
netstat -plntu
Step 7 - Install and Configure Nginx as a Reverse proxy
In this step, we will install and configure Nginx web server as a reverse proxy for etherpad service.
Install the nginx web server using apt command below.
sudo apt install nginx -y
After the installation is complete, go to the '/etc/nginx/sites-available' directory and create a new virtual host 'etherpad'.
cd /etc/nginx/sites-available/
vim etherpad
Paste configurations below.
server {
listen 80;
server_name pad.hakase.io;
rewrite ^(.*) https://$server_name$1 permanent;
}
# we're in the http context here
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443;
server_name pad.hakase.io;
access_log /var/log/nginx/eplite.access.log;
error_log /var/log/nginx/eplite.error.log;
ssl on;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
location / {
proxy_pass http://localhost:9001/;
proxy_set_header Host $host;
proxy_pass_header Server;
# be careful, this line doesn't override any proxy_buffering on set in a conf.d/file.conf
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr; # http://wiki.nginx.org/HttpProxyModule
proxy_set_header X-Forwarded-For $remote_addr; # EP logs to show the actual remote IP
proxy_set_header X-Forwarded-Proto $scheme; # for EP to set secure cookie flag when https is used
proxy_set_header Host $host; # pass the host header
proxy_http_version 1.1; # recommended with keepalive connections
# WebSocket proxying - from http://nginx.org/en/docs/http/websocket.html
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
Save and exit.
Note:
- Make sure you change the path of the SSL with your own ssl certificates.
- Change the etherpad domain 'pad.hakase.io' with your own domain name.
Now activate the etherpad virtual host and test the configuration.
ln -s /etc/nginx/sites-available/etherpad /etc/nginx/sites-enabled/
nginx -t
Make sure there is no error, then start the nginx service and enable it to launch everytime at system boot.
sudo systemctl restart nginx
sudo systemctl enable nginx
The Nginx installation and configuration as etherpad reverse proxy has been completed successfully.
Step 8 - Setup UFW Firewall
For the firewall setup, we just want to open the SSH, HTTP, and HTTPS port services.
Run ufw commands below.
sudo fuw allow ssh
sudo ufw allow http
sudo ufw allow https
Then enable the ufw firewall.
sudo ufw enable
And the ufw firewall configuration has been completed.
Step 9 - Testing
Open your web browser and type the etherpad domain name, mine is: http://pad.hakase.io/
Now you will be redirected to the HTTS secure connection.
Create a new pad by typing the pad name on the box and click the 'OK' button.
And you will get the Etherpad editor as below.
Next, open the etherpad admin URL. Mine is https://pad.hakase.io/admin/
You will be asked the admin username and password. Type your own user and password, then click the Signin button.
And you will get the default Etherpad admin page below.
- Etherpad settings.json Configuration
- Etherpad Plugin Manager
The Etherpad installation with MySQL and Nginx reverse proxy on Ubuntu 18.04 has been completed successfully.