|
1 |
| -# Onyxia API |
2 |
| - |
3 |
| -This is the server part of the Onyxia datalab, it interacts with your container orchestrator (Kubernetes) to deploy users services. |
4 |
| -Deployable services are listed and configured inside catalogs. |
5 |
| -Default catalogs are from InseeFrlab : [Interactive services](https://inseefrlab.github.io/helm-charts-interactive-services), [Databases](https://inseefrlab.github.io/helm-charts-databases), [Automation](https://inseefrlab.github.io/helm-charts-automation) but more catalogs (including your own) can be added. |
6 |
| - |
7 |
| -## Quick start |
8 |
| - |
9 |
| -Onyxia-api is usually run as a component within the Onyxia stack. See [Onyxia helm chart](https://github.com/InseeFrLab/onyxia/tree/main/helm-chart) and [docs.onyxia.sh](https://docs.onyxia.sh/) for installation instruction. |
10 |
| - |
11 |
| -## Running Onyxia-API standalone |
12 |
| - |
13 |
| -### Using docker |
14 |
| - |
15 |
| -``` |
16 |
| -docker run -p 8080:8080 inseefrlab/onyxia-api |
17 |
| -``` |
18 |
| - |
19 |
| -### Using Java / maven (from sources) |
20 |
| - |
21 |
| -``` |
22 |
| -git clone https://github.com/InseeFrLab/onyxia-api.git |
23 |
| -cd onyxia-api |
24 |
| -mvn spring-boot:run |
25 |
| -``` |
26 |
| - |
27 |
| -## Usage |
28 |
| - |
29 |
| -Once Onyxia is started, browse to http://localhost:8080 to get started with the OpenAPI documentation. |
30 |
| - |
31 |
| -## Contributing |
32 |
| - |
33 |
| -Contributions are welcome. |
34 |
| -Make sure to conform to Android Open Source Project code style : `mvn spotless:apply` can enforce it. |
35 |
| - |
36 |
| -## Configuration |
37 |
| - |
38 |
| -Main configuration file is [onyxia-api/src/main/resources/application.properties](onyxia-api/src/main/resources/application.properties). |
39 |
| -Each variable can be overridden using environment variables. |
40 |
| - |
41 |
| -### Regions configuration : |
42 |
| -| Key | Default | Description | |
43 |
| -| --------------------- | ------- | ------------------------------------------------------------------ | |
44 |
| -| `regions` | [onyxia-api/src/main/resources/regions.json](onyxia-api/src/main/resources/regions.json) | List of regions, see [Region configuration](docs/region-configuration.md) | |
45 |
| - |
46 |
| -### Authentication configuration |
47 |
| -| Key | Default | Description | |
48 |
| -| --------------------- | ------- | ------------------------------------------------------------------ | |
49 |
| -| `authentication.mode` | `none` | Supported modes are : `none`, `openidconnect` (must be configured) | |
50 |
| - |
51 |
| -### Open id configuration (used when `authentication.mode`=`openidconnect`) |
52 |
| -You have to specify `oidc.issuer-uri`. `oidc.jwk-uri` is optional. |
53 |
| -Common used configurations : |
54 |
| -| Provider | `oidc.issuer-uri` | `oidc.jwk-uri` | |
55 |
| -|---|---|---| |
56 |
| -| Keycloak | `https://keycloak.example.com/auth/realms/REALMNAME` | | |
57 |
| -| Google | https://accounts.google.com | `https://www.googleapis.com/oauth2/v3/certs` | |
58 |
| -| Microsoft | `https://login.microsoftonline.com/TENANTID/v2.0` | | |
59 |
| - |
60 |
| -Configurable properties : |
61 |
| -| Key | Default | Description | |
62 |
| -| -------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------- | |
63 |
| -| `oidc.issuer-uri` | | Issuer URI, should be the same as the `iss` field of the tokens | |
64 |
| -| `oidc.jwk-uri` | | JWK URI, useful when auto discovery is not available or when `iss` is not consistent across tokens (e.g [Google](https://stackoverflow.com/questions/38618826/can-i-get-a-consistent-iss-value-for-a-google-openidconnect-id-token)) | |
65 |
| -| `oidc.clientID` | | Client id to be used by Onyxia web application | |
66 |
| -| `oidc.audience` | | Optional : audience to validate. Must be the same as the token's `aud` field | |
67 |
| -| `oidc.username-claim` | `preferred_username` | Claim to be used as user id. Must conform to [RFC 1123](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-label-names) | |
68 |
| -| `oidc.groups-claim` | `groups` | Claim to be used as list of user groups. | |
69 |
| - |
70 |
| -### Security configuration : |
71 |
| -| Key | Default | Description | |
72 |
| -| --------------------- | ------- | ------------------------------------------------------------------ | |
73 |
| -| `security.cors.allowed_origins` | | To indicate which origins are allowed by [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) | |
74 |
| - |
75 |
| -### Catalogs configuration : |
76 |
| - |
77 |
| -| Key | Default | Description | |
78 |
| -| --------------------- | ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
79 |
| -| `catalogs` | see [onyxia-api/src/main/resources/catalogs.json](onyxia-api/src/main/resources/catalogs.json) | List of catalogs. Each catalog can be of type `universe` or `helm`. Mixing is supported. If there is no region of corresponding type then the catalog will be ignored | |
80 |
| -| `catalogs.refresh.ms` | `300000` (5 minutes) | The rate at which the catalogs should be refreshed. `<= 0` means no refreshs after initial loading | |
81 |
| - |
82 |
| -### HTTP configuration |
83 |
| -| Key | Default | Description | |
84 |
| -| --------------------- | ------- | ------------------------------------------------------------------ | |
85 |
| -| `http.proxyHost` | | Proxy hostname (e.g : proxy.example.com) | |
86 |
| -| `http.proxyPort` | 80 for `HTTP`, 443 for `HTTPS` | Proxy port | |
87 |
| -| `http.noProxy` | | Hosts that should not use the proxy (e.g : `localhost,host.example.com`) | |
88 |
| -| `http.proxyUsername` | | Username if the proxy requires authentication | |
89 |
| -| `http.proxyPassword` | | Password if the proxy requires authentication | |
90 |
| - |
91 |
| -### Other configurations |
92 |
| -| Key | Default | Description | |
93 |
| -| --------------------- | ------- | ------------------------------------------------------------------ | |
94 |
| -| `springdoc.swagger-ui.path` | `/` | Open API (swagger) UI path | |
95 |
| -| `springdoc.swagger-ui.oauth.clientId` | `` | clientid used by swagger to authenticate the user, in general the same which is used by onyxia-ui is ok. | |
96 |
| - |
97 |
| -## Onyxia API dependency to Helm |
98 |
| - |
99 |
| -Onyxia-API makes system calls to `helm` using the [helm-wrapper](helm-wrapper) Java library. |
100 |
| -`helm` is bundled in the `Onyxia API` Docker image, see current version bundled here : [Dockerfile](onyxia-api/Dockerfile). |
101 |
| -If running `Onyxia API` locally you need to have `helm` available in the `PATH`. |
102 |
| - |
103 |
| -## Onyxia Helm format extension |
104 |
| - |
105 |
| -Onyxia's catalogs are based on the Helm chart format and especially the `values.schema.json` (see https://helm.sh/docs/topics/charts/#schema-files) file used to populate the personalization tabs displayed by the UI. |
106 |
| -Onyxia is **fully interoperable** with the Helm chart format which means you can use any helm chart repository as a onyxia catalog. But you probably want to use one that includes `values.schema.json` files (those files are optional in helm). |
107 |
| -Onyxia extends this format to enhance it and provide more customization tools in the UI. |
108 |
| - |
| 1 | +# Onyxia API |
| 2 | + |
| 3 | +This is the server part of the Onyxia datalab, it interacts with your container orchestrator (Kubernetes) to deploy users services. |
| 4 | +Deployable services are listed and configured inside catalogs. |
| 5 | +Default catalogs are from InseeFrlab : [Interactive services](https://inseefrlab.github.io/helm-charts-interactive-services), [Databases](https://inseefrlab.github.io/helm-charts-databases), [Automation](https://inseefrlab.github.io/helm-charts-automation) but more catalogs (including your own) can be added. |
| 6 | + |
| 7 | +## Quick start |
| 8 | + |
| 9 | +Onyxia-api is usually run as a component within the Onyxia stack. See [Onyxia helm chart](https://github.com/InseeFrLab/onyxia/tree/main/helm-chart) and [docs.onyxia.sh](https://docs.onyxia.sh/) for installation instruction. |
| 10 | + |
| 11 | +## Running Onyxia-API standalone |
| 12 | + |
| 13 | +### Using docker |
| 14 | + |
| 15 | +``` |
| 16 | +docker run -p 8080:8080 inseefrlab/onyxia-api |
| 17 | +``` |
| 18 | + |
| 19 | +### Using Java / maven (from sources) |
| 20 | + |
| 21 | +``` |
| 22 | +git clone https://github.com/InseeFrLab/onyxia-api.git |
| 23 | +cd onyxia-api |
| 24 | +mvn spring-boot:run |
| 25 | +``` |
| 26 | + |
| 27 | +## Usage |
| 28 | + |
| 29 | +Once Onyxia is started, browse to http://localhost:8080 to get started with the OpenAPI documentation. |
| 30 | + |
| 31 | +## Contributing |
| 32 | + |
| 33 | +Contributions are welcome. |
| 34 | +Make sure to conform to Android Open Source Project code style : `mvn spotless:apply` can enforce it. |
| 35 | + |
| 36 | +## Configuration |
| 37 | + |
| 38 | +Main configuration file is [onyxia-api/src/main/resources/application.properties](onyxia-api/src/main/resources/application.properties). |
| 39 | +Each variable can be overridden using environment variables. |
| 40 | + |
| 41 | +### Regions configuration : |
| 42 | +| Key | Default | Description | |
| 43 | +| --------------------- | ------- | ------------------------------------------------------------------ | |
| 44 | +| `regions` | [onyxia-api/src/main/resources/regions.json](onyxia-api/src/main/resources/regions.json) | List of regions, see [Region configuration](docs/region-configuration.md) | |
| 45 | + |
| 46 | +### Authentication configuration |
| 47 | +| Key | Default | Description | |
| 48 | +| --------------------- | ------- | ------------------------------------------------------------------ | |
| 49 | +| `authentication.mode` | `none` | Supported modes are : `none`, `openidconnect` (must be configured) | |
| 50 | + |
| 51 | +### Open id configuration (used when `authentication.mode`=`openidconnect`) |
| 52 | +You have to specify `oidc.issuer-uri`. `oidc.jwk-uri` is optional. |
| 53 | +Common used configurations : |
| 54 | +| Provider | `oidc.issuer-uri` | `oidc.jwk-uri` | |
| 55 | +|---|---|---| |
| 56 | +| Keycloak | `https://keycloak.example.com/auth/realms/REALMNAME` | | |
| 57 | +| Google | https://accounts.google.com | `https://www.googleapis.com/oauth2/v3/certs` | |
| 58 | +| Microsoft | `https://login.microsoftonline.com/TENANTID/v2.0` | | |
| 59 | + |
| 60 | +Configurable properties : |
| 61 | +| Key | Default | Description | |
| 62 | +| -------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------- | |
| 63 | +| `oidc.issuer-uri` | | Issuer URI, should be the same as the `iss` field of the tokens | |
| 64 | +| `oidc.jwk-uri` | | JWK URI, useful when auto discovery is not available or when `iss` is not consistent across tokens (e.g [Google](https://stackoverflow.com/questions/38618826/can-i-get-a-consistent-iss-value-for-a-google-openidconnect-id-token)) | |
| 65 | +| `oidc.clientID` | | Client id to be used by Onyxia web application | |
| 66 | +| `oidc.audience` | | Optional : audience to validate. Must be the same as the token's `aud` field | |
| 67 | +| `oidc.username-claim` | `preferred_username` | Claim to be used as user id. Must conform to [RFC 1123](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-label-names) | |
| 68 | +| `oidc.groups-claim` | `groups` | Claim to be used as list of user groups. | |
| 69 | + |
| 70 | +### Security configuration : |
| 71 | +| Key | Default | Description | |
| 72 | +| --------------------- | ------- | ------------------------------------------------------------------ | |
| 73 | +| `security.cors.allowed_origins` | | To indicate which origins are allowed by [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) | |
| 74 | + |
| 75 | +### Catalogs configuration : |
| 76 | + |
| 77 | +| Key | Default | Description | |
| 78 | +| --------------------- | ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
| 79 | +| `catalogs` | see [onyxia-api/src/main/resources/catalogs.json](onyxia-api/src/main/resources/catalogs.json) | List of catalogs. Each catalog can be of type `universe` or `helm`. Mixing is supported. If there is no region of corresponding type then the catalog will be ignored | |
| 80 | +| `catalogs.refresh.ms` | `300000` (5 minutes) | The rate at which the catalogs should be refreshed. `<= 0` means no refreshs after initial loading | |
| 81 | + |
| 82 | +### HTTP configuration |
| 83 | +| Key | Default | Description | |
| 84 | +| --------------------- | ------- | ------------------------------------------------------------------ | |
| 85 | +| `http.proxyHost` | | Proxy hostname (e.g : proxy.example.com) | |
| 86 | +| `http.proxyPort` | 80 for `HTTP`, 443 for `HTTPS` | Proxy port | |
| 87 | +| `http.noProxy` | | Hosts that should not use the proxy (e.g : `localhost,host.example.com`) | |
| 88 | +| `http.proxyUsername` | | Username if the proxy requires authentication | |
| 89 | +| `http.proxyPassword` | | Password if the proxy requires authentication | |
| 90 | + |
| 91 | +### Other configurations |
| 92 | +| Key | Default | Description | |
| 93 | +| --------------------- | ------- | ------------------------------------------------------------------ | |
| 94 | +| `springdoc.swagger-ui.path` | `/` | Open API (swagger) UI path | |
| 95 | +| `springdoc.swagger-ui.oauth.clientId` | `` | clientid used by swagger to authenticate the user, in general the same which is used by onyxia-ui is ok. | |
| 96 | + |
| 97 | +## Onyxia API dependency to Helm |
| 98 | + |
| 99 | +Onyxia-API makes system calls to `helm` using the [helm-wrapper](helm-wrapper) Java library. |
| 100 | +`helm` is bundled in the `Onyxia API` Docker image, see current version bundled here : [Dockerfile](onyxia-api/Dockerfile). |
| 101 | +If running `Onyxia API` locally you need to have `helm` available in the `PATH`. |
| 102 | + |
| 103 | +## Onyxia Helm format extension |
| 104 | + |
| 105 | +Onyxia's catalogs are based on the Helm chart format and especially the `values.schema.json` (see https://helm.sh/docs/topics/charts/#schema-files) file used to populate the personalization tabs displayed by the UI. |
| 106 | +Onyxia is **fully interoperable** with the Helm chart format which means you can use any helm chart repository as a onyxia catalog. But you probably want to use one that includes `values.schema.json` files (those files are optional in helm). |
| 107 | +Onyxia extends this format to enhance it and provide more customization tools in the UI. |
| 108 | + |
109 | 109 | An example of such extension can be found [here](https://github.com/InseeFrLab/helm-charts-interactive-services/blob/main/charts/jupyter-python/values.schema.json#L190), see `x-onyxia`.
|
0 commit comments