GeoServer eta PostGIS: balio duen VPN bidea zerbitzariarena da
Zure eramangarriak GeoServerrera iristeak ez du ezer esaten GeoServer PostGISera iristen den ala ez. Alderatu bi jatorriak, cachearen muga eta datu biltegiaren iturria bera.
Geruza QGISen irekitzen duzu eta marraztu egiten da. VPN berean dagoen lankide batek errore bat jasotzen du geruza bererako. Norbaitek VPNa hondatuta dagoela ondorioztatzen du, eta hurrengo ordua datu base bat mugitzen edo inoiz behar izan ez zuen portu bat irekitzen ematen da. Mahaigaineko eskaerak eta GeoServerrek PostGISi egiten dion kontsultak makina desberdinetatik ateratzen dira, sare-namespace desberdinetan, kredentzial desberdinekin. Bi bide horiek bereiztea da diagnostikoaren zati handiena.
Bi konexio, bi jatorri
QGIS -> client's permitted path (often the VPN) -> GeoServer listener
GeoServer -> server's permitted path -> PostGIS listener
Bigarren geziak ez du lehen ordenagailuaren tunela heredatzen. Container bateko GeoServerrek containeraren sare-pila du, ez hostarena, eta zubi-sare bateko container batek hostak iristen ez duen datu base bat irits dezake, edo alderantziz. Beraz, erabiltzaile berak saio berean asmatu eta huts egin dezake, erantzuna cachetik edo kontsulta fresko batetik etorri den arabera.
| What you tested | What it proves |
|---|---|
Portal page or GetCapabilities | HTTP reachability to GeoServer only |
| A tile served from cache | nothing about the database |
GetMap for an uncached layer | a datastore query had to happen |
Aurkitu benetan huts egin zuen urratsa
Zerbitzu mailako ukapen bat, bere datu biltegira iristen ez den irudi eskaera bat eta geruza bateko baimen arazo bat berdinak dirudite nabigatzaileko fitxa batean eta erabat desberdinak zerbitzariaren erregistroan. Eskatu eragiketa zehatza, eta gero irakurri GeoServerren gertaera bera denbora-marka bererako.
curl -s -o /dev/null -w '%{http_code}\n' \
"https://gis.example.com/geoserver/wms?service=WMS&version=1.3.0&request=GetCapabilities"
curl -s -o /tmp/tile.png -w '%{http_code} %{size_download}\n' \
"https://gis.example.com/geoserver/wms?service=WMS&version=1.3.0&request=GetMap&layers=corp:parcels&bbox=-13650000,4500000,-13600000,4550000&width=256&height=256&srs=EPSG:3857&format=image/png"
Bigarren eskaeraren 200 batek irudi sinesgarri batekin datu biltegiak erantzun zuela frogatzen du. 200 batek zerbitzu-exzeptzio dokumentu batekin frogatzen du ez zuela erantzun, eta exzeptzioaren testuak biltegia izendatzen du normalean, ez bezeroa.
Irakurri datu biltegia zerbitzariaren aldetik
Hona hemen GeoServerren PostGIS erreferentzia: bertan zerrendatzen da biltegiak behar duena — hosta, portua, datu basea eta kredentzialak. Horrek guztiak GeoServerrek irekitzen duen konexioa deskribatzen du. Ezerk ez du deskribatzen mahaigaineko bezeroaren saio-hasiera bat. Irakurri lau eremu horiek zerbitzariaren sare-testuinguruari buruzko adierazpen gisa, eta «haiei bai, funtzionatzen die» tiket klase osoa maneiatzeko modukoa bihurtzen da.
Horregatik da localhost datu biltegi batean hain ohikoa den akatsa. GeoServer prozesuaren beraren sare-testuingurua esan nahi du. GeoServer Dockerren exekutatzen bada PostGIS hostean exekutatzen den bitartean, localhost containerraren barrura seinalatzen du eta ez du ezer aurkitzen, eta VPN konfigurazioak ez du hori aldatzen.
Zerbitzarian, egiaztatu ibilbidea, listenerra eta autentifikazio-politika ordena horretan. PostgreSQLren host-ean oinarritutako autentifikazioak ikusten duen iturburu-helbidea konparatzen du, eta gateway batek itzul dezake, beraz HBA fitxategian bezero VPN pool bat gehitzeak gutxitan konpontzen du zerbitzari aldeko konexio bat. Probatu zerbitzariak egingo lukeen moduan: host bera, portu bera, erabiltzaile bera. Proba horrek arrakasta badu GeoServerrek oraindik huts egiten duen bitartean, aldea prozesuaren testuinguruan dago, ez datu basean.
ip route get 10.20.5.11
ss -tnp | grep 5432
psql "host=10.20.5.11 dbname=gis user=geoserver" -c 'select 1'
Pool eta cacheek egoera gordetzen dute aldaketen zehar
Datu biltegiko konexio-poolak socketak irekita mantentzen ditu. Poola sortu eta ordubete geroago sortu zen tunel batek ez dio poolari bide berririk ematen nahitaez, eta konexio inaktibo bat bide hil batean egon daiteke balidazio edo denbora-muga batek itxi arte. Egiaztatu instalatutako biltegiko balidazio-ezarpenak berreskurapena suposatu beharrean, eta saihestu zerbitzu osoa berrabiarazteko tentazioa zein geruzak huts egin duen jakin aurretik.
Fitxen cacheek arazo horren ispilu-irudia sortzen dute: itxura oneko mapa bat zerbitza dezakete datu baseko konexioa hautsi eta askoz geroago. Cachea hustea «ea laguntzen duen» ikusteko, bidea bizirik zegoen esango zizun froga bakarra suntsitzea da.
Bi jatorriak izendatuta pasatu
Konponketa azkarra lortzen duen deskribapenak bi gauza izendatzen ditu: GeoServerrera iritsi zen bezero eskaera, eta GeoServerrek ezin izan zuen osatu backend eragiketa. Biak izanda, jabe egokiak huts egin zuen bidea konpon dezake. Lehenengoa bakarrik izanda, konponketa naturala datu basea publikoki erakustea da, eta horrek tiketa konpontzen du problema okerrago bat sortuz.
Idatzi geruza, erantzun-kodea, zerbitzari aldeko exzeptzioa eta hura sortu zuen container edo hosta. Lau lerro dira, eta anbiguotasuna erabat kentzen dute.