Konfiguracja
Serwer może pracować w jednym z dwóch poniższych trybów:
- standalone - każda instancja jest niezależnym procesem. Pliki konfiguracyjne znajdują się w katalogu JBOSS_HOME/standalone/configuration
- domain - istnieje możliwość uruchomienia wielu instancji i zarządzanie nimi z jednego centralnego punktu (kontrolera domeny). Domena może obejmować wiele maszyn (fizycznych lub wirtualnych). Każda maszyna może hostować kilka instancji serwera aplikacyjnego. Pliki konfiguracyjne znajdują się w katalogu JBOSS_HOME/domain/configuration
Podstawowa struktura katalogów
Nazwa | Opis |
---|---|
bin | Skrypty i konfiguracja startowa, pozostałe komendy i narzędzia |
docs | Przykłady konfiguracji, definicje XML Schema |
domain | Konfiguracja serwera działającego w trybie domeny |
standalone | Konfiguracja serwera działającego w trybie pojedynczej instancji |
modules | Moduły i biblioteki będące częścią dystrybucji serwera |
welcome-content | Główny katalog www, zawierający stronę startową |
Metody konfiguracji
Web Console
Aplikacja webowa, będąca częścią dystrybucji serwera. Umożliwia zarządzanie podstawowymi komponentami, wdrażanie aplikacji, monitorowanie oraz inne. Pozwala na szybką i łatwą zmianę konfiguracji. Dedykowana głównie osobom rozpoczynającym pracę z serwerem. Konsola jest dostępna pod adresem http://localhost:9990
Command Line Interface (CLI)
Oparte o terminal, zaawansowane narzędzie umożliwiające administrację serwerem. Daje pełne możliwości konfiguracyjne niezależnie od trybu pracy i lokalizacji serwera.
Przykłady odczytu/zapisu konfiguracji:
/subsystem=datasources/data-source=ExampleDS:read-attribute(name=enabled)
/subsystem=datasources/data-source=ExampleDS:write-attribute(name=enabled,value=false)
/core-service=management/management-interface=http-interface:write- attribute(name=console-enabled,value=false)
Edycja plików XML
Niezalecane - może prowadzić do błędów. Możliwe tylko przy wyłączonym serwerze.
Podczas startu serwera tworzona jest kopia pliku konfiguracyjnego w pliku zawierającym w nazwie znacznik czasowy. Każda zmiana konfiguracyjna powoduje automatyczne utworzenie kopii zapasowej co umożliwia przywrócenie konfiguracji do oryginalnego stanu. Dodatkowo możliwe jest wykonywanie snapshotów, które również mogą posłużyć do przywrócenia konfiguracji.
:take-snapshot
:list-snapshots
:delete-snapshot(name=20151022-133109702standalone.xml)
standalone.sh --server- config=standalone_xml_history/snapshot/20151022-133109702standalone.xml
Dodatkowo w nowszych wersjach serwera istnieje możliwość śledzenia historii zmian.
/core-service=management/service=configuration-changes:add(max- history=10)
/core-service=management/service=configuration-changes:list-changes
Podstawowa struktura plików konfiguracyjnych
Server
Główny znacznik, zamyka w sobie wszystkie pozostałe elementy
Extensions
Większość funkcjonalności serwera jest dostarczana w ramach tzw. rozszerzeń, ładowanych w czasie startu serwera przed wdrożeniem jakichkolwiek aplikacji. Rozszerzenia muszą implementować interfejs org.jboss.as.controller.Extension i są przechowywane w katalogu JBOSS_HOME/modules.
<extensions>
<extension module="org.jboss.as.clustering.in nispan"/>
<extension module="org.jboss.as.connector"/>
<extension module="org.jboss.as.deployment-scanner"/>
<extension module="org.jboss.as.ee"/>
<extension module="org.jboss.as.ejb3"/>
.......
</extensions>
Paths
Logiczne nazwy ścieżek do zasobów, które mogą być wykorzystane w ramach późniejszej konfiguracji np.:
- jboss.home - katalog główny serwera
- user.home - katalog domowy użytkownika
- java.home - katalog instalacji JDK
- jboss.server.log.dir - miejsce przechowywania logów
- ...
<path name="log.dir" path="/home/logs" />
<path name="logdata.dir" path="/logs" relative-to="jboss.server.data.dir"/>
Powyższe ustawienia mogą zostać nadpisane podczas uruchamiania serwera.
standalone.sh -Djboss.server.log.dir=/var/log
Interfaces
Adresy IP / nazwy hostów na których działa serwer. Domyślnie zdefiniowane interfejsy to:
- management - dostęp administracyjny - konsola webowa i CLI
- public - dostęp do publicznych usług serwera
- unsecure - komunikacja IIOP
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>
<interface name="unsecure">
<inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
</interface>
</interfaces>
Powyższe ustawienia mogą zostać nadpisane podczas uruchamiania serwera.
./standalone.sh -Djboss.bind.address=192.168.1.1 -Djboss.bind.address.management=192.168.1.1
./standalone.sh -b 192.168.1.1 -bmanagement 192.168.1.1
Socket binding groups
Konfiguracja portów dla poszczególnych usług i powiązanie ich z wcześniej zdefiniowanymi interfejsami. Ta sekcja określna na jakich portach będzie nasłuchiwał serwer. Atrybut jboss.socket.binding.port-offset pozwala na przesunięcie wszystkich definicji portów o określoną wartość, co pozwala na uruchomienie kilku instancji serwera na jednej fizycznej maszynie.
<socket-binding-group name="standard-sockets" default-interface="public" port-off set="${jboss.socket.binding.port-offset:0}">
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
<socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
<socket-binding name="http" port="8080"/>
<socket-binding name="https" port="${jboss.https.port:8443}"/>
....
</socket-binding-group>
Uwaga! WildFly używa portu 9990 dla wszystkich interfejsów administracyjnych (CLI i Web Console)
System properties
Pozwalają na definiowanie reużywalnych zmiennych. Mogą być definiowane podczas startu serwera lub na poziomie pliku konfiguracyjnego.
<system-properties>
<property name="node" value="main"/>
</system-properties>
./standalone.sh -Dnode=main
./standalone.sh -P file.properties
Powyższe ustawienia mogą zostać nadpisane podczas uruchamiania serwera lub przez CLI.
standalone.sh -Djboss.bind.address=192.168.1.2
/system-property=jboss.bind.address:add(value=192.168.1.2)
Profiles
Konfiguracja podsystemów serwera np. kontener web może zawierać definicje wykorzystywanych konektorów. W przypadku serwera działającego w trybie standalone istnieje tylko jeden profil.
<profile>
<subsystem xmlns="urn:jboss:domain:logging:2.0">
....
</profile>
Konfiguracja w trybie standalone
Jest oparta o jeden profil zawierający ustawienia wszystkich podsystemów serwera. Domyślnie w katalogu JBOSS_HOME/standalone/configuration znajdują się predefiniowane warianty konfiguracji:
- standalone.xml - Java EE Web profile
- standalone-full.xml - JEE Full profile
- standalone-ha.xml - rozszerza Web profile o możliwość klastrowania
- standalone-full-ha.xml - rozszerza Full profile o możliwość klastrowania
Uruchamianie serwera ze wskazaniem konkretnej konfiguracji:
./standalone.sh --server-config standalone-full.xml
./standalone.sh -c standalone-full.xml
Konfiguracja w trybie domain
Domena jest kolekcją grup serwerów. Grupa to logiczna jednostka organizacyjna, zawierająca określoną ilość hostów (instancji serwera WildFly). Każda grupa może definiować własne ustawienia takie np. parametry JVM, porty, interfejsy czy wdrażane aplikacje.
Każda domena składa się z:
- Domain Controller - przechowuje konfigurację współdzieloną przez węzły należące do domeny, stanowi punkt kontrolny domeny
- Host Controller - proces odpowiedzialny za komunikację z kontrolerem, propagację konfiguracji oraz dystrybucję aplikacji i zarządzanie instancjami serwerów
- Application server nodes - instancje serwera WildFly
Startując domenę można zauważyć dodatkowy proces tzw. Process Controller. Jego głównym zadaniem jest zarządzanie procesami. W jego przypadku nie ma możliwości dodatkowej konfiguracji.
Pliki konfiguracyjne w ramach domeny znajdują się w w katalogu JBOSS_HOME/domain/configuration i są to:
- domain.xml - główny plik konfiguracyjny, czytany tylko przez węzeł master, zawiera definicje wszystkich dostępnych profili
- host.xml - konfiguracja fizycznego hosta należącego do domeny,
- host-master.xml - konfiguracja niezbędna do uruchomienia master domain controller
- host-slave.xml - konfiguracja niezbędna do uruchomienia managed domain host controller
Domyślnie przy starcie używana jest konfiguracja z host.xml, jednak można wskazać inną:
domain.sh --host-config=host-master.xml
Domain Cotroller
Konfiguracja wszystkich serwerów działających w domenie znajduje się w pliku JBOSS_HOME/domain/domain.xml na kontrolerze domeny (plik nie jest wymagany na pozostałych węzłach). Zawiera ona definicje grup serwerów, ich powiązania z konkretnymi profilami, bindowania grup portów oraz inne.
Domyślnie zdefiniowane profile to:
- default - JEE Web profile
- full - JEE Full profile
- ha - rozszerza Web profile o możliwość klastrowania
- full-ha - rozszerza Full profile o możliwość klastrowania
Kontroler domeny jest odpowiedzialny za zarządzanie całą domeną jednak nie jest wymagany do działania pozostałych węzłów.
Przykład definicji grup logicznych zgodnych z powyższym diagramem:
<server-groups>
<server-group name="main-server-group" profile="full">
<jvm name="default">
<heap size="64m" max-size="512m"/>
</jvm>
<socket-binding-group ref="full-sockets"/>
</server-group>
<server-group name="other-server-group" profile="full">
<jvm name="default">
<heap size="64m" max-size="512m"/>
</jvm>
<socket-binding-group ref="full-sockets"/>
</server-group>
</server-groups>
Innym elementem konfiguracyjnym jest plik host.xml, który określa:
- serwery i ich przynależność do grup
- interfejsy sieciowe i ustawienia związane z bezpieczeństwem
- lokalizację kontrolera domeny
- nazwę hosta
W założonym przykładzie nie ma serwerów aplikacyjnych na fizycznej maszynie kontrolera domeny (dedykowany kontroler). Dlatego element definiujący serwery powinien pozostać pusty.
<servers/>
Z uwagi na to że kontroler domeny jest lokalny wskazujemy go przez element local.
<domain-controller>
<local/>
</domain-controller>
Uruchomienie domeny odbywa się w standardowy sposób
./domain.sh -Djboss.bind.address.management=192.168.0.1
Host Controllers
Host Controller ładuje konfigurację z kontrolera i wykorzystuje lokalny plik host.xml do skonfigurowania serwerów działających na danym węźle. Pierwszą istotną kwestią jest określenie unikalnej nazwy hosta w ramach domeny.
<host name="host1" xmlns="urn:jboss:domain:4.0">
...
</host>
Następnie należy wskazać gdzie znajduje się kontroler domeny. Najlepiej wykorzystać zdefiniowane zmienne i podawać jego adres w momencie uruchamiania instancji. Ze względów bezpieczeństwa wymagane jest także podanie użytkownika wykorzystywanego w czasie połączenia.
<domain-controller>
<remote host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9999}" username="wild yadmin" security-realm="ManagementRealm"/>
</domain-controller>
Dodatkowo musimy ustawić hasło zakodowane w postaci Base64 na poziomie znacznika server-identities. Uwierzytelnianie jest konieczne z uwagi na to, że kontroler domeny znajduje się na innej maszynie.
<management>
<security-realms>
<security-realm name="ManagementRealm">
<server-identities>
<secret value="RXJpY3Nzb24xIQ==" />
</server-identities>
......
</security-realm>
</security-realms>
......
</management>
Ostatecznie należy skonfigurować poszczególne instancje serwerów w każdym host.xml. Flaga autostart określa czy serwery mają startować automatycznie po podniesieniu Host Controllera. Określenie przesunięcia portów zapobiega konfliktom na jednej fizycznej maszynie.
// Dla Host1
<servers>
<server name="server-one" group="main-server-group"/>
<server name="server-two" group="other-server-group" auto-start="false">
<socket-bindings port-offset="150"/>
</server>
</servers>
// Dla Host2
<servers>
<server name="server-three" group="main-server-group"/>
<server name="server-four" group="other-server-group" auto-start="false">
<socket-bindings port-offset="150"/>
</server>
</servers>
Uruchomienie obu serwerów:
./domain.sh -b 192.168.0.2 -Djboss.domain.master.address=192.168.0.1
./domain.sh -b 192.168.0.3 -Djboss.domain.master.address=192.168.0.1
Po prawidłowym zakończeniu procesu na konsoli kontrolera domeny powinna pojawić się informacja o dołączonych węzłach.