Marvin Live is a NodeJS based application for molecule design and idea management. It includes an HTTP and WebSocket server to serve multiple clients running the embedded web application.
Installation is only required for the server, clients access the web server through the configured host and port.
Windows Server 2012 or newer, or Ubuntu 16.04.3 LTS, RHEL/CentOS 7.0 or newer
Min 1GB free RAM
100MB free space
recommended: check JChem Web Services’s requirements as well
live internet connection to https://hub.chemaxon.com/ and https://github.com during installation
You need NodeJS 10.12.0 or newer v10 LTS version to run Marvin Live. Download the installer from https://nodejs.org/ and follow the installation wizard. Linux users may install from their mainline repositories if available, or use NodeSource’s fantastic install scripts. To verify a successful installation, open the terminal and type:
user:~$ node -v
v10.12.0
NodeJS installs its package manager as well, called npm. To verify it’s been installed:
user:~$ npm -v
6.4.1
{info} Note 1: if
node
ornpm
command are unrecognized, it’s missing from the environmental variables. On Windows, closing and opening the command prompt or restarting the server may help.Note 2: on Ubuntu servers, if you install NodeJS from the mainline repository, the node executable may be called
nodejs
.
From version v16.11.7, RedHat / CentOS 6.x releases with glibc 2.14 or older require additional steps before a successful installation.
# confirm affected libc version
bash-4.1# ldd --version
ldd (GNU libc) 2.12
# install software collections, devtools and enable it
bash-4.1# yum install centos-release-scl scl-utils
bash-4.1# yum install devtoolset-3-gcc devtoolset-3-gcc-c++
bash-4.1# scl enable devtoolset-3 bash
Now you need to point npm to the ChemAxon download site, and login. The instructions on the download page provide you with the API key used to access the repository. This is required the first time only.
user:~$ curl -o ~/.npmrc -u<email address>:<api key> https://hub.chemaxon.com/artifactory/api/npm/auth
user:~$ npm config set registry https://hub.chemaxon.com/artifactory/api/npm/npm
You may set your proxy configuration if needed, these settings will be used for outgoing HTTP requests that download Marvin Live and its components. Usage is described in the npm docs.
user:~$ npm set http_proxy ...
user:~$ npm set https_proxy ...
Choose an application directory where you want to install the application, to store configuration files and persistent storage. Once there, you can install the application with:
user:~$ mkdir app
user:~$ cd app/
user:~/app$ npm install marvin-live
This will download and install the latest version of the application in the app directory. You can find the full list of recently added features and changes in the History of changes document.
{info} Note: at this point on Windows 8 and Windows Server 2008 and Windows Server 2012, you may get this error:
Error: ENOENT, stat 'C:\Users\User\AppData\Roaming\npm'
. This error message is about a missing folder. You can resolve this issue by creating the quoted folder or starting the command prompt as administrator.
user:~/app$ npm install marvin-live
This will replace the existing Marvin Live installation folder, but leave any configuration, persistence intact.
With the offline installer bundle, you can warm the cache with all required dependencies that would be otherwise fetched from the (external) NPM repository.
user:~/app$ ./addcache.sh
...
user:~/app$ npm install /data/npm/marvin-live-18.25.0-offline.tgz
This will install the latest version of the application in the app directory. You can find the full list of recently added features and changes in the History of changes document.
{info} Note: at this point on Windows 8 and Windows Server 2008 and Windows Server 2012, you might get this error:
Error: ENOENT, stat 'C:\Users\User\AppData\Roaming\npm'
. This error message is about a missing folder. You can resolve this issue by creating the quoted folder or starting the command prompt as administrator.
user:~/app$ npm install /data/npm/marvin-live-18.25.0-offline.tgz
This will replace the existing Marvin Live installation folder, but leave any configuration, persistence intact.
This application requires a configuration file to be passed as a command line argument. The configuration file holds all the key settings regarding networking, security, persistence, plugins and more. A sample file with defaults is provided within the application: ~/app/node_modules/marvin-live/config-sample.json
.
Please copy this to your application directory, and rename it to your preference. Do not modify this file in place, and do not store your settings within the node_modules
directory, because it is automatically removed / replaced on upgrade !
user:~/app$ cp node_modules/marvin-live/config-sample.json \
./config.json
{info} Note: on Windows, make sure you save the json file with ANSI encoding when editing with a text editor such as Notepad.
The minimum configuration requires port and license attributes to be specified, but a more general sample of the options is below. Note that some values point to files or other services. These should be changed to match your environment - of course you can store your ChemAxon license files or Marvin Live plugins anywhere. See below in the spreadsheet for your full list of options:
{
"converterService": "http://localhost:8080/webservices/",
"servicesDirectory": "../services/",
"port": 8888,
"license": ["./marvin4js-license.cxl", "./mlive-license.cxl"],
"secretKey": "CHANGETHIS",
"authentication": {
"internal": {
"type": "local",
"label": "Testing domain",
"accounts": [{
"username": "demo",
"password": "demo"
}]
}
},
"snapshotFields": [{
"name": "task",
"label": "Task"
}, {
"name": "status",
"label": "Status",
"values": ["Not ready for review", "Ready for review", "Approved", "On hold", "Synthesized", "Cancelled"]
}]
}
In the Configuration Guide you can find a detailed description for options and further customization instructions.
Once a basic config file is available, you can start the server in foreground mode with:
user:~/app$ node node_modules/marvin-live/ -c config.json
When the application is ready to use, it prints Listening on http://localhost:8888/
.
To stop a running instance, simply press Ctrl+C
.
Given the IP or hostname of your server and the port set in the configuration, you may now distribute the web interface link to the users of the application.
To run Marvin Live as a daemon/service, you could create configurations in supervisord/supervisorctl, use an init script or a systemd script. Below you can find an example for both: /etc/supervisor/conf.d/marvinlive.conf
[program:marvinlive]
command=/usr/bin/node /home/user/app/node_modules/marvin-live/ -c /home/user/app/config.json
autostart=true
autorestart=true
stderr_logfile=/var/log/marvinlive.err.log
stdout_logfile=/var/log/marvinlive.out.log
user=user
/etc/init.d/marvin-live
#!/bin/bash
# /etc/init.d/marvin-live -- startup script for the Marvin Live
################ BEGIN RED HAT init info #######################
# Provides: marvin-live
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Should-Start: $named
# Should-Stop: $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start Marvin Live.
# Description: Start the Marvin Live nodejs application and frontend.
#
################ END RED HAT init info #######################
################## BEGIN Debian/Ubuntu init info ##################
# Provides: marvin-live
# Required-Start: $remote_fs $named $syslog
# Required-Stop: $remote_fs $named $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Debian initscript for marvin-live
# Description: Start the Marvin Live nodejs application and frontend.
#
################## END Debian/Ubuntu init info ##################
name="Marvin Live"
nodejs_bin="/usr/bin/nodejs"
dir_home="/home/user/app/"
app_home="$dir_home/marvin-live"
file_log="$dir_home/log/marvin-live.log"
dir_tmp="$dir_home/tmp"
user=user
date=$(date "+%Y-%m-%d %H:%M:%S")
f_get_pid(){
if pid=$(pgrep -f /node_modules/marvin-live);
then
echo "PID: $pid"
else
echo "$name is not running"
fi
}
case $1 in
start)
echo "Starting $name"
su -s /bin/bash $user -c "echo $date -- Starting $name" >> $file_log
su -s /bin/bash $user -c "$nodejs_bin $app_home/node_modules/marvin-live/ -c $app_home/config.json >>$file_log 2>&1 &"
f_get_pid
;;
stop)
echo "Stopping $name"
f_get_pid
kill $pid
su - $user -c "echo $date -- Stopping $name >> $file_log"
;;
restart)
$0 stop
sleep 2
$0 start
;;
status)
f_get_pid
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
/lib/systemd/system/marvinlive.service
[Unit]
Description=Marvin Live
Wants=network-online.target
After=network-online.target
[Service]
User=marvinlive
Group=marvinlive
Type=simple
ExecStart=/usr/bin/node /home/marvinlive/app/node_modules/marvin-live/ -c /home/marvinlive/app/config.json
[Install]
WantedBy=multi-user.target
Marvin Live uses a persistent websocket connection between each client and the server for messaging. If you deploy the application behind a proxy, you need to make sure the proxy doesn't interfere with websockets. In case of nginx, you should review the websocket module’s configuration options.