Deploy OpenEMS Backend
This chapter explains how OpenEMS Backend can be deployed on a Debian Linux server. Similar techniques will work for other operating systems as well.
|It is recommended to run every service on a server with limited permissions. This example runs OpenEMS Backend with user "root" which is a bad idea for a production server!|
Create the directory /opt/openems-backend. This is going to be the place, where we put the JAR file.
Create the directory /opt/openems-backend/config.d. This is going to be the place, where all the bundle configurations are held.
The systemd 'Service Manager' manages system processes in a Debian Linux. We will create a systemd service definition file, so that systemd takes care of managing (starting/restarting/…) the OpenEMS Backend service.
Create and open the service definition file.
Paste the following content:
[Unit] Description=OpenEMS (1) After=network.target (2) [Service] User=root (3) Group=root Type=simple (4) WorkingDirectory=/opt/openems-backend ExecStart=/usr/bin/java -XX:+ExitOnOutOfMemoryError -Dfelix.cm.dir=/opt/openems-backend/config.d -Djava.util.concurrent.ForkJoinPool.common.parallelism=100 -jar /opt/openems-backend/openems-backend.jar (5) SuccessExitStatus=143 (6) Restart=always (7) RestartSec=10 (8) [Install] WantedBy=multi-user.target
1 The name of the service. 2 The service is allowed to start after network is available (e.g. to be able to access devices via ethernet connection) 3 It is run as user 'root' to have access to all devices. It is recommended to change this for productive systems. 4 OpenEMS Backend uses a "simple" process fork. 5 The start command. It uses the Java JRE, sets the config directory to
/opt/openems-backend/config.d, sets a parallelism value for ForkJoinPool - this depends on the number of OpenEMS Edge devices you expect to connect - and runs the jar file at
6 In contrast to what systemd expects, Java exits with status 143 on success. 7 Systemd always tries to restart OpenEMS Backend once it was quit. 8 Systemd waits 10 seconds till the next restart.
Press Ctrl + x to exit and y to save the file.
Activate the service definition:
To update the OpenEMS JAR file at the target device, it is required to copy the JAR file from your build directory to
/opt/openems-backend/openems-backend.jar on the server. Afterwards it is required to restart the systemd service
(Re)start OpenEMS systemd service.
systemctl restart openems-backend --no-block; journalctl -lfu openems-backend
The command restarts the service (systemctl restart openems-backend) while not waiting for the OpenEMS startup notification (--no-block). Then it directly prints the OpenEMS system log (journalctl -lfu openems-backend).