GeoServer ও PostGIS: আসল VPN পথটি সার্ভারের
আপনার ল্যাপটপ GeoServer-এ পৌঁছালে তা এটা বলে না যে GeoServer PostGIS-এ পৌঁছায় কি না। দুই উৎস, ক্যাশের সীমা এবং ডেটা স্টোরের নিজস্ব উৎস তুলনা করুন।
আপনি QGIS-এ লেয়ার খোলেন এবং তা রেন্ডার হয়। একই VPN-এ থাকা সহকর্মী একই লেয়ারের জন্য ত্রুটি পান। কেউ সিদ্ধান্তে আসে যে VPN নষ্ট, আর পরের ঘণ্টাটি যায় কোনো ডেটাবেস সরাতে বা এমন পোর্ট খুলতে যার কখনোই দরকার ছিল না। ডেস্কটপ থেকে আসা অনুরোধ আর GeoServer যে কোয়েরি PostGIS-এ করে, তারা আলাদা মেশিন থেকে, আলাদা নেটওয়ার্ক নেমস্পেসে, আলাদা ক্রেডেনশিয়াল নিয়ে বেরোয়। এই দুই পথ আলাদা করাই নির্ণয়ের বড় অংশ।
দুটি সংযোগ, দুই উৎস
QGIS -> client's permitted path (often the VPN) -> GeoServer listener
GeoServer -> server's permitted path -> PostGIS listener
দ্বিতীয় তির প্রথম কম্পিউটারের টানেল উত্তরাধিকারে পায় না। কনটেইনারে চলা GeoServer কনটেইনারের নেটওয়ার্ক স্ট্যাক পায়, হোস্টের নয়, এবং ব্রিজ নেটওয়ার্কে থাকা কনটেইনার এমন ডেটাবেসে পৌঁছাতে পারে যেখানে হোস্ট পৌঁছায় না, বা উল্টোটাও। তাই একই ব্যবহারকারী একই সেশনে সফল ও ব্যর্থ দুটোই হতে পারেন, উত্তর ক্যাশ থেকে এসেছে না তাজা কোয়েরি থেকে তার উপর নির্ভর করে।
| 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 |
যে ধাপটি সত্যিই ব্যর্থ হয়েছে তা খুঁজুন
সেবা-স্তরের প্রত্যাখ্যান, নিজের ডেটা স্টোরে না পৌঁছানো ইমেজ অনুরোধ, আর একটি লেয়ারে অনুমতির সমস্যা ব্রাউজার ট্যাবে একই রকম দেখায় আর সার্ভার লগে সম্পূর্ণ আলাদা। নির্দিষ্ট ক্রিয়াটি চান, তারপর একই টাইমস্ট্যাম্পের জন্য সার্ভারের নিজের ইভেন্ট পড়ুন।
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"
দ্বিতীয় অনুরোধের বিশ্বাসযোগ্য ইমেজসহ 200 প্রমাণ করে ডেটা স্টোর উত্তর দিয়েছে। সেবা-ব্যতিক্রম নথিসহ 200 প্রমাণ করে দেয়নি, আর ব্যতিক্রমের লেখা সাধারণত ক্লায়েন্টের বদলে স্টোরের নাম নেয়।
ডেটা স্টোর সার্ভারের দিক থেকে পড়ুন
GeoServer-এর PostGIS রেফারেন্স স্টোরের যা দরকার তা তালিকাভুক্ত করে: হোস্ট, পোর্ট, ডেটাবেস ও ক্রেডেনশিয়াল। এ সবই GeoServer যে সংযোগ খোলে তার বর্ণনা দেয়। এর কিছুই ডেস্কটপ ক্লায়েন্ট থেকে লগইন বর্ণনা দেয় না। এই চারটি ক্ষেত্রকে সার্ভারের নেটওয়ার্ক প্রসঙ্গ সম্পর্কে বিবৃতি হিসেবে পড়ুন, আর «তাদের এখানে চলে» টিকিটের পুরো শ্রেণি সমাধানযোগ্য হয়ে ওঠে।
তাই localhost ডেটা স্টোরে এত সাধারণ ভুল। এর অর্থ GeoServer প্রক্রিয়ার নিজের নেটওয়ার্ক প্রসঙ্গ। যদি GeoServer Docker-এ চলে আর PostGIS হোস্টে চলে, localhost কনটেইনারের ভেতরে নির্দেশ করে এবং কিছু পায় না, আর কোনো VPN কনফিগারেশন তা বদলায় না।
সার্ভারে পথ, শ্রোতা এবং প্রমাণীকরণ নীতি এই ক্রমে যাচাই করুন। PostgreSQL-এর হোস্টভিত্তিক প্রমাণীকরণ যে উৎস ঠিকানা দেখে তার সঙ্গে মেলায়, যা একটি গেটওয়ে অনুবাদ করতে পারে, তাই HBA ফাইলে ক্লায়েন্ট VPN পুল যোগ করা সার্ভার-পক্ষের সংযোগ কদাচিৎ সারায়। সার্ভার যেমন করত তেমন পরীক্ষা করুন: একই হোস্ট, একই পোর্ট, একই ব্যবহারকারী। যদি ওই পরীক্ষা সফল হয় আর GeoServer তখনো ব্যর্থ হয়, তবে পার্থক্য ডেটাবেসে নয়, প্রক্রিয়ার প্রসঙ্গে।
ip route get 10.20.5.11
ss -tnp | grep 5432
psql "host=10.20.5.11 dbname=gis user=geoserver" -c 'select 1'
পুল ও ক্যাশ পরিবর্তনের মধ্য দিয়ে অবস্থা ধরে রাখে
ডেটা স্টোরের সংযোগ পুল সকেট খোলা রাখে। পুল তৈরির এক ঘণ্টা পরে আসা টানেল পুলকে নতুন পথ দেয়ই এমন নয়, আর নিষ্ক্রিয় সংযোগ মৃত পথে পড়ে থাকতে পারে যতক্ষণ না যাচাই বা সময়সীমা তা বন্ধ করে। ইনস্টল করা স্টোরের যাচাই সেটিংস দেখুন, পুনরুদ্ধার ধরে নেওয়ার বদলে, আর কোন লেয়ার ব্যর্থ হয়েছে তা জানার আগে পুরো সেবা পুনরায় চালু করার লোভ এড়ান।
টাইল ক্যাশ এই সমস্যার দর্পণ-প্রতিবিম্ব তৈরি করে: ডেটাবেস সংযোগ ভাঙার বহু পরে পর্যন্ত তারা ঠিক দেখতে পাওয়া মানচিত্র পরিবেশন করতে পারে। ক্যাশ খালি করা যাতে «দেখি কাজে লাগে কি না» সেই একমাত্র প্রমাণ নষ্ট করে যা আপনাকে বলত কোন পথ জীবন্ত ছিল।
দুই উৎসের নাম নিয়ে হস্তান্তর করুন
যে বিবরণ দ্রুত সমাধান পায় তা দুটি জিনিস বলে: যে ক্লায়েন্ট অনুরোধ GeoServer-এ পৌঁছেছিল, আর যে ব্যাকএন্ড ক্রিয়া GeoServer সম্পূর্ণ করতে পারেনি। দুটোই থাকলে সঠিক মালিক ব্যর্থ পথটি সারাতে পারেন। কেবল প্রথমটি থাকলে স্বাভাবিক সমাধান ডেটাবেস প্রকাশ্যে খুলে দেওয়া, যা টিকিটটিকে আরও খারাপ সমস্যা বানিয়ে সমাধান করে।
লেয়ার, প্রতিক্রিয়া কোড, সার্ভার-পক্ষের ব্যতিক্রম এবং যে কনটেইনার বা হোস্ট এটি তৈরি করেছে তা টুকে রাখুন। এগুলো চারটি লাইন, আর এরা অস্পষ্টতা সম্পূর্ণভাবে দূর করে।