From ea6389885414f476ead739e4e33389fc455a7238 Mon Sep 17 00:00:00 2001 From: Felix Albrigtsen Date: Thu, 28 Apr 2022 00:21:36 +0200 Subject: [PATCH] Upload installation manual --- documentation/InstallationManual.md | 120 +++++++++++++++++++++++++++ documentation/InstallationManual.pdf | Bin 0 -> 31465 bytes src/server/package.json | 3 +- 3 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 documentation/InstallationManual.md create mode 100644 documentation/InstallationManual.pdf diff --git a/documentation/InstallationManual.md b/documentation/InstallationManual.md new file mode 100644 index 0000000..3f27be8 --- /dev/null +++ b/documentation/InstallationManual.md @@ -0,0 +1,120 @@ +# Installing Asura Tournament Manager +This is guide describes the process of installing Asura Tournament Manager on your own server. At the time of writing, you can reach our production server at [https://asura.feal.no/](https://asura.feal.no/). + +- [Installing Asura Tournament Manager](#installing-asura-tournament-manager) + - [Before installing](#before-installing) + - [Download the source](#download-the-source) + - [Configure the client](#configure-the-client) + - [Install dependencies](#install-dependencies) + - [Configure environment variables](#configure-environment-variables) + - [Build the client](#build-the-client) + - [Configure the server](#configure-the-server) + - [Install dependencies](#install-dependencies-1) + - [Configure environment variables](#configure-environment-variables-1) + - [Initialize the database](#initialize-the-database) + - [Check the list of requirements](#check-the-list-of-requirements) + - [Start the server](#start-the-server) + +## Before installing +Before installing Asura Tournament Manager, you need the following: +- A suitable server to host the software. There are many ways to deploy the server, for example + - Cloud hosting provider + - Virtual Machine + - Dedicated server +- A domain name to reach the server over the internet +- A MySQL database to store persistent data + - This can be either on the same server as the application, or on a separate database server +- A Google account to sign in to the application +- A Google API key for authenticating users + - Acquiring this is both simple and free, and is described in the [Google API documentation](https://developers.google.com/identity/gsi/web/guides/get-google-api-clientid) +- [Recommended] A reverse proxy. Software proxies like [Nginx](https://www.nginx.com/) will greatly improve the performance, reliability and security of the application. + - The tournament manager does not handle SSL/HTTPS by itself + - The server is susceptible to DoS attacks + - Although the application logs requests to the console, they are not saved on disk + - Setting up a reverse proxy is not required, but it is *strongly* recommended. Configuration is out of scope of this manual, but it can be found in the [Nginx documentation](https://nginx.org/en/docs/http/ngx_http_proxy_module.html) + +## Download the source +Before you can run the tournament system, you must download the source code. At the time of writing, it is available on NTNU-IDI Gitlab. + +Download the entire repository to your machine: +```bash +git clone git@gitlab.stud.idi.ntnu.no:felixalb/dcst1008-2022-group1.git +``` + +## Configure the client +The client is a web application that runs in the clients browser. After this step is finished, the entire build consists of a single html file, a few javascript files and some static assets. + +### Install dependencies +```bash +cd src/client +npm install +``` +This step fetches all the required libraries into the node_modules folder. +### Configure environment variables +```bash +cp dotenv-template .env +nano .env +``` +Edit the `.env`-file containing a few simple settings for the client, using nano or any other editor. Only the two first lines have to be changed, and just requires the server URL. + +### Build the client +```bash +npm run build +``` +This step will build the client, optimize it and package it into just a few files. The resulting files are placed in the `build` folder. You are now done with the client and everything else, like serving the build files, are handled by the server. + + + +## Configure the server +The server is a node application that both serves the client files and handles the database and tournament logic. The installation process is similar to the client. + +### Install dependencies +```bash +cd src/server +npm install +``` +### Configure environment variables +```bash +cp dotenv-template .env +nano .env +``` +Edit the `.env`-file containing all the server options. This includes: +- The server URL +- The MySQL database credentials +- The Google API credentials +- A cookie secret. This can be any random string of text, as long as it's secret. +- The remaining options should be left as default + +### Initialize the database +To create the required tables, start with an empty database. + +This can be done with a mysql cli utility: +```bash +mysql -h mysql.stud.ntnu.no -u felixalb_sysut -p felixalb_asura < ./management/initDB.sql +``` +Or by pasting the content of `src/server/management/initDB.sql` into another MySQL manager like PHPMyAdmin. + +After initializing the empty tables, you will have to insert your own email address. Insert email=youraddress and isManager=1 into the `users` table to register your user. All other users can be added in the graphical user interface. + +### Check the list of requirements +Read the [list of preparations above](#before-installing) to see all the requirements. +When you have configured everything, you are ready to start the server. + +## Start the server +When all the steps above have been completed, you can start the server with: + +In `src/server`: +```bash +npm start +``` +You should see a message like this: +``` +> tournament-server@1.0.0 start +> node index.js + +Listening on port 3000 +``` + +Access logs, error messages and other useful messages will be printed to the screen. The database connection is handled automatically, and will reconnect if the connection is lost. + +The server can be stopped by pressing Ctrl+C, as nodejs will handle terminate the process cleanly, freeing its resources. \ No newline at end of file diff --git a/documentation/InstallationManual.pdf b/documentation/InstallationManual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a562586fc820b651fb2e5051b97392a931f5ccf6 GIT binary patch literal 31465 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 literal 0 HcmV?d00001 diff --git a/src/server/package.json b/src/server/package.json index f91af11..0619652 100644 --- a/src/server/package.json +++ b/src/server/package.json @@ -4,8 +4,7 @@ "description": "DCST1008 Project - Server - Asura Tournament Management System", "main": "index.js", "scripts": { - "start": "nodemon index.js", - "test": "echo \"Error: no test specified\" && exit 1", + "start": "node index.js", "initdb": "mysql -h mysql.stud.ntnu.no -u felixalb_sysut -p felixalb_asura < ./management/initDB.sql" }, "author": "felixalb, kristoju, jonajha, krisleri",