Binabasa ng QGIS ang anumang landas na naaabot ng mga tagapagbigay ng data nito, kaya ang nakakonektang VPN ay kalahati lamang ng setup. Nagbibigay ang tunnel sa desktop ng ruta at patakaran sa pagresolba ng pangalan; kailangan pa rin ng proyekto ang endpoint ng serbisyo, ang protocol ng provider at ang mga kredensyal na tatanggapin ng serbisyo. Tatlong magkakahiwalay na field ang mga ito, at ang pag-type ng pampublikong listener ng VPN sa isang field ng database ay wala sa mga ito. Sinusundan ng gabay na ito ang isang layer ng PostGIS mula sa form ng QGIS hanggang sa ibinalik na hilera at pinangalanan ang hangganang pinapatunayan ng bawat hakbang.

Magsimula sa layer, hindi sa VPN

Bawat uri ng layer ay umaabot sa ibang uri ng endpoint. Ang layer ng PostGIS ay nagbubukas ng koneksyon sa PostgreSQL na may host, port, database at role. Ang layer ng WMS o WFS ay kumukuha ng URL ng serbisyo at pagkatapos ay sinusuri ang dokumento ng mga kakayahan. Ang shapefile sa network share ay nangangailangan lamang ng landas ng file na kayang buksan ng operating system. Dahil tatlong magkaibang mekanismo ito, walang sinasabi ang walang laman na proyekto hanggang malaman mo kung alin ang ini-debug mo.

Tanungin ang operator ng GIS tungkol sa endpoint, port, kinakailangang pagkakakilanlan at patakarang pang-access na naaangkop sa iyong account. Panatilihin ang hostname ng serbisyo nang eksakto tulad ng inilabas kapag ang deployment ay umaasa sa pribadong DNS o sa mga pagsusuri ng pangalan sa certificate. Ang muling paggamit ng address ng host na kinopya mula sa naka-save na koneksyon ng ibang user ay ang pinakamabilis na paraan upang maabot ang isang makina na tumutugon ngunit may lumang database.

Ang mga ruta, pinapayagang resource at pagresolba ng pangalan ay pag-aari ng nagpapatakbo ng VPN. Hindi maaaring mag-install ang form ng data source ng rutang hindi kailanman ipinadala ng profile ng tunnel, at hindi nito mapapalawak ang patakaran ng gateway. Kapag nagresolba ang host at tumugon ang port, tapos na ang bahagi ng network ng problema.

Ilagay ang pribadong endpoint na inilabas ng operator

Ang form ng PostgreSQL sa QGIS ay sumasalamin sa mga field na inaasahan ng libpq, kaya punan ito sa parehong pagkakasunod-sunod ng koneksyon sa command line. Kinukuha ng serbisyo at host ang makina ng database, ng port ang listener na talagang binubuksan ng server, at ng database ang partikular na catalog sa halip na default ng server. Itago ang password sa isang configuration ng authentication at hindi sa file ng proyekto, upang ang shared na proyekto ay hindi magdala ng kredensyal.

Paghiwalayin ang dalawang pangalan bago mag-type ng kahit ano. Ang pangalan ng gateway ay para sa VPN client at ang pangalan ng database ay para sa QGIS, at bihirang pareho silang host.

VPN gateway:   vpn.gis.lab.example       (profile only, not a data source)
Database host: db.gis.lab.example:5432   (PostGIS service)
Database name: gis_prod
TLS mode:      verify-full

Kung ang database ay nasa ibang makina sa likod ng gateway, ang pangalan sa form ay dapat ang makinang iyon. Ang pribadong DNS sa pamamagitan ng tunnel ang nagpapagana sa pangalan, at ang proyektong nagresolba lamang habang konektado ay kumikilos nang tama, hindi nagko-cache nang masama.

Panatilihing hiwalay ang TLS mode ng database sa tunnel

Ang SSL sa pangalan ng produktong VPN ay naglalarawan sa tunnel, hindi sa session ng database. Ipinapasa ng QGIS ang SSL mode ng PostgreSQL sa libpq, at kinokontrol ng mode na iyon kung bineberipika ng client ang certificate ng server at kung sinusuri nito ang hostname sa loob nito. verify-fullginagawa ang dalawa, kaya ito ang mode na sulit panatilihin kapag dala ng certificate ang pangalan ng serbisyo.

Ang pagbaba ng mode sa disable dahil naka-encrypt na ang tunnel ay nag-aalis ng pagsusuri na ang naabot na server ay ang hiniling na server. Kapag nabigo ang beripikasyon, ang karaniwang dahilan ay hindi pagtutugma ng pangalan o kulang na root certificate, at pareho itong maaaring ayusin nang hindi pinapahina ang koneksyon. Itutok ang sslrootcert sa CA na inilalathala ng operator at panatilihing kapareho ng pangalan sa certificate ang hostname sa form.

Ang tunnel na may pribadong ruta at database na may valid na certificate ay maaari pa ring mabigo sa role. Ang mga kredensyal ng aplikasyon ay hiwalay sa mga kredensyal ng VPN, at ang account na nagpapatunay sa gateway ay walang implicit na karapatan sa PostgreSQL.

Subukan ang bawat hangganan nang sunud-sunod at basahin ang unang kabiguan

Magtrabaho mula sa client patungo sa labas sa isang takdang pagkakasunod-sunod: pagresolba ng pangalan, maabot ng TCP, TLS, authentication at pagkatapos ang query mismo. Ang unang hakbang na nabigo ang tanging sulit iulat, at ang paglundag pasulong ay nagdudulot ng mga mensahe ng error mula sa hangganang hindi mo pa naaabot. Apat na command ang sumasaklaw sa unang apat na hakbang.

getent hosts db.gis.lab.example
nc -vz db.gis.lab.example 5432
psql "host=db.gis.lab.example port=5432 dbname=gis_prod sslmode=verify-full" -c 'select 1'
curl -sS 'https://wms.gis.lab.example/ows?service=WMS&request=GetCapabilities' | head -c 200

Ang walang laman na sagot mula sa getent ay problema sa pagresolba, hindi problema sa database. Ang nc na tinanggihan o naubusan ng oras ay nangangahulugang kulang ang ruta o firewall rule, na pagwawasto sa panig ng gateway. Ang error sa TLS mula sa psql ay nangangahulugang mali ang certificate o pangalan, samantalang ang password authentication failed ay nangangahulugang naabot mo ang PostgreSQL at ang problema ay ang kredensyal. Para sa layer ng WMS, ibinabalik ng tawag na curl ang XML ng mga kakayahan na pagsusuriin sana ng QGIS, kaya ang pahina ng login na HTML sa output na iyon ay agad na nagpapaliwanag ng walang laman na layer.

Ang error sa PostgreSQL ay mabuting balita kung ihahambing sa timeout. Pinapatunayan nito na tumugon ang destinasyon, na naglilipat ng tiket mula sa network team patungo sa administrator ng database o GIS. Ang pagpapanatili ng pagkakaibang iyon sa ulat ay nakakatipid ng isang ikot.

Kapag bumukas ang proyekto na may walang laman na layer

Sa loob ng QGIS, suriin ang naka-save na source ng layer bago muling maglagay ng anuman. Ipinapakita ng mga property ng layer ang eksaktong connection string na iniligtas ng proyekto, at ang doble na entry ng koneksyon na may lumang host ay karaniwang natira mula sa dating network ng opisina. Ang muling pag-load ng proyekto pagkatapos ayusin ang koneksyon ay hindi laging muling nagbabasa ng provider, kaya alisin ang layer at idagdag muli mula sa naitamang koneksyon.

Pagkatapos ay tiyakin na ang configuration ng authentication ay ang nakakabit sa layer, hindi lamang ang nasa listahan. Ang layer na na-save sa ibang configuration ng authentication ay tahimik na nabigo sa panel ng browser habang ang hiwalay na psql pagsubok ay pumasa.

Kapag na-load ang layer, i-save ang proyekto na may mga relative path para sa mga file lamang at panatilihing pinangalanan ang mga koneksyon ng serbisyo ayon sa kanilang endpoint. Ang susunod na taong magmamana ng proyekto ay masasabi kung aling host ang inaasahan ng sirang layer nang hindi binubuksan ang tiket.

Kaugnay na mga artikulo