Installation

DRDB system from PNB, McMaster University

This is an open source system to manage participant database, study, study schedules, and research personnels.

How to deploy the system on a Linux (Ubuntu) sever

Prerequisites

  • Node.js & npm
sudo apt update
sudo apt install nodejs
sudo apt install npm
sudo apt install git
  • nginx
sudo apt install nginx

Download the latest version of the system

cd ~
git clone https://github.com/naiqixiao/DRDB

All frontend and backend codes should be downloaded to “~/DRDB” folder.

MySQL database setup

  • Create a user and password
# in Terminal, enter mysql shell with root
# if you haven't set password for root, press 'Enter' key when the password prompt shows up.

mysql -u root -p
# choose your own username and password to replace the following newuser and password respectively.

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

# provide the user with access to the information they will need.
# replacing the following newuser with the username that you just created.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

# reload all the privileges

FLUSH PRIVILEGES;
  • Create a database under the user that you just created.
# in Terminal, log in to the MySQL Server using the user just created.

mysql -u newuser -p
# in MySQL shell, enter the following script to create a database named DRDB.

CREATE DATABASE IF NOT EXISTS DRDB;

# quit MySQL shell.

EXIT
  • Import template database
# in Terminal, import the template database with the user just created.
# the template sql database is in /DRDB/MySQL/Template.sql
# the following codes assume you import the template database under the user named username. Replacing the following newuser with the username that you just created.

cd ~/DRDB
mysql -u newuser -p DRDB < MySQL/Template.sql

# in Terminal, log in MySQL with the username
mysql -u newuser -p
# in MySQL, enter the following command to setup automatic Age caculation.

USE DRDB

CREATE EVENT
IF NOT EXISTS age_update
ON SCHEDULE EVERY 1 Day
STARTS CURRENT_TIMESTAMP
DO
UPDATE DRDB.Child
    set Age = DATEDIFF(CURDATE(), DoB);

Backend setup and configuration

  • Install all required modules
cd ~/DRDB/server
sudo npm install
  • Set up MySQL database connection
  • open ‘~/DRDB/server/config/general.js’
  • update Line 5 with the MySQL username and password that you created in the previous step.
  • for example, the following line indicates username of ‘admin’ and password of ‘password’
exports.sequelize = new Sequelize("DRDB", "admin", "password", {
host: "localhost",
dialect: "mysql",
logging: false,
define: {
    // timestamps: false,
    freezeTableName: true,
},
timeZone: "America/Toronto",
pool: {
    max: 10,
    min: 0,
    acquire: 30000,
    idle: 10000,
},
});
  • Set up the URL of the system
  • open ‘~/DRDB/server/config/general.js’
  • update Line 1 with the URL of the system
  • Run backend server with pm2
cd ~/DRDB/server

sudo npm install --save pm2 -g

pm2 start server.js
  • Set up credentials to use Google APIs

Please see this instruction for specific steps: https://mcmasteru365-my.sharepoint.com/:w:/g/personal/xiaon8_mcmaster_ca/EdIxUUOHUeNIgN3pAprvVMoBJZHOp-2dErCY81bENFri-g?e=zKFOIh

Frontend setup

install all required modules

cd ~/DRDB/client
sudo npm install

deploy frontend server

cd ~/DRDB/client
npm run build

Configure nginx

Instructions: https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04

You might need to run the following script to enable firewall

sudo ufw enable

Run frontend server with nginx

  • Copy the ready-to-be-deployed frontend codes to ngnix folder
cd ~/DRDB/client
sudo cp -r -T dist /var/www/html/DRDB
  • Configure ngnix
# Use the following script to configure ngnix services

sudo nano /etc/nginx/sites-available/default

# Change 'root /var/www/html;' to 'root /var/www/html/DRDB;'

# Change ' location / {} ' to

location /api/ {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}
  • Restart ngnix service
sudo systemctl restart nginx

You should be able to access the system with the ip address of your server by now.

Inital setup the system

You should be able to log on to the system with the default admin account:

After logging in to the system, you can start setting up lab information (in Settings page) and personnels (in Personnel management page).

To setup Google account, please see this instruction for details: https://mcmasteru365-my.sharepoint.com/:p:/g/personal/xiaon8_mcmaster_ca/ERk1uev-LENDrca6aWXwSqYBAn1J1OEsJ3tNjPkbpvcwtA?e=xeMbpV

How to upgrade the system

cd ~/DRDB
git pull

# update npm packages for client folders (i.e., frontend)
cd ~/DRDB/client
npm install

# rebuild the system (frontend)
npm run build
#assuming your system is stored at /var/www/html/DRDB
sudo cp -r -T dist /var/www/html/DRDB

# update npm packages for server folders (i.e., backend)
cd ~/DRDB/server
npm install

pm2 restart server.js