Remote debugging engedélyezése backend-service-ben
Az alkalmazás egy távoli szerveren futó példányának hibakereséséhez ad segítséget a remote debugging, ami lehetővé teszi, hogy egy debuggert csatoljunk a szerveren futó alkalmazáshoz.
Ahhoz, hogy a remote debuggingot engedélyezzük, módosítanunk kell a /opt/project/infrastructure/docker-compose-services.yml és /opt/project/infrastructure/.env fájlokat.
-
Vegyük fel a
Ez a beállítás létrehoz egy tűzfalszabályt ami egy külső TCP portot hozzárendel a Docker host portjához, ezzel elérhetővé téve külvilág felé. Ezen a porton keresztül tudjuk majd a debuggert a konténerhez csatlakoztatni./opt/project/infrastructure/docker-compose-services.ymlfájlban a debug portot a ports szekciónál. -
Egészítsük ki a
*JAVA_TOOLS_OPTIONSváltozókat/opt/project/infrastructure/.envfájlban a debugger számára szükséges JVM argumentumokkal.Szükséges debug argumentum:
Példa eredmény 2 node esetén
NODE_1_JAVA_TOOL_OPTIONS="-Xms1g -Xmx1g -javaagent:/infrastructure/elastic-apm-agent-1.38.0.jar -Delastic.apm.environment=DEV -Delastic.apm.service_name=semi-product -Delastic.apm.service_node_name=backend-service-1 -Delastic.apm.server_urls=http://apm.dev.gbsolutions.io:8200 -Delastic.apm.application_packages=io.gbsolutions.project -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:5555" NODE_2_JAVA_TOOL_OPTIONS="-Xms1g -Xmx1g -javaagent:/infrastructure/elastic-apm-agent-1.38.0.jar -Delastic.apm.environment=DEV -Delastic.apm.service_name=semi-product -Delastic.apm.service_node_name=backend-service-2 -Delastic.apm.server_urls=http://apm.dev.gbsolutions.io:8200 -Delastic.apm.application_packages=io.gbsolutions.project -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:5555"Ezzel a beállítással adhatunk utasítást a JVM-nek arra, hogy az alkalmazást olyan módon kell futtatnia, hogy csatlakoztathassunk egy debuggert hozzá.
Ha az alkalmazás már fut a szerveren, a konfiguráció életbe lépéséhez szükség lesz arra is, hogy újraindítsuk a konténereket
Leállítás:
docker compose -f docker-compose-services.yml downÚjraindítás:
docker compose -f docker-compose-services.yml up -d -
Ezt követően AWS-en módosítanunk kell a szerverhez tartozó
Inbound security groupszabályait.Vegyük fel a következő szabályt:
Ha ennél szigorúbb szabályt szeretnénk ami csak meghatározott IP címekről engedi a kommunikációt:Type: HTTP Protocol: TCP Port range: ${OUTER_TCP_PORT} <-- példa: 5555 Source type: Anywhere (ha bárki számára engedélyezett a választott porton való kommunikáció) Source: 0.0.0.0/0Type: HTTP Protocol: TCP Port range: ${OUTER_TCP_PORT} <-- példa: 5555 Source type: Custom Source: ${CIDR_NOTATION} <-- példa 203.0.113.1/32A
${CIDR_NOTATION}segítségével nem csak egy IP cím, hanem egy egész IP cím tartományt is megadhatunk. Ha például egy darab IP címet szeretnénk engedélyezni akkor az IP cím után írjuk ki a /32 suffixet. Ez egy olyan IP cím tartományt deifiniál amiben csak az általunk megadott IP cím létezik.Ha viszont több IP címről is szeretnénk biztosítani a hozzáférést, például a 178.164.166.0 - 178.164.166.255 tartományon belül, akkor használjuk a 178.164.166.0/24 címet.
Segítség a helyes CIDR megadásához: CIDR kalkulátor
-
Ezt követően már debuggolhatjuk az alkalmazást távolról. Hozzunk létre egy
Remote JVM DEBUGRun configuration-t IntelliJ-ben az alábbiak szerint:
A host és port opciók természetesen alkalmazásonként eltérőek lesznek. A host a távoli szerver IP címe amin az alkalmazás fut, a port pedig amit debug portként konfiguráltunk -
Indítsuk el a létrehozott Run configuration-t, ha mindent jól csináltunk a consolon az alábbi üzenet fog megjelenni:
Connected to the target VM, address: '${host}:${port}', transport: 'socket' -
Mostmár felvehetünk breakpointokat a kódban. A szerveren futó alkalmazás használatakor látni fogjuk, hogy a program megáll a kijelölt breakpointoknál.