Projektsetup / Tools

internet

Top Contributor
Hallo zusammen,

ich entwickle aktuell alleine an einem JAVA EE Projekt. Mit Setup sieht so aus:
  • WildFly also App Server
  • Keycloak als Authprovider
  • Github (dort commite ich den Code)
  • MySQL Datenbank
Nun möchte ich bald das JAVA EE (.war - File) auf einen Server deployen.

Hierzu habe ich geplant:
  • VPS oder Root Server mieten (Linux)
  • Docker installieren
  • Docker-compose File aufspielen, dann Keycloak, MySQL, Wildfly inkl. .war File enthält
Was benötige ich daneben auch noch?
Benötige ich bpsw. auch noch "Traefik" ?

Wie sieht es mit Monitoring aus?
Hier habe ich bspw. Prometheus und Grafana im Fokus. Hier muss ich mich erst noch einarbeiten.

Wie geht das ganze Thema Deployment von statten?

Aktuell mache ich das relativ simple:
-> Ich baue mir mit Maven das .war - File, kopiere das .war - File in das entsprechende Docker Verzeichnise und starte Docker.

Es gibt aber ja auch so Tools, wie Gitlab? Wenn ich es richtig verstehe ist das quasi ein Tool, womit ich dann:
  • Versionierung (anstatt GitHub) kann
  • Ticketerstellung (ähnlich wie JIRA)
  • Automatisiertes Deployment (ich checke den Code ein und das Projekt wird in regelmäßigen Abständen deployed) ?

Sonstiges... ?
 

KonradN

Super-Moderator
Mitarbeiter
Benötige ich bpsw. auch noch "Traefik" ?
Du musst Dir Dein Setup überlegen und Du musst Tools für diverse Aufgaben finden (So diese Aufgaben in dem Setup vorgesehen sind). Wenn Du die Anfragen über einen Proxy gehen lassen willst (durchaus üblich so AppServer nicht direkt ins Netz zu packen), dann brauchst Du ein Tool, das diese Aufgabe übernimmt. Aber ob das nun Traefik ist oder Apache Webserver oder nginx oder oder oder ....

Wie sieht es mit Monitoring aus?
Hier habe ich bspw. Prometheus und Grafana im Fokus. Hier muss ich mich erst noch einarbeiten.
Mach das.

Es gibt aber ja auch so Tools, wie Gitlab?
Das ist einfach eine mögliche Alternative zu GitHub. Versionierung machst Du in der Versionskontrolle und dazu nutzen diese Sites git.
Einfache Tickets können beide - JIRA könnte da deutlich mehr ...
Einfaches CI/CD hast Du da auch drin. Kann man aber auch explizit machen mit Tools wie Jenkins.

Hier kann man Dir nur erneut empfehlen, Dir das von Grund auf anzusehen und Dich da entsprechend einzuarbeiten. Devops wäre hier ein mögliches Stichwort.

Wobei die Frage wirklich ist, was Du denn genau benötigst. Du hast GitHub, also ist die Frage:
a) Hast Du Dir die Funktionalitäten schon mal angesehen, die es bietet?
b) Wenn Du Alternativen in Betracht ziehst: Wieso? Was erwartest Du Dir davon?

Das sind DInge, die Du Dir überlegen musst. Ich sehe erneut, dass Du viel Zeit in Dinge investieren willst, für die es
  • noch keinen wirklichen Anlass gibt
  • Dir die Grundlagen sehr stark fehlen.
Und da können wir Dir dann auch nicht wirklich weiter helfen. Bei konkreten Fragen kann man gerne antworten, aber hier geht es ja um so allgemeine Dinge und wir kennen viel zu wenig, so dass man Dir nicht wirklich viel sagen kann. Bei der ersten Frage: Sollen Dir jetzt alle ihre Präferenz schreiben? Angefangen von "Brauchst keinen Proxy, kannst WildFly direkt ins Netz stellen" über "Ich nehme Apache Webserver" und "Ich nutze ninx" hin zu tollen Lösungen wie: "Bau Deine komplette eigene Cloud mit ...." (Das fände ich übrigens eine super Lösung. Einfach n root Server holen, verteiltes Dateisystem aufsetzen und all sowas ... )

Generell schüttel ich da auch mein Kopf: Was genau willst Du denn machen?
  • Software Entwickeln?
  • Administration?

Alles zusammen hoch professionell wirst Du nicht hin kriegen. Alleine schon, weil Du die Technologie meistern musst um z.B. den Punkt Sicherheit bewerten zu können.
 

internet

Top Contributor
Danke für die Antwort.

Es ging mir generell erstmal darum was ich denn noch so an Tools, Programme etc. dafür benötige um mal einen ersten Start zu haben.

Github:
  • aktuell reicht das für mich aus, dass ich eine Versionsverwaltung habe.
  • ich arbeite aktuell alleine in dem Projekt

Gitlab
-> brauche ich es? Aktuell es wohl nicht. Macht dann wohl eher mehr Sinn, wenn man im Team arbeitet
-> Tickets: JIRA wäre sicherlich hilfirech. Aber theroetisch reicht auch noch eine Excelliste
 

LimDul

Top Contributor
Bzgl. traefik (bzw. eines beliebigen Proxy), würde ich persönlich sagen: Ja, brauchst du.

Aber wichtig ist da einen Schritt zurück zu treten und sich zu fragen "Warum"

Du hast mehrere Anwendungen, die eine Web-Oberfläche haben:
  • Deine EE Anwendung
  • Keycloak
  • Grafana
  • ...?

Wenn das nach außen seriös aussehen soll, sollte folgendes gelten:
  • Alle Anwendungen sollten nur per HTTPS erreichbar sein (HTTP sollte Redirect zu HTTPS sein)
  • Alle Anwendungen sollten mit einem Domainnamen erreichbar sein und nicht nur über IP
  • Alle Anwendungen sollten auf dem Default HTTP/HTTPS Port erreichbar sein

Spätestens beim letzten Punkt wird es schwierig, da nach außen auf dem Root Server alle Anwendungen unter einen IP laufen, können nicht alle Anwendungen direkt auf dem Port erreichbar sein. Das heißt irgendwer muss sich die Requests anschauen und sagen "Domain A zu Java EE, Domain B zu Keycloak" etc. Und genau das ist die Aufgabe eines Reverse Proxy.

Hinzu kommt, alles muss per HTTPS abgesichert sein. Natürlich kann man auch direkt in Wildfly SSL Zertifikate ablegen - hat man aber einen Reverse Proxy davor, kann der mit der Außenwelt HTTPS sprechen, aber intern zu Wildfly nur HTTP. Macht die Administration deutlich einfacher, insbesondere da man bei den gängigen Reverse Proxys auch eine simple Lets Encrypt Integration hat, die es einem ermöglicht SSL Zertifikate kostenlos und ohne größeren Aufwand zu bekommen.
 

Oneixee5

Top Contributor
Traefik in Zusammenarbeit mit Docker kann ich nur empfehlen. Traefik ist mehr als ein Proxy und kann viele Aufgaben übernehmen: Proxy, SSL, Security, Login, Load-Balancing, Skalierung, ...
Ich gehe bei meinen privaten Projekten so vor: Wenn eine neue Version meiner Software steht, pusche ich das fertige Image in eine Docker-Registrie meiner Wahl. Auf dem Host läuft ein weiterer Docker-Container: containrrr/watchtower. Dieser prüft periodisch oder manuell ob neue Versionen meiner installierten Container verfügbar sind. Falls vorhanden werden diese automatisch aktualisiert. Das funktioniert auch mit Datenbanken. Bisher hatte ich noch keine Probleme damit.
Natürlich werden so auch alle Container für die Sicherheit des Hosts aktualisiert: Firewall, Fail2Ban, Crowdsec, Trivy, ...
Das OS des Host bekommt ebenfalls automatische Updates, außerdem läuft da noch Webmin zur Verwaltung.
Logfiles werden per Logwatch zusammengefasst und mit Syncthing auf meine PC's, Tablet und Handy synchronisiert. So ist jederzeit ein Überblick möglich. Ich muss mich dann nicht ständig anmelden und alles manuell überwachen.
Allerdings weiß ich nicht, ob ich das gewerblich auch so machen würde. Wenn irgend etwas privates mal nicht läuft - so what ...
Beruflich verwende ich K8n/Ranger für den Zweck. Was natürlich für private Projekte zu aufwändig ist. Obwohl ich mal eine K8n-Installation mit 3 RPi und einem Banana-Pi gebaut habe.
 

internet

Top Contributor
danke für die Antworten....

Wie werde ich dann hier vor gehen bzgl. Traefik?
Habe ich dann in einem Docker Container?
  • WildFly also App Server
  • Keycloak als Authprovider
  • MySQL Datenbank
  • Traefik
Oder läuft Traefik in einem seperaten Docker Container?
 

Oneixee5

Top Contributor
danke für die Antworten....

Wie werde ich dann hier vor gehen bzgl. Traefik?
Habe ich dann in einem Docker Container?
  • WildFly also App Server
  • Keycloak als Authprovider
  • MySQL Datenbank
  • Traefik
Oder läuft Traefik in einem seperaten Docker Container?
Das Prinzip besagt: Ein Container für eine Aufgabe! Also hast du hier mind. 4 Container. Wobei es nicht notwendig ist, als Docker OS ein Debian- oder Ubuntu-Linux zu verwenden. Ich verwende meistens Alpine-Linux, da es wesentlich kleiner ist. Auch deshalb ist MySQL eine schlechte Wahl. Langsame DB und große Images! Da ist Postgres wesentlich besser.
 
Zuletzt bearbeitet:

Oneixee5

Top Contributor
Es kommt auf dein Dockerfile an - was dort alles installiert ist. Docker-compose beschreibt nur die Configuration für einen oder mehrere Container, Netzwerke, ....
 

internet

Top Contributor
aktuell sieht das docker-compose.yml so aus:

Java:
version: '3.8'

services:
  keycloak:
    image: quay.io/keycloak/keycloak:23.0.5
    container_name: keycloak_myapp
    environment:
      - KEYCLOAK_ADMIN=admin
      - KEYCLOAK_ADMIN_PASSWORD=admin
      - KEYCLOAK_IMPORT=/opt/keycloak/data/import/realm-export.json -Dkeycloak.profile.feature.upload_scripts=enabled
      #- DB_VENDOR=mysql
      #- DB_ADDR=mysql
      #- DB_PORT=3306
      #- DB_DATABASE=keycloak
      #- DB_USER=root
      #- DB_PASSWORD=test1234
    volumes:
      - ./keycloak/realm-export.json:/opt/keycloak/data/import/rea∂lm-export.json
    command:
      #- "start"
      - start-dev
      - --import-realm
      - --http-port=9009
      - --http-enabled=true
      - --http-relative-path=auth
     #command:
     # -v start-dev --import-realm
    ports:
      - "9009:9009"
    depends_on:
      - mysql
    networks:
      - app-network

  wildfly:
    #image: quay.io/wildfly/wildfly:31.0.0.Final-jdk11
    build:
      context: ./wildfly
      dockerfile: Dockerfile
    container_name: wildfly_myapp
    ports:
      - "8080:8080"
    volumes:
      - ./wildfly/configuration/standalone.xml:/opt/jboss/wildfly/standalone/configuration/standalone.xml
      - ./wildfly/lib/mysql/mysql-connector-java-8.0.12.jar:/opt/jboss/wildfly/modules/system/layers/base/com/mysql/main/mysql-connector-java-8.0.12.jar
      - ./wildfly/lib/mysql/module.xml:/opt/jboss/wildfly/modules/system/layers/base/com/mysql/main/module.xml 
      - ./wildfly/myapp.war:/opt/jboss/wildfly/standalone/deployments/myapp.war         
    environment:
      #- "start"
      - KEYCLOAK_URL=http://192.168.178.93:9009/auth
      - JAVA_OPTS=-server
      - --Xms512m -Xmx2048m
      - --XX:MetaspaceSize=96M
      - --XX:MaxMetaspaceSize=256m
      - --XX:+UseAdaptiveSizePolicy
      - --XX:MaxMetaspaceSize=1024m
      - --Djava.net.preferIPv4Stack=true
      - --Djboss.modules.system.pkgs=org.jboss.byteman
      - --Djava.awt.headless=true-Djava.net.preferIPv4Stack=true
    depends_on:
      - mysql
      - keycloak
    networks:
      - app-network

  mysql:
    image: mysql:8.2.0
    container_name: mysql_myapp
    environment:
      MYSQL_ROOT_PASSWORD: test1234
      MYSQL_DATABASE: myapp
    ports:
      - "3306:3306"
    volumes:
      - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql
    networks:
      - app-network

networks:
  app-network:
    driver: bridge
 

sascha-sphw

Top Contributor
Damit startest du drei Container. Da sich Keycloak und die Datenbank im selben Netzwerk befinden, musst du die Ports der Datenbank nicht öffnen. Mit dem oben beschriebenen Reverse Proxy könntest du auch alle Ports bis auf den des Proxies geschlossen halten. Generell sieht es noch nach einer Entwicklungsumgebung aus. So solltest du nicht in Produktion gehen.
 

internet

Top Contributor
Eine weitere Frage:
- Mit welchem Tool lese ich denn am Besten Log Files aus?
Also das geht in Richtung Monitoring....

Prometheus und Grafana habe ich bereits genannt. Aber das geht m.E. eher in Richtung Überwachung der Server (prozesse)?
Wie kann ich aber mir bspw. die Logfiles vom Wildfly / Docker Container auslesen bzw. überwachen und dann hier schon Mal erkennen, wenn ERRORS auftreten?
 

KonradN

Super-Moderator
Mitarbeiter
Das erste, was mir da direkt einfällt: ELK Stack (Elasticsearch, Logstack, Kibana).

Aber es gibt eine Reihe von Tools, die einzelnd oder teilweise in Kombination verwendet werden können:
Graylog, Fluentd, syslog-ng, Prometeus + Grafana, Zabbix, OpenSearch, ...

Die genannten Tools sind nicht immer genau das, was Du da angefragt hast, sondern haben teilweise auch nur Teilbereiche. Du hast ja mehrere Teilaufgaben: Du willst die Logfiles lesen oder zentral sammeln, Du willst Logs auswerten und dann willst Du ggf. auch Alarmierungen Da greift also vieles ineinander.

ELK Stack kann aber ein guter Startpunkt sein um da alles zusammen zu haben. Das ist ein recht weit verbreiteter Stack. Von da aus kann man dann ja schauen, was passt und was nicht passt um dann ggf. Anpassungen zu machen oder eben bei Ersatz gezielt zu schauen.

Edit: Habe das Prometeus + Grafana noch mal fett gemacht. Das hast Du ja auch schon genannt und das bietet da natürlich auch erste Dinge. Denn Monitoring umfasst ja auch die Auswertung von Ereignissen (Diverse Arten von Logs) und daher kann das auch schon ausreichen um z.B. auf Errors in einem Log zu reagieren.
 

KonradN

Super-Moderator
Mitarbeiter
Dieses kostenfreie Whitepaper könnte (langfristig) i.Z. mit Docker & Kubernetes und schnelle(re)n Ladezeiten nicht ganz uninteressant sein: https://jax.de/wjax24-wp/?loc=mun
CRaC hatte ich nich gar nicht auf dem Schirm, aber das ist doch zum einen noch in der EA Phase und wäre dann auch mehr eine Art Optimierung dezüglich Startup-Zeiten. Also ja: Sehr interessant aber aktuell noch nicht wirklich relevant für die Praxis. Und bezüglich der aktuellen Fragestellung auch nicht direkt relevant (oder habe ich da etwas übersehen?)

Aber auf jeden Fall ein interessanter Link über den ich mich gefreut habe, da ich es nicht auf dem Schirm hatte.
 

internet

Top Contributor
Ich habe jetzt mal eine konkrete Frage zwecks Traefik und Grafana...

docker-compose.yaml für Traefik:
Java:
version: '3.7'

services:
  traefik:
    image: traefik:3.0.0
    container_name: traefik
    restart: always
    ports:
      - "80:80"    # HTTP
      - "443:443"  # HTTPS
      - "8085:8080" # Traefik Dashboard
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro" # Zugriff auf Docker-API
      - "./traefik.yaml:/etc/traefik/traefik.yaml:ro"    # Statische Konfiguration
      - "./dynamic.yaml:/etc/traefik/dynamic/dynamic.yaml:ro" # Dynamische Konfiguration
      - "./letsencrypt:/letsencrypt"                  # Speicherort für Zertifikate
    networks:
      - app-network

networks:
  app-network:
    #external: true
    driver: bridge  # Standardmäßig wird das Bridge-Netzwerk verwendet

traefik.yaml:
Code:
entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"
  traefik:
    address: ":8080"

api:
  dashboard: true
  insecure: true  # Dashboard öffentlich zugänglich, sichern Sie dies in der Produktion

providers:
  docker:
    exposedByDefault: false  # Nur Container, die explizit angegeben werden, sind verfügbar
  file:
    directory: "/etc/traefik/dynamic" # Verzeichnis für dynamische Konfigurationen
    watch: true  # Überwachen Sie Änderungen in der Datei

certificatesResolvers:
  myresolver:
    acme:
      email: your-email@example.com
      storage: "/letsencrypt/acme.json"
      httpChallenge:
        entryPoint: web

log:
  level: ERROR  # Logging Level

dynamic.yaml
Code:
http:
  routers:      
    monitoring-router:
      rule: "Host(`monitoring.localhost`)"
      service: monitoring-service
      entryPoints:
        - web

  services:
    monitoring-service:
      loadBalancer:
        servers:
          - url: "http://grafana:3000" # Beispiel für weiteren Dienst

docker-compose.yaml für das Monitoring also prometheus + grafana:
Code:
version: '3.7'

services:
  prometheus:
    image: prom/prometheus:v2.42.0
    container_name: prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yaml
      - prometheus_data:/prometheus
    ports:
      - "9090:9090"
    networks:
      - app-network

  grafana:
    image: grafana/grafana-enterprise:9.1.7
    container_name: grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin # Standard-Admin-Passwort (ändern Sie es nach der ersten Anmeldung)
    #ports:
    #  - "3000:3000"
    networks:
      - app-network
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.grafana-router.rule=Host(`monitoring.localhost`)"
      - "traefik.http.routers.grafana-router.entrypoints=web"
      - "traefik.http.services.grafana-service.loadbalancer.server.port=3000"
    depends_on:
      - prometheus

volumes:
  prometheus_data:

networks:
  app-network:
    driver: bridge

Nun würde ich gerne im Browser monitoring.localhost eingeben und entsprechend auf die Grafana Seite kommen:
Müsste ja dann das sein: http://grafana:3000 bzw. in meinen Browser dann localhost:3000 ??
Den Port 3000 habe ich nun absichtlich nicht freigegeben (auskommentiert), das habe ich so mitgenommen, dass man eig. nur Port 80 und 443 ausgeben sollte?

Ich erhalte aber (ich meine das ist auch von Traefik) die Seite "Bad Gateway" angezeigt.

Was mache ich hier denn falsch? Was kann ich versuchen, um das Problem zu beheben?
 

internet

Top Contributor
Habe den Fehler gefunden:

Es muss sein:

Java:
networks:
  app-network:
    external: true

es hat mir pro Image immer ein neues Netzwerk erstellt.
 

mrBrown

Super-Moderator
Mitarbeiter
Vielleicht wäre doch irgendein PaaS/SaaS-Provider die passendere Wahl für dich, bei dem du im Idealfall alles fertig aus einer Hand bekommst.
 

internet

Top Contributor
Ich habe nun nochmal eine Frage zu Traefik, Keycloak... Hier scheint etwas nicht zu funktionieren.

Die folgende Konfiguration funktioniert so, aber ich hätte gerne das über die Service Namen etc. gelöst und nicht über die statische IP Adresse bzw. den offenen Port 8080.

Ich habe diese docker-compose.yaml:
Java:
version: '3.8'

services:

  keycloak:
    image: quay.io/keycloak/keycloak:25.0.0
    container_name: keycloak_myapp
    environment:
      - KEYCLOAK_ADMIN=admin
      - KEYCLOAK_ADMIN_PASSWORD=admin
      - KEYCLOAK_IMPORT=/opt/keycloak/data/import/realm-export.json -Dkeycloak.profile.feature.upload_scripts=enabled
      - KC_PROXY=edge
    volumes:
      - ./keycloak/realm-export.json:/opt/keycloak/data/import/rea∂lm-export.json
    command:
      - start-dev
      - --import-realm
      - --http-port=9010
      - --http-enabled=true

    ports:
      - "9010:9010"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.grafana-router.rule=Host(`keycloak.localhost`)"
      - "traefik.http.routers.grafana-router.entrypoints=web"
      - "traefik.http.services.grafana-service.loadbalancer.server.port=9010"
    depends_on:
      - mysql
    networks:
      - app-network

  wildfly:
    build:
      context: ./wildfly
      dockerfile: Dockerfile
    container_name: wildfly_myapp
    ports:
      - "8080:8080"
    volumes:
      - ./wildfly/configuration/standalone.xml:/opt/jboss/wildfly/standalone/configuration/standalone.xml
      - ./wildfly/lib/mysql/mysql-connector-java-8.0.12.jar:/opt/jboss/wildfly/modules/system/layers/base/com/mysql/main/mysql-connector-java-8.0.12.jar
      - ./wildfly/lib/mysql/module.xml:/opt/jboss/wildfly/modules/system/layers/base/com/mysql/main/module.xml 
      - ./wildfly/myappjobsharing.war:/opt/jboss/wildfly/standalone/deployments/myappjobsharing.war         
    environment:
      #- "start"
      - KEYCLOAK_URL=http://192.168.178.93:9010
      # - KEYCLOAK_URL=http://keycloak.localhost
      - WILDFLY_URL=http://localhost:8080
      - JAVA_OPTS=-server
      - --Xms512m -Xmx2048m
      - --XX:MetaspaceSize=96M
      - --XX:MaxMetaspaceSize=256m
      - --XX:+UseAdaptiveSizePolicy
      - --XX:MaxMetaspaceSize=1024m
      - --Djava.net.preferIPv4Stack=true
      - --Djboss.modules.system.pkgs=org.jboss.byteman
      - --Djava.awt.headless=true-Djava.net.preferIPv4Stack=true
   # labels:
   #   - "traefik.enable=true"
   #   - "traefik.http.routers.grafana-router.rule=Host(`myapp.localhost`)"
   #   - "traefik.http.routers.grafana-router.entrypoints=web"
   #   - "traefik.http.services.grafana-service.loadbalancer.server.port=8080"
    depends_on:
      - mysql
      - keycloak
    networks:
      - app-network

  mysql:
    image: mysql:8.2.0
    container_name: mysql_myapp
    environment:
      MYSQL_ROOT_PASSWORD: test1234
      MYSQL_DATABASE: myapp
   # ports:
   #   - "3306:3306"
    volumes:
      - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql
    networks:
      - app-network

networks:
  app-network:
    external: true

und hier für Traefik für das Routing:
Code:
# dynamic.yaml - Dynamische Konfiguration der Seiten

http:
  routers:
  #  wildfly-router:
  #    rule: "Host(`myapp.localhost`)"
  #    service: wildfly-service
  #    entryPoints:
  #      - web
                
    keycloak-router:
      rule: "Host(`keycloak.localhost`)"
      service: keycloak-service
      entryPoints:
        - web
      #middlewares:
      #  - keycloak-strip-prefix

  services:
 #   wildfly-service:
 #     loadBalancer:
 #       servers:
 #         - url: "http://wildfly_myapp:8080" # Lokaler WildFly-Server
                    
    keycloak-service:
      loadBalancer:
        servers:
          - url: "http://keycloak_myapp:9010/auth" # Beispiel für weiteren Dienst
Wildfly - Service ist aktuell bewusst deaktiviert da es sonst nicht geht, dies sollte aber entsprechend wieder aktiviert werden.

Ich habe aktuell das Problem, dass ich explizit hier die IP Adresse angeben muss:

Bei den Environment Variabeln von Wildfly:

Eigentlich sollte dies ja dann?

Ebenfalls

In der Shiro.ini gehe ich auf die Variabeln:
Code:
oidcConfig.baseUri = ${KEYCLOAK_URL}
oidcConfig.discoveryURI = ${KEYCLOAK_URL}/realms/gixx/.well-known/openid-configuration
clients.callbackUrl = ${WILDFLY_URL}/oauth/callback

Aufruf von http://keycloak.localhost/ funktioniert problemlos

In den Settings von Keycloak habe ich:
1723736946603.png

Aber dies müsste doch auch dann "http://myapp.localhost" sein?

Wie kann ich das ändern? Was mache ich hier falsch?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Saxony CASE Tools mit Eclipse Integration Softwareentwicklung 6
D UML Tools Softwareentwicklung 2

Ähnliche Java Themen

Neue Themen


Oben