Skip to content
Snippets Groups Projects
README.md 9.05 KiB
Newer Older
  • Learn to ignore specific revisions
  • # user-manager
    
    Tobias Bruns's avatar
    Tobias Bruns committed
    
    This project uses Quarkus, the Supersonic Subatomic Java Framework.
    
    If you want to learn more about Quarkus, please visit its website: https://quarkus.io/ .
    
    ## Configuring the application
    
    This properties must be configured to run the application
    
    | Key                                                | Value                                              | Default                | Mandatory | Description                                                    |
    |----------------------------------------------------|----------------------------------------------------|------------------------| --------- |----------------------------------------------------------------|
    
    Tobias Bruns's avatar
    Tobias Bruns committed
    | quarkus.oidc.auth-server-url                       | https://keycloakurl/realms/realmname | none                   | yes | Url of the keycloak server with the realm                      |
    
    | quarkus.mongodb.connection-string                  | mongodb://ozg-mongodb:27017                        | none                   | yes | The connection string for the mongo db database                |
    | quarkus.mongodb.database                           | usermanager                                        | usermanager            | no | Name of the mongo db database                                  |
    | ozgcloud.keycloak.sync.period                      | 5m                                                 | 6h                     | no | Period between synchronizations                                |
    | ozgcloud.keycloak.api.user                         | apiUser                                            | none                   | yes | The name of the keycloak admin api user                        |
    | ozgcloud.keycloak.api.password                     | ****                                               | none                   | yes | The password of the keycloak admin api user                    |
    | ozgcloud.keycloak.api.realm                        | realm-name                                         | none                   | yes | The name of the realm                                          |
    | ozgcloud.keycloak.api.organisations-einheit-id-key | organisationseinheitId                             | organisationseinheitId | no | The key where the organisationsEinheitId of the group is saved |
    | ozgcloud.keycloak.api.ldap-id-key                  | LDAP_ID                                            | LDAP_ID                | no | The key to get the keycloak user id from                       |
    | ozgcloud.user-manager.url                          | http://localhost:8080                              | none                   | yes | The external root url of the usermanager                       |
    | keycloak.url                                       | https://sso.service                                | none                   | yes | The root url of the keycloak service                           |
    
    Tobias Bruns's avatar
    Tobias Bruns committed
    
    ## Running the application in dev mode
    
    You can run your application in dev mode that enables live coding using:
    ```shell script
    ./mvnw compile quarkus:dev
    ```
    
    > **_NOTE:_**  Quarkus now ships with a Dev UI, which is available in dev mode only at http://localhost:8080/q/dev/.
    
    
    > If you want to use remote Keycloak for local development, then use the profile remotekc. Be aware,
    > that it deactivates synchronization - if you need it, then you have to create your own realm and 
    > set it in properties, like this:
    > ```yaml
    > keycloak:
    >   realm: your-realm
    > ozgcloud:
    >   usersync:
    >     period: "6h"
    > ```
    
    ## Running the server with custom realm
    In order to start user-manager-server connecting againts dev keycloak locally with custom realm 
    use below configuration in your IDE or CLI. 
    ```
    -Dquarkus.profile=local,remotekc
    
    Tobias Bruns's avatar
    Tobias Bruns committed
    -Dquarkus.oidc.auth-server-url=https://keyclaokurl/realms/realmname
    
    -Dozgcloud.keycloak.api.realm=sebo-test
    -Dozgcloud.usersync.period="5s"
    ```
    
    
    Tobias Bruns's avatar
    Tobias Bruns committed
    ## Packaging and running the application
    
    The application can be packaged using:
    ```shell script
    ./mvnw package
    ```
    It produces the `quarkus-run.jar` file in the `target/quarkus-app/` directory.
    Be aware that it’s not an _über-jar_ as the dependencies are copied into the `target/quarkus-app/lib/` directory.
    
    The application is now runnable using `java -jar target/quarkus-app/quarkus-run.jar`.
    
    If you want to build an _über-jar_, execute the following command:
    ```shell script
    ./mvnw package -Dquarkus.package.type=uber-jar
    ```
    
    The application, packaged as an _über-jar_, is now runnable using `java -jar target/*-runner.jar`.
    
    ## Creating a native executable
    
    You can create a native executable using: 
    ```shell script
    ./mvnw package -Pnative
    ```
    
    Or, if you don't have GraalVM installed, you can run the native executable build in a container using: 
    ```shell script
    ./mvnw package -Pnative -Dquarkus.native.container-build=true
    ```
    
    You can then execute your native executable with: `./target/user-manager-1.0.0-SNAPSHOT-runner`
    
    If you want to learn more about building native executables, please consult https://quarkus.io/guides/maven-tooling.
    
    ## Related Guides
    
    - MongoDB with Panache ([guide](https://quarkus.io/guides/mongodb-panache)): Simplify your persistence code for MongoDB via the active record or the repository pattern
    - SmallRye Health ([guide](https://quarkus.io/guides/microprofile-health)): Monitor service health
    
    ## Provided Code
    
    ### RESTEasy Reactive
    
    Easily start your Reactive RESTful Web Services
    
    [Related guide section...](https://quarkus.io/guides/getting-started-reactive#reactive-jax-rs-resources)
    
    ### SmallRye Health
    
    Monitor your application's health using SmallRye Health
    
    [Related guide section...](https://quarkus.io/guides/smallrye-health)
    
    ## Best parctice
    
    ### User package-private fields for injected fields
    
    This involves injection fields, constructors and initializers, observer methods, producer methods and fields, disposers and interceptor methods.
    
    [See section 2 of quarkus guide ](https://quarkus.io/guides/cdi-reference#native-executables-and-private-members)
    
    
    
    ## Quarkus Speichernutzung
    
    ### Usermanager Einstellungen
    
    Usermanager als über-jar erstellen und lokal starten:
    
    ```bash
    ./mvnw clean package -Dquarkus.package.type=uber-jar
    
    
    Tobias Bruns's avatar
    Tobias Bruns committed
    java -Dquarkus.oidc.auth-server-url=https://keycloakurl/realms/realmname \
    
        -Dozgcloud.user-manager.url=http://localhost:8080 \
    
    Tobias Bruns's avatar
    Tobias Bruns committed
        -Dkeycloak.url=https://keycloakurl \
        -jar ./target/user-manager-server-1.3.0-runner.jar
    
    ```
    
    Usermanager als native Anwendung erstellen und lokal starten:
    
    ```bash
    ./mvnw clean package -Pnative
    
    
    Tobias Bruns's avatar
    Tobias Bruns committed
    ./target/user-manager-server-1.3.0-runner \
        -Dquarkus.oidc.auth-server-url=https://keycloakurl/realms/realmname \
    
        -Dquarkus.mongodb.connection-string=mongodb://localhost:27018 \
        -Dozgcloud.user-manager.url=http://localhost:8080 \
    
    Tobias Bruns's avatar
    Tobias Bruns committed
        -Dkeycloak.url=https://keycloakurl \
    
        -Dozgcloud.keycloak.api.user=usermanagerapiuser \
    
    Tobias Bruns's avatar
    Tobias Bruns committed
        -Dozgcloud.keycloak.api.password=**** \
        -Dozgcloud.keycloak.api.realm=realmname \
    
        -Dozgcloud.keycloak.api.client=alfa \
        -Dozgcloud.usersync.period="5m" \
        -Xmx32m
    ```
    
    ### Commands
    
    Anzeigen des Verwendeten Speichers:
    
    ```bash
    ps -e -o pid,rss,args | grep application
    ```
    
    Anzeigen der Details der Speichernutzung:
    
    ```bash
    pmap -x [pid]
    ```
    
    Loggen der Speichernutzung in Datei:
    
    ```bash
    top -b -d1 -o +%MEM | grep user-manager >> usermanager_Xmx32m_long.tsv
    ```
    
    ### Quarkus Speicherverwendung
    
    Minimale quarkus features: cdi, resteasy-reactive, smallrye-context-propagation, vertx
    
    #### Verbrauchter Speicher ohne festgelegtem Heapspace
    
    | Application | Selected additional features | Memory Usage in MB |
    | ----------- | ------------------- | ------------ |
    | quarkus-test-min-1.0.0-SNAPSHOT-runner | - | 39,232 |
    | quarkus-test-1.0.0-SNAPSHOT-runner | resteasy-reactive-jackson | 44,172 |
    | quarkus-test-db-1.0.0-SNAPSHOT-runner | mongodb-client, mongodb-panache, narayana-jta, resteasy-reactive-jackson | 46,936 |
    | quarkus-test-um-1.0.0-SNAPSHOT-runner | config-yaml, grpc-server, micrometer, mongodb-client, mongodb-panache, narayana-jta, smallrye-health, scheduler | 52,068 |
    | quarkus-test-oidc-1.0.0-SNAPSHOT-runner | config-yaml, grpc-server, micrometer, mongodb-client, mongodb-panache, narayana-jta, smallrye-health, scheduler, oidc, keycloak-admin | 71,580 |
    | user-manager-server-1.3.0-SNAPSHOT-runner | Usermanager Projekt | 124,164 |
    
    #### Speicher bei Last
    
    Lastest wurde über SoapUI (Projekt Usermanager user-manager-server/src/test/resources/Usermanager-REST-Last.xml) gemacht
    
    | Heapspace | max Memory Usage in MB | max Transactions/s |
    | --------- | ---------------------- | ------------------ |
    | default   | 160                    | 300                |
    | 32m       |  99                    | 115                |
    
    #### Empfohlene Speichereinstellungen
    
    Prod:
    
    ```yaml
      limits:
        cpu: "500m"
        memory: "192Mi"
      requests:
        cpu: "50m"
        memory: "192Mi"
    ```
    
    Dev:
    
    ```yaml
      limits:
        cpu: "500m"
        memory: "100Mi"
      requests:
        cpu: "50m"
        memory: "100Mi"
    ```    
    
    ### Weitere Urls
    
    <https://e.printstacktrace.blog/graalvm-heap-size-of-native-image-how-to-set-it/>
    
    <https://quarkus.io/guides/performance-measure>
    
    <https://www.graalvm.org/22.0/reference-manual/native-image/MemoryManagement/>
    
    <https://github.com/quarkusio/quarkus/issues/22757>