From 7ce5673562b08f30f12da58f19f6880fef3ae19f Mon Sep 17 00:00:00 2001 From: Sebastian Friston Date: Wed, 10 Jan 2024 10:44:19 +0000 Subject: [PATCH] Updated documentation to match server revisions --- .../64a4c60f-42ec-4ecc-91fd-e02d90bcbd55.png | Bin 0 -> 44431 bytes Documentation/docs/nexus.md | 6 +- Documentation/docs/serversetup.md | 101 ++++++++++++++++-- 3 files changed, 98 insertions(+), 9 deletions(-) create mode 100644 Documentation/docs/images/64a4c60f-42ec-4ecc-91fd-e02d90bcbd55.png diff --git a/Documentation/docs/images/64a4c60f-42ec-4ecc-91fd-e02d90bcbd55.png b/Documentation/docs/images/64a4c60f-42ec-4ecc-91fd-e02d90bcbd55.png new file mode 100644 index 0000000000000000000000000000000000000000..601477113350166596b519df33f3e7d991af93d0 GIT binary patch literal 44431 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®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 Z^asmioci3lyVVdd3v+9;!gIep`WK?j1e^c> literal 0 HcmV?d00001 diff --git a/Documentation/docs/nexus.md b/Documentation/docs/nexus.md index 31829f5b9..8b9c0f88a 100644 --- a/Documentation/docs/nexus.md +++ b/Documentation/docs/nexus.md @@ -6,7 +6,7 @@ The UCL VECG hosts multiple instances of the rendezvous server on nexus.cs.ucl.a The checkouts are in `/home/node` and follow the format `ubiq-[branch name]`. -Currently `ubiq-master` is running on `8004`. This is the primary, public server. +Currently `ubiq-master` is running on `8010`. This is the primary, public server. It is expected and encouraged that feature branches are created, run on nexus temporarily for development, then removed when no longer needed. @@ -46,7 +46,7 @@ The `--depth 1` command downloads only the `HEAD`, which is all that is needed t After cloning, navigate to `~/ubiq-[branch name]/Node/` and issue the commands: 1. `npm install` -2. `pm2 start app.js --name "ubiq-[branch name]"` +2. `pm2 start npm -- name "ubiq-[branch name]" -- start` The first installs the nodejs dependencies and the second creates the pm2 job with a unique name to identify the instance. @@ -69,7 +69,7 @@ The `-n` argument shows the port numbers, rather than showing the names of typic To add a new rule give the commands, ``` -sudo iptables -I INPUT 5 -p tcp --dport 8004 -j ACCEPT +sudo iptables -I INPUT 5 -p tcp --dport 8010 -j ACCEPT sudo service iptables save ``` diff --git a/Documentation/docs/serversetup.md b/Documentation/docs/serversetup.md index 54084474b..d6ba41057 100644 --- a/Documentation/docs/serversetup.md +++ b/Documentation/docs/serversetup.md @@ -1,15 +1,104 @@ -# Setting up the server +# Quick Start -The server code is included in the Ubiq repository. +The server code is included in the Ubiq repository in the `Node` directory. -After checking out the code, run +After checking out the code, run, ``` npm install ``` -in the `Node` directory. The server can then be started. +in the `Node` directory. The server can then be started with, ``` -node app.js -``` \ No newline at end of file +npm start +``` + +This will start a server with the default TCP port - the same one running on Nexus - that Unity can connect to. Continue below if you also need to support Browser Clients. + +# Advanced + +## Supporting Secure WebSockets + +If you are intending to create Browser Clients with Ubiq's JavaScript library, you will need to support Secure WebSockets. + +This is done by providing a certificate for the server. + +The quickest way to do this is to create a self-signed certificate using, e.g. OpenSSL. In the `Node` directory, give the command, + +``` +openssl req -nodes -new -x509 -keyout key.pem -out cert.pem +``` + +If successful, starting the server will look something like: + +``` +Added RoomServer port 8009 +Added RoomServer port 8010 +Added status server on port 8011 +``` + +Self-signed certificates are unlikely to be accepted by default on most browsers. You will need to visit, + +``` +https://localhost:8010 +``` + +And agree to proceed, before that browser will establish Ubiq connections. + +![image](images/64a4c60f-42ec-4ecc-91fd-e02d90bcbd55.png) + +## Using VSCode + +If you would like to run the server in VSCode, open the `Node` Folder in VSCode, and create the following launch configuration, + +``` +{ + "type": "pwa-node", + "request": "launch", + "name": "Launch Server", + "skipFiles": [ + "/**" + ], + "env": {"NODE_OPTIONS": "--loader ts-node/esm"}, + "program": "${workspaceFolder}\\app.ts", + "console": "integratedTerminal" +} +``` + +## Status Module API Keys + +If you want to limit access to the sensitive status module pages/APIs, you need to specify one or more API keys, for example: + +``` +{ + "status":{ + "apikeys": ["bf692145-80b1-40da-ba53-9c9dfdf7a5a7"] + } +} +``` + +You can copy this snippet into a new `config\local.json` file, or add your keys into the existing empty `apikeys` member in `config\default.json`. + + +## Alternatives ways to start the server + +The server can also be started with: + +``` + node --loader ts-node/esm app.ts +``` + +or + +``` + NODE_OPTIONS="--loader ts-node/esm" + node app.ts +``` + +This is because server project is written in [TypeScript](https://www.typescriptlang.org/) and is set up to use the Node [ESM Loaders](https://dev.to/jakobjingleheimer/custom-esm-loaders-who-what-when-where-why-how-4i1o) feature to execute TypeScript (`.ts`) files directly without transpilation. + +This requires the correct loader to be specified, which is done using the `--loader` parameter, either each time Node is started, or through the `NODE_OPTIONS` environment variable. (`npm start` is simply an alias for `node --loader ts-node/esm app.ts`). + + +