From a4c834d56fcbad50bd616fd32d55c082bb23053a Mon Sep 17 00:00:00 2001 From: Burgy Benjamin Date: Wed, 13 Dec 2023 21:09:02 +0100 Subject: [PATCH] Try to improve the documentation. --- README.md | 27 ++++++++++++++++++++++++--- diagram.png | Bin 0 -> 44241 bytes 2 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 diagram.png diff --git a/README.md b/README.md index d4421ce..d06445b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # Ksuite-middleware -Project providing a single endpoint with a single API configuration to access to many resources from a KSuite environment. +Project providing a single endpoint to access to many resources from a KSuite environment. Currently the middleware supports only kDrive files and the calendar events. + +![](diagram.png) ## Kdrive @@ -47,7 +49,9 @@ services: - 4000:4000 ``` -## Running with Docker (recommended way) +## Installation + +### Running with [Docker](https://hub.docker.com/repository/docker/minidfx/ksuite-middleware) (recommended way) With Docker, running the application is a breeze. Simply update the environment variables SECRET_KEY_BASE, PHX_HOST, KDRIVE_ID, and KSUITE_API_TOKEN. Then, run it to kickstart the application. @@ -55,6 +59,23 @@ With Docker, running the application is a breeze. Simply update the environment docker-compose up ``` +### Clone this project and run it + +1. Build it + +```bash +export MIX_ENV=prod +mix deps.get && mix deps.compile && mix release +``` + +2. Set the environment variables + +3. Run it! + +```bash +_build/prod/rel/ksuite_middleware/bin/ksuite_middleware start +``` + ## Security considerations -This application doesn't offer any security layers or authentication. I suggest using a [proxy](https://docs.linuxserver.io/general/swag/) for TLS termination and authentication in front of the container. Make sure to protect this resource by yourself. \ No newline at end of file +This application doesn't offer any security layers or authentication. Use this middleware behind a proxy like [swag](https://docs.linuxserver.io/general/swag/), [traefik](https://traefik.io/traefik) or any equivalent proxy. \ No newline at end of file diff --git a/diagram.png b/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..7f95bb8db4aee581dc7f251c48c787b9b0e36e53 GIT binary patch literal 44241 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 ek{y?W|NK9GW@dxDWBe=zAn