REST service for POPCORN -> ILIAS sync.
Globus-ILIAS-Rest provides function for accessing ILIAS through a rest api.
Globus-ILIAS-Rest must run on the same host the ILIAS installation is running on.
(Theoretically it can also run on a different host but this is untested.)
Globus-ILIAS-Rest needs access to the ILIAS DB.
The DB credentials are defined in the settings file settings.$NODE_ENV.json.
Do not install node.js from a package manager!
These node versions are generally outdated and cannot be used to run Globus-ILIAS-Rest.
Download and install from the node.js website:
https://nodejs.org/en/download
or
Use tools like nvm to handle the installation of the required version.
https://github.com/nvm-sh/nvm
Depending on how node.js was installed pm2 is installed differently.
If using a local node.js (e.g. using nvm):
npm i -g pm2
If using a global node.js
sudo npm i -g pm2
Registering pm2 to start on system boot.
pm2 startup
Then follow the instructions provided by pm2.
globus-ilias-rest requires a PHP compoentent for accessing ILIAS internal functions.
This component needs to be copied into the base dir of ILIAS ($ILIASBASEDIR).
Starting from the installation dir of Globus-ILIAS-Rest
cp -ar php/globus-ilias-rest $ILIASBASEDIR/.
cd $ILIASBASEDIR
chown -R www-data:www-data globus-ilias-rest
The copied folder contains a file named token. This file contains an access token which must be kept secret.
The file token is protected by a .htaccess rule which prevents the webserver from reading the file.
Make sure that this .htaccess Apache rule is active and prevents the file from beeing read by the webserver.
Apache needs to work as a reverse proxy for Globus-ILIAS-Rest.
This way Globus-ILIAS-Rest can be accessed through the same URL as the ILIAS Installation (including https).
ATTENTION
The service must run under https. Otherwise, the AUTH-TOKEN used by Globus-ILIAS-Rest is not secure.
(as of now this is given for both ILIAS installations)
Enable Apache mods if not enabled yet
a2enmod proxy
a2enmod proxy_http
The apache config must be changed to proxy all requests going to "https://$ILIASURL/popcorn/" to Globus-ILIAS-Rest.
Insert into apache config of the site:
e.g. for /etc/apache2/sites-available/globusfm-dev2.minervis.com.conf
# Proxy all requests to /popcorn/... to the globus-ilias-rest service
ProxyPreserveHost On
ProxyPass /popcorn http://localhost:4101
ProxyPassReverse /popcorn http://localhost:4101
Set NODE_ENV env var.
E.g. in .bashrc.
For Test installation
NODE_ENV=test
For production installation.
NODE_ENV=prod
NODE_ENV must be set before starting the application!
Install Globus-ILIAS-Rest using git.
git clone https://$USER@gitblit.minervis.com/r/globus/globus-ilias-rest.git
cd globus-ilias-rest
Install dependencies
npm i
Copy the required .env file.
cp vue/.env.$NODE_ENV vue/.env
Build frontend
npm run build
Globus-ILIAS-Rest has a build-in testing tool to check if everything works correctly.
Inside Globus-ILIAS-Rest dir run:
npm run test-connect
All tests must succeed without errors.
The best way to run Globus-ILIAS-Rest is by running it through pm2 (node process manager).
pm2 automatically provides some useful features like restarting the app if it crashes and more.
Starting from inside the installation dir of Globus-ILIAS-Rest.
pm2 start app.js --name globus-ilias-rest
Check if the app is running correctly
pm2 ls
Check if status is "online".
Save the app startup config so that it can be restored on system boot.
pm2 save
For accessing the service a auth-token is required.
This token is defined in the config file settings.$NODE_ENV.json.
Dann kann der Service angesprochen werden (test mit curl):
curl localhost:4101/users?token=AUTHTOKEN
Die Antwort prettyfeien:
curl localhost:4101/users?token=AUTHTOKEN | jq .
Kann zugegriffen werden über
https://globusfm-dev2.minervis.com/popcorn/users?token=$TOKEN
Folgende URL sollte dann funktionieren für die PHP Komponente:
https://globusfm-dev2.minervis.com/globus-ilias-rest/login.php?token=$PHPTOKEN&command=getUser&usr_id=573
Die API dann über:
https://globusfm-dev2.minervis.com/popcorn/api/user/userid/573?token=$TOKEN
Achtung die Tokens sind unterschiedlich!
https://globusfm-dev2.minervis.com/popcorn/users?token=AUTHTOKEN
To prevent logs from growing too big the file $INSTALLDIR/log.log should be included into a logrotation job.
Furthermore pm2 also does some logging.pm2 logs can be cleared by running
pm2 flush
Alternatively pm2 logging also can be turned off (not advised).
To do this add the param --disable-logs when running Globus-ILIAS-Rest through pm2.