From ed4f7865f0449f2c5733c62d9657152b118aaad5 Mon Sep 17 00:00:00 2001 From: juropo <140176002+juropo@users.noreply.github.com> Date: Wed, 18 Dec 2024 17:42:43 +0200 Subject: [PATCH] Rahti documentation update (#200) * Added instructions for dealing permissions errors on JYU windows * Added a link to the installation guide for non-Poetry virtual envs * Updated the Rahti hosting guide --- docs/howtoguides/images/buildconfig.png | Bin 0 -> 9118 bytes docs/howtoguides/images/buildstrategy.png | Bin 0 -> 8510 bytes docs/howtoguides/installing.md | 14 +++ docs/howtoguides/kubernetes.md | 131 +++++++++++++--------- docs/tutorials/contributing.md | 4 +- 5 files changed, 97 insertions(+), 52 deletions(-) create mode 100644 docs/howtoguides/images/buildconfig.png create mode 100644 docs/howtoguides/images/buildstrategy.png diff --git a/docs/howtoguides/images/buildconfig.png b/docs/howtoguides/images/buildconfig.png new file mode 100644 index 0000000000000000000000000000000000000000..9610517d6a0516c7d25a49d32faed5d30425c916 GIT binary patch literal 9118 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 literal 0 HcmV?d00001 diff --git a/docs/howtoguides/installing.md b/docs/howtoguides/installing.md index 5283cb4a..3bb24ad3 100644 --- a/docs/howtoguides/installing.md +++ b/docs/howtoguides/installing.md @@ -116,6 +116,20 @@ After installing poetry, we can use the following command to install DESDEO's de poetry install -E "standard" ``` +!!! Note + + If you run into some permission errors while trying to install the dependencies (and you will on JYU managed Windows machine), + this is likely because you don't have the necessary permissions for the folder Poetry is using for caching. This can be fixed + by changing that folder by adjusting the associated environment variable: POETRY_CACHE_DIR. + + If you are using conda to manage your virtual environments, you could for example put it in the folder associated with that + environment. On a JYU Windows machine the commands you would use are the following (assuming your env is called myenv) + ```bash + conda env config vars set POETRY_CACHE_DIR=C:/devel/anaconda3/envs/myenv/poetry-cache + conda activate myenv + ``` + You need to reactivate the env to make sure that the changes to the environment variables are also applied for the current session. + !!! Note If the `polars package complains about CPU architecture on your system when trying to run diff --git a/docs/howtoguides/kubernetes.md b/docs/howtoguides/kubernetes.md index ee12b92c..17897fd4 100644 --- a/docs/howtoguides/kubernetes.md +++ b/docs/howtoguides/kubernetes.md @@ -16,27 +16,29 @@ Once you have your project set up, you can start adding resources to your projec To add a new resource i.e. piece of your web application, navigate to the `+Add` page. There, you want to choose `Import from Git` option. -First, you will need to input a Github adress to the repository that contains your DESDEO webapi code, for example `https://github.com/industrial-optimization-group/desdeo-webapi`. You are unlikely to be using the main branch of the Git for your deployment, so click `Show advanced Git options` and add the name of your desired branch under `Git reference`. You probably don't need to touch any of the other advanced options. +First, you will need to input a Github adress to the repository that contains your DESDEO webapi code, for example `https://github.com/industrial-optimization-group/DESDEO`. You are unlikely to be using the main branch of the Git for your deployment, so click `Show advanced Git options` and add the name of your desired branch under `Git reference`. You probably don't need to touch any of the other advanced options. -At this point, the system should have automatically figured out that you want to host a Python application and chosen you an appropriate `Builder Image version`. But if not, you can set it up manually. +At this point, the system should have automatically figured out that you want to host a Python application and chosen you an appropriate `Builder Image version`. But if not, you can set it up manually. +!!! Note + At the time of writing this, Rahti does not support Python versions newer than 3.9, and DESDEO2 uses Python 3.12. +If you need to use a builder image that is not available on Rahti or need to customize the build image to add support for different solvers, for example, just use Python 3.9 to create the build configuration, and then change it later to use a [different build image](#adding-a-custom-build-image). Under the **General** section, you can choose the name of your application, which does not matter much, because it will not be visible outside the administrative interface, and the `Name` of your application component, which is kind of important, because it will be part of any URL pointing to that component. For the webapi it does not matter too much what you choose, but put some thought into what you name the webui, because your users are connecting to that part and can see the name. -Under **Build** section you may want to adjust the advanced Build options, because that is the place to set up Environment variables that are present both during the build and while the application is running. This is a good way to tell your DESDEO webapi, for example, where to find the database it is supposed to connect to. At the time of writing this, neither the master branch of desdeo-webapi nor the API found in DESDEO2 offer any automatic support reading application configurations from environmental variables. Hopefully this will change in the future. - -If you want to add some python code that uses environmental variables, you can do it like this: -```python -import os +Under **Build** section you may want to adjust the advanced Build options, because that is the place to set up Environment variables that are present both during the build and while the application is running. This is a good way to tell your DESDEO webapi, for example, where to find the database it is supposed to connect to. You can either list the environment variables directly here or use a secret on Kubernetes. -db_user = os.environ.get("POSTGRES_USER") -db_password = os.environ.get("POSTGRES_PASSWORD") -db_host = os.environ.get("POSTGRES_HOST") -db_port = os.environ.get("POSTGRES_PORT") -db_name = os.environ.get("POSTGRES_DB") +DESDEO2 uses the following Environment variables to get information about the database and the webui: +``` +POSTGRES_USER # This is the username for the database +POSTGRES_PASSWORD # This is the password for the database +POSTGRES_HOST # This is the host of the database +POSTGRES_PORT # This is the port used by the host +POSTGRES_DB # This is the name of the database +CORS_ORIGINS # This is a list of potential URLs where the webui might be hosted ``` -The above code reads five environmental variables whose names start with `POSTGRES_` and assigns them to python variables to be used later. +The `CORS_ORIGINS` variable is used to list the web sites for [Cross-origin resource sharing](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing). It should list all the URLs where you might want to host your frontend. It should be in the format of a list of JSON string. For example, the default value if the environment variable is not set is `["http://localhost", "http://localhost:8080", "http://localhost:5173"]` -You can also use the environmental variables you have defined here in any of your [S2I](#source-to-image-s2i) scripts. It is possible to also define environmental variables in your S2I scripts, but because they are uploaded on Github with your code they are not suited for storing things like database usernames and passwords. +You can also define other environment variables here or in your [S2I](#source-to-image-s2i) scripts. Your S2I scripts are not suited for storing sensitive information like database usernames and passwords, because they are typically uploaded on Github with your code. You will likely not need to touch anything under **Deploy** or **Advanced Options** for now. When you are done with your adjustments, click `Create` and the system will attempt to download your source code from the specified location, build a docker image, and finally run it. @@ -54,18 +56,19 @@ The way Rahti transforms the code on Github to a web application is by using [So You can modify how S2I builds and runs your code by changing these scripts. -For running a python app like desdeo-webapi, it is unlikely you will need to change the `assemble` and `run` scripts. You can do most of the necessary adjustments through the [environment variables used by s2i-python-container](https://github.com/sclorg/s2i-python-container/blob/master/3.9/README.md#environment-variables). Below is an example of `.s2i/environment` file used to run one version of desdeo-webapi +DESDEO2 uses a custom `assemble` script for installing all the necessary dependencies and the default `run` script. It is unlikely you need to change these. You can do most of the necessary adjustments through the [environment variables used by s2i-python-container](https://github.com/sclorg/s2i-python-container/blob/master/3.9/README.md#environment-variables). Below is an example of `.s2i/environment` file used to run the current version of desdeo-webapi at thime of writing this guide ```sh UPGRADE_PIP_TO_LATEST=1 -DISABLE_PYPROJECT_TOML_PROCESSING=1 -APP_MODULE=app:app -GUNICORN_CMD_ARGS=--bind=0.0.0.0:8080 --workers=2 --access-logfile=- +APP_MODULE=desdeo.api.app:app +GUNICORN_CMD_ARGS=--bind=0.0.0.0:8080 --workers=2 --access-logfile=- --worker-class uvicorn.workers.UvicornWorker +DESDEO_INSTALL=.[standard,api,server] ``` -The first line tells that `pip` should be upgraded to the latest version. The second line tells that `pyproject.toml` should not be processed. `APP_MODULE` denotes the app that [gunicorn](http://docs.gunicorn.org/en/latest/run.html#gunicorn) should run. `GUNICORN_CMD_ARGS` lists the other arguments given to gunicorn i.e. the server should be run for all ip addresses at port 8080, the number of workers should be 2 (the default is way too many), and the logs should go to stdout. The end result here is that the code in app:app will be run on a Gunicorn WSGI server using the given arguments. +The first line tells that `pip` should be upgraded to the latest version. `APP_MODULE` denotes the app that [gunicorn](http://docs.gunicorn.org/en/latest/run.html#gunicorn) should run. `GUNICORN_CMD_ARGS` lists the other arguments given to gunicorn i.e. the server should be run for all ip addresses at port 8080, the number of workers should be 2 (the default is way too many), the logs should go to stdout, and most importantly, the workers-class should use uvicorn workers. The end result here is that the code in app:app will be run on a Gunicorn ASGI server using the given arguments. `DESDEO_INSTALL` is used to give additional parameters in the `pip install $DESDEO_INSTALL` command in the `asseble` script. -To run [desdeo-webui](#desdeo-webui), however, you will almost certainly need to adjust the `assemble` and `run` scripts. This is because [s2i-nodejs-container](https://github.com/sclorg/s2i-nodejs-container/blob/master/18/README.md) does not include as many configuration options through environment variables. The changes required are not very complicated however. Your modified `assemble` and `run` scripts go to `.s2i/bin/` folder. Below are files used to run one version of desdeo-webui. First the `assemble` script +[Desdeo-webui](#desdeo-webui) has custom `assemble` and `run` scripts included. This is because [s2i-nodejs-container](https://github.com/sclorg/s2i-nodejs-container/blob/master/18/README.md) does not include as many configuration options through environment variables. The custom scripts are not very complicated however. If you need to change them, the `assemble` and `run` scripts are found in the `.s2i/bin/` folder. Below are files used to run current version of desdeo-webui (at the time of writing this). First the `assemble` script ```sh /usr/libexec/s2i/assemble +npm install -g npm@10.8.2 npm run build exit ``` @@ -73,45 +76,73 @@ It first runs the default nodejs assemble script found at `/usr/libexec/s2i/asse ```sh node build ``` -It just runs the code as a standalone node server. For this to work, `svelte.config.js` also needs to be adjusted accordingly to use the node adapter. It is unlikely look like this for most versions of desdeo-webui found on Github. -```js -import preprocess from "svelte-preprocess"; -import adapter from "@sveltejs/adapter-node"; -import { vitePreprocess } from "@sveltejs/kit/vite"; - -/** @type {import("@sveltejs/kit").Config} */ -const config = { - // See https://kit.svelte.dev/docs/integrations#preprocessors - preprocess: [ - vitePreprocess(), - preprocess({ - postcss: true, - }), - ], - kit: { - // See https://kit.svelte.dev/docs/adapters - adapter: adapter(), - }, -}; - -export default config; +It just runs the code as a standalone node server. + +## Adding a custom build image + +At the time of writing this, building DESDEO2 webapi will fail on Rahti, because Python version 3.12 is not available. To get around this, you will need a custom build image. If you just want something that supports Python 3.12, you can for example use `ubi8/python-312` Docker image from `registry.access.redhat.com/ubi8/python-312`. To tell Rahti to use this image to build, you need to go to your build config, which you can find, for example, on the right hand side of the screen when you have selected the app. + +![The build config](images/buildconfig.png) + +Then you need to navigate to the **YAML** section and find the `spec.strategy.sourceStrategy`, which should have defaulted to what you see below if you created your app as a Python 3.9 application. + +![The build strategy](images/buildstrategy.png) + +You will want to update your `sourceStrategy` to +```yaml +sourceStrategy: + from: + kind: DockerImage + name: registry.access.redhat.com/ubi8/python-312 +``` +### Creating your own image + +However, if you also need your build image to do something extra, like installing additional solvers, you need to create your own build image. +To be able to do this, you will need to install [Docker](https://www.docker.com/) (and you might find use for [openshift client](https://console-openshift-console.apps.2.rahti.csc.fi/command-line-tools). + +If you just want to add the COIN-OR solvers and/or Gurobipy licence, you can use the `desdeo-s2i-buildimage.Dockerfile` found in the root of DESDEO2 branch. You can also use that file as an example and create your own dockerfile that does exactly what you need, or you can modify it. How to do that is beyond this guide. Ask your favorite AI assistant for help. + +To build an image from your dockerfile, use +```sh +docker build -t build-image -f desdeo-s2i-buildimage.Dockerfile . +``` + +You will then need to push that image somewhere Rahti can access it. I recommend using Rahti's image registry. Here's a [guide](https://docs.csc.fi/cloud/rahti2/images/Using_Rahti_2_integrated_registry/) on how to do that. + +Once your builder image is in Rahti's image registry, you can use the image in your `sourceStrategy` +```yaml +sourceStrategy: + from: + kind: ImageStreamTag + name: 'build-image:latest' ``` -For more information, see the [Svelte documentation](https://kit.svelte.dev/docs/adapter-node). ## DESDEO webui The process of adding DESDEO webui to Rahti is very similar to the one detailed above with [DESDEO webapi](#desdeo-webapi), as long as you have done all the necessary preparations [relating to S2I](#source-to-image-s2i). First you go to the `+Add` page, then you choose `Import from Git` option. You add your Github link and write the correct branch under Advanced Git options. -The system should automatically figure out you are adding a Node application. You can change the builder image version if you need a specific version of Node for example. +The system should automatically figure out you are adding a Node application. You can change the builder image version if you need a specific version of Node for example. At the time of writing this, you don't need a custom build image for the webui. Under **General** you can choose your Application, which does not matter much, but you might want to use the same one as for the webapi. You can also choose the `Name` for your application, which is somewhat important, because it will be part of the address your users will use to access the web application. -Under **Build** you could add environment variables for build and runtime, but they aren't used for anything right now. +Under **Build** you could add environment variables for build and runtime. At the moment there is one important environment variable you need to set, `VITE_DESDEO_API_SERVER` which should point to the URL of you api server. For example +``` +VITE_DESDEO_API_SERVER = https://api-my-desdeo-app.2.rahtiapp.fi +``` It is unlikely you will need to touch anything under **Deploy** or **Advanced Options**. Once you click `Create` the system should download your code, build it, and run it. +!!! Note + You are likely to encounter error `exit status 137` when building your app. This is because the build node ran out of memory. Luckily, this is not difficult to fix. You will just need to open the **YAML** of your build config and change `spec.resources`. 2000 Mi should be more than enough. + ```yaml + resources: + limits: + memory: 2000Mi + ``` + + ## PostgreSQL database DESDEO webapi uses a PostgreSQL to store information about users and problems. That is why you are also going to need PostgreSQL database. If you are working on Rahti you have at least two reasonably good options for getting one running. The first one is [Pukki DBaaS](https://pukki.dbaas.csc.fi/) provided by CSC and the second one is hosting one on Rahti by choosing a PostgreSQL image from the developer catalog. @@ -120,14 +151,12 @@ If you want to use Pukki, you first need to [add the Pukki service to your compu If you are hosting the database on Rahti, you just select the image and then input the initial settings similarly to what you would on Pukki. -For your web application to work, webapi also needs to know how to access the database. There is no way to pass that information to the default version of desdeo-webapi. Hopefully this will change in the future. For now, you can for example modify `app.py` to read environmental variables the way shown in [DESDEO webapi](#desdeo-webapi). You can store the address and login details as a secret in Rahti and then pass them on to builds and podds through the resource configuration. - -Once your webapi knows how to access the database, you will need to initialize the database to create user accounts and passwords (and possibly other things). To do this, the easiest way is to go to the Rahti web interface find a pod running your desdeo-webapi. Click the pod, and then select the **Terminal** tab. This is effectively a terminal on a virtual computer running your webapi. Here you can run, for example, `add_exp_users.py --username user --N 1` command to add one user named user1, or some other database setup script you have created. +For your web application to work, webapi also needs to know how to access the database. Make sure to set up the environmental variables the way shown in [DESDEO webapi](#desdeo-webapi). You can store the address and login details as a secret in Rahti and then pass them on to builds and pods through the resource configuration. -The users added alongside their passwords will be also stored in a CSV file named `users_and_pass.csv`. The pod you have accessed is only temporary, so you'll need to make sure to save the usernames and passwords somewhere else as well. You can print them in the terminal with command `cat ./users_and_pass.csv` and then copy them from there. +Once your webapi knows how to access the database, you will need to initialize the database to create user accounts and passwords (and possibly other things). The easiest way is to connect to the database from your own computer. To do this, you will first need to add your IP to the database access list. Then set up environmental variables associated with the database as you would for the [DESDEO webapi](#desdeo-webapi). You can the run the script `desdeo/api/db_init.py` or create a custom script for your project that will set up the database the way you want. ## Troubleshooting -If you manage get webapi and webui running, but you are unable to get past the login page or do much else, your webui probably does not know where the webapi server is running. The address is hardcoded in `desdeo-webui/src/lib/api.ts`, so you will need to change that to point to the correct address. Hopefully, in the future this will work differently. +If you manage get webapi and webui running, but you are unable to get past the login page or do much else, your webui probably does not know where the webapi server is running. The address is supposed to be in the environment variable called `VITE_DESDEO_API_SERVER`. -If you are encountering `Login attempt failed. Please check your username and password.` errors in the login screen, and you think you have the correct username and password, it is likely that webapi is not connecting to the [database](#postgresql-database) correctly or you have not initialized the database correctly. +If you are encountering `Login attempt failed. Please check your username and password.` errors in the login screen, and you think you have the correct username and password, it is likely that webapi is not connecting to the [database](#postgresql-database) correctly or you have not initialized the database correctly. Check that you have set the environment variables for the api. diff --git a/docs/tutorials/contributing.md b/docs/tutorials/contributing.md index 37422356..bb5f581a 100644 --- a/docs/tutorials/contributing.md +++ b/docs/tutorials/contributing.md @@ -198,7 +198,9 @@ We are now in a position to setup our virtual environment. There are many ways to setup a virtual environment. Here, we will be utilizing poetry (c.f., section [Required software](#required-software)) -for the task. First, we should ensure +for the task. (If you want to some other virtual environment system, +see the [DESDEO installation guide](/howtoguides/installing/#setting-up-a-virtual-environment) +for hints.) First, we should ensure that we are utilizing a correct version of Python ```bash