Pubapps Systemd Use

From UFRC
Jump to navigation Jump to search

back to Web_Application_Hosting

Introduction

If your web applications hosted on the pubapps infrastructure is architected to run as a backend process that is then reverse proxied via the pubweb* webservers you will need a way to start the application when a server in the pubapps infrastructure (pubcontainer* node, individual VM, or pubweb* webservers for lightweight backends) is restarted. We encourage you to consider using a systemd in user mode, which can automate the start/stop/restart process. This help article should help you create and use such a user systemd script for a web application.

Configuration

Systemd has two modes of operation - system-wide, which requires the service scripts to be in a system location and operated by root and a user mode. You will be using the user mode.

  • Create a user systemd directory under your /pubapps/PROJECT/ $HOME directory in pubapps
mkdir -p .config/systemd/user/
  • Add a service script for the application, e.g. ~/.config/systemd/user/projprod.service or projdev.service

Script

Python

Example generic python web application systemd script

[Unit]
Description=MyProject (Production)
After=network.target

[Service]
Type=simple

WorkingDirectory=/pubapps/myinstance/myproject/prod/
ExecStart=/pubapps/myinstance/myproject/prod/conda/bin/python3 run/runserver.py
TimeoutSec=30
RestartSec=15s
Restart=always

[Install]
WantedBy=multi-user.target

R Shiny

[Unit]
Description=MyShinyApp
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=5
WorkingDirectory=/pubapps/myproject/shinyapp/prod/app
ExecStart=nohup R --no-echo --no-restore --file=run.R > /pubapps/myproject/shinyapp/prod/logs/app.log 2>&1
EnvironmentFile=/pubapps/myproject/shinyapp/prod/env.sh

[Install]
WantedBy=multi-user.target

Use

Login linger mode

  • Enable user linger mode to avoid having your application be shut down when you log out:
loginctl enable-linger $USER

Manage the application

  • Initial load of the configuration to enable the service
systemctl --user enable projprod
  • Reload configuration (after every change of the systemd service script)
systemctl --user daemon-reload
  • Start service
systemctl --user start projprod
  • Stop service
systemctl --user stop projprod
  • Restart service
systemctl --user restart projprod
  • Check if the service is running
systemctl --user status projprod

HA Setup on pubweb servers

Since we have two pubapps web/proxy servers you need to have a copy of the app running on every pubweb[1,2] server to account for the HA (High Availability) configuration of the pubapps infrastructure where a secondary pubweb webserver will take over if there is an issue with the main webserver.

Additional Information

For additional information search web for 'systemd user mode'. E.g. https://wiki.archlinux.org/title/Systemd/User