From c362a41f06214de28c010ec9edb3c1aa7a204054 Mon Sep 17 00:00:00 2001 From: SebasKoedam Date: Wed, 29 May 2024 13:04:57 +0200 Subject: [PATCH] added infrastructure documentation --- docs/documentation/database/infrastructure.md | 54 ++++-- .../diagrams/.$appDiagram.drawio.bkp | 169 +++++++----------- docs/documentation/diagrams/appDiagram.drawio | 70 ++++---- .../diagrams/assets/.$appDiagramV4.png.bkp | Bin 0 -> 27916 bytes .../diagrams/assets/appDiagramV4.png | Bin 0 -> 27916 bytes 5 files changed, 142 insertions(+), 151 deletions(-) create mode 100644 docs/documentation/diagrams/assets/.$appDiagramV4.png.bkp create mode 100644 docs/documentation/diagrams/assets/appDiagramV4.png diff --git a/docs/documentation/database/infrastructure.md b/docs/documentation/database/infrastructure.md index fc83b22..1b6cbea 100644 --- a/docs/documentation/database/infrastructure.md +++ b/docs/documentation/database/infrastructure.md @@ -1,19 +1,45 @@ # Infrastructure -The infrastructure of the database is composed of the following components: +This document describes the infrastructure of the database and server components of the project. -- User -- Pepper - - Interface - - Robot -- Raspberry Pi - - Database - - MariaDB - - Server - - Apache - - phpMyAdmin - - Node.js +## Components -User interacts with Pepper through the interface. The interface sends the user input to the robot. The robot processes the input (java) and sends the output (xml) back to the interface. The interface displays the output to the user. The Raspberry Pi hosts the server and database. The database stores the data and the server hosts the website. The server runs Apache, phpMyAdmin, and Node.js. The interface makes a request to the server (HTTP GET) to retrieve the data in the database. The server processes the request (HTTP GET) and retrieves (SQL) the data from the database. The interface displays the data to the user. +The database component of the project consists of the following components: + +- Node.js (Server) +- Apache2 (Web Server) +- phpMyAdmin (Database Management Tool) +- MariaDB (Database) + +## Diagrams + +Architecture application diagram of the project. + +![Architecture application](../diagrams/assets/appDiagramV2.png) + +Deyplomment application diagram of the project. + +![Deyplomment application](../diagrams/assets/appDiagramV4.png) + +## Database + +The database component of the project is responsible for storing and managing the data used by the application. The database is implemented using MariaDB. The database is responsible for storing data such as exercises, names, descriptions, images, videos and exercise paths. The database is accessed by the server component of the project to retrieve data. + +## Server + +The server components of the project are responsible for handling requests from the client application and interacting with the database. The server is implemented using Node.js and is responsible for handling requests to retrieve exercises. The server is also responsible for serving the client application to the user. + +The web server component of the project is implemented using Apache2 and is responsible for hosting phpMyAdmin, a database management tool used to interact with the database. + +## Problems/Solutions + +During the setup of the infrastructure, the following problems were encountered. + +### Reverse proxy + +The initial problem is that the Pi has a limeted amount of ports that can be used. This means that the server can only be accessed through port 80. This is a problem because the server is running on port 3000. To solve this problem, a reverse proxy was used to redirect traffic from port 80 to port 3000. This was done by creating a virtual host in the Apache2 configuration file that listens on port 80 and redirects traffic to port 3000. + +When implementing the reverse proxy a problem was encountered where everything on port 80 was being redirected to port 3000. This was a problem because the server was also running on port 80. The initial solution was to remove the reverse proxy from sites-enabled and restart the server. However this caused the reverse proxy to stop working. Eventually it took too long to fix the problem and the reverse proxy was removed. + +Running the server on port 443 was also considered as a solution. At the first sight this dind't seem possible since the access to port 443 is restricted. However, after some research it was found that it is possible to run the server on port 443 by starting the node with sudo. This was the solution that was chosen. -![Application Architecture Diagram](../diagrams/assets/appDiagram.png) \ No newline at end of file diff --git a/docs/documentation/diagrams/.$appDiagram.drawio.bkp b/docs/documentation/diagrams/.$appDiagram.drawio.bkp index 31a34c1..1d420ac 100644 --- a/docs/documentation/diagrams/.$appDiagram.drawio.bkp +++ b/docs/documentation/diagrams/.$appDiagram.drawio.bkp @@ -1,140 +1,99 @@ - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - + - - - - - + + - + + + + + + + + + + + + + + + + - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/documentation/diagrams/appDiagram.drawio b/docs/documentation/diagrams/appDiagram.drawio index 1d420ac..7114ed8 100644 --- a/docs/documentation/diagrams/appDiagram.drawio +++ b/docs/documentation/diagrams/appDiagram.drawio @@ -1,99 +1,105 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + - + - + - + - + - + - + - - + + - + - + - + - - + + - + + + + diff --git a/docs/documentation/diagrams/assets/.$appDiagramV4.png.bkp b/docs/documentation/diagrams/assets/.$appDiagramV4.png.bkp new file mode 100644 index 0000000000000000000000000000000000000000..c46a0d1b7da1a52f64cb712e6a7e0fe857e7a92d GIT binary patch literal 27916 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 Gss8{iIeI1l literal 0 HcmV?d00001 diff --git a/docs/documentation/diagrams/assets/appDiagramV4.png b/docs/documentation/diagrams/assets/appDiagramV4.png new file mode 100644 index 0000000000000000000000000000000000000000..b432d5204605fa3b30887fc41b740ea577b82011 GIT binary patch literal 27916 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%0AeQAs?JO6H-2<3+9NdgFu1Ou?$ZN539;(? zWoiRlW}>U!)=!I+BinCwl{k1QN6k!6>=a9&B_C!Xjc&oICpv{fU}GNlkiWa zvKujnz;UnTp7X}O$0nW_$L&?GL4F=ieZ6fULf55FBMxfeHbhfR1l%&P3ImrTP?(SM*802gHkZ=dqefsQMs69lkw?j2k-_0bb3S zFmtQ!e@64c^93VJzrDHr+Pj&?`CQjNShEME`yq>Eo;8SQL z9S`R9>W_<92_iMv&WSvkM<#PMVbg=xbTj(F8kY6PFGL*9-dSXI8U)x;nzV|m25^_MSasQTng51&WaB^(5tDEVH7%+cmJNIO1p;# z#gI{u1tNthEci246iZwz(011kqA3MrW(y=2CrMm|$E_Z8MX0R2BA4{IOC>%0q-BAF zF&m%jSXAT$gPu#rCs10n5gUz8%9K*UpnPGdB8-^;zYv64;Or(weA{`_#D74k#Vw$^E=o@ zpB<=sdGgi$>Mdi)qmnBA@@@BJAZ&l14uql{_=#_fx*hNn6!hU~yep!t@@>ne93hTH_^DmrH3|GE`m_-mJH zXblk`-|o42&-HJWXKYRSFThTiFa<%MR>*;vV2g?gNx#M3hTY=vNc&ZMDh%|9r|fFX zORz^bIx_l87cCN@qu&vb<+6(eRwmCdg5qviE0;nGdT^EyG|BeoOUWBDvX73*hCPNS z=XF@TQ@WrEi=eq&_walYkT%TG!MEq#%oHimvV~FOwIb5{RwO%@+j}C1DU5ATPXNfiOJ13&{|{VL={{ z^X%v7W9$KhUb{SVrZJJa{&K`wc|GU`XS_WW`^Bj$zJ}!~@&9B1kQES=QZ5^C6Z@EkQIR)2*;DzPN zg*OJFwNHqg3E5^ffZ%Iis>&>UnE-4g-;0{JVP9{B&FQmOZQa7_unc_{tM7!@|K5EN zQJ8`yD|ln2_Yb`c9%=-aBR*PH9J={8)dl@w0f=*9Sl^*@=)MOmQjY*GRtTE_q!qvJ zy&h0U`2B@I#BEWGqP821Jmgb{!F+!@fxz~h{Hq9>YC%71Ek&{ys*j>K!6w>MNZ#Q9 z!DQO9^0ekBVlOzUJWs(B^Py*EtuiyeK?cu!`p1jcx&c@W{8&QoSio9zF2Ck6DB(am zGvt154@bLV1r0A+Z#(@PVI{_Q*Onia2+jAf88hs5y{ip5UEP_8)=06cjO@BG{ EAF29!761SM literal 0 HcmV?d00001