REST Service for POPCORN - ILIAS
alex
2025-11-17 3d646156c378c6182e55c673c118c23d53ff0a05
README.md
@@ -1,31 +1,245 @@
# Globus-ILIAS-Rest
REST Service für POPCORN -> ILIAS.
Stellt in ILIAS-SOAP fehlende Funktionen bereit für POPCORN (GS-2101).
REST service for POPCORN -> ILIAS sync.
Globus-ILIAS-Rest provides function for accessing ILIAS through a rest api.
## Voraussetzungen
## Prerequisites
- node >= v22
- pm2
### ILIAS
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.)
### ILIAS DB Access
Globus-ILIAS-Rest needs access to the ILIAS DB.
The DB credentials are defined in the settings file `settings.$NODE_ENV.json`.
### Software
- node.js v22.x
- npm (included in node.js)
#### Installing node.js
__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
#### Installing pm2
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._
#### PHP Component
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 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 mod_proxy
Enable Apache mods if not enabled yet
    a2enmod proxy
    a2enmod proxy_http
##### Apache Config
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
## Setup
### Service
### Env
Der REST-Service an sich muss auf dem gleichen Rechner laufen auf dem auch die ILIAS DB läuft (ansonsten die Config anpassen).
Set `NODE_ENV` env var.
E.g. in `.bashrc`.
    node app.js
For Test installation
bzw. bei Nutzung von pm2 (empfohlen)
    NODE_ENV=test
For production installation.
    NODE_ENV=prod
__NODE_ENV must be set before starting the application!__
### Install files
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
### Run a self test
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.
## Running
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.
## Running the app through pm2
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
### Apache Config
Apache muss als Proxy für globus-ilias-rest fungieren und Verbindungen an diesen weiterreichen.
todo
## Usage
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 .
### globusfm-dev2
Kann zugegriffen werden über
    https://globusfm-dev2.minervis.com/popcorn/users?token=$TOKEN
#### Testing PHP Component
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!
### Testing Apache
    https://globusfm-dev2.minervis.com/popcorn/users?token=AUTHTOKEN
## Other
### Logs
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`.