Praktik 7: GeoServer
Materi Praktik 7 mengajarkan menjalankan GeoServer, membuat workspace, menyambung data store PostGIS, mempublikasikan layer, lalu mengatur hak akses layer. Seluruh langkahnya dikerjakan di antarmuka web GeoServer.
Berkas yang diperiksa:
Praktik 7/Praktik 7: Penggunaan Geoserver (.docx)Praktik 7/GeoServer_Presentasi.pptxPraktik 11/2.Praktik Deploy Project: Google Cloud Platform (.docx), rujukan firewall
P7-1. Firewall yang dibutuhkan tidak pernah dibuat (Tinggi)
Section titled “P7-1. Firewall yang dibutuhkan tidak pernah dibuat (Tinggi)”Praktik 7 meminta membuka GeoServer dari browser, dan Praktik 11 meminta SSH ke VM serta membuka portal. Ketiganya menuntut dua aturan firewall:
| Aturan | Untuk |
|---|---|
allow-webgis-http |
Port 80 dan 443, supaya portal dan GeoServer terbuka |
allow-webgis-iap-ssh |
Port 22 dari rentang IAP, supaya SSH bisa masuk |
Materi hanya memeriksa keduanya:
gcloud compute firewall-rules list \ --filter="name:(allow-webgis-http OR allow-webgis-iap-ssh)"Tidak ada satu pun perintah gcloud compute firewall-rules create di seluruh materi. Kedua
aturan itu diandaikan sudah ada, dan tidak dijelaskan siapa yang membuatnya.
Akibatnya bergantung pada skema yang dipakai:
- Pada skema project kelompok, akun master yang membuatnya. Peserta yang membaca materi akan mengira dirinya harus membuatnya sendiri, lalu bentrok dengan nama yang dipakai bersama.
- Pada skema satu project satu orang, tidak ada yang membuatnya. SSH lewat IAP gagal lebih dahulu, sehingga seluruh langkah Praktik 11 setelah itu tidak bisa dijalankan.
Daftar hasil yang kosong juga tidak dijelaskan. Peserta tidak tahu apakah itu berarti firewall-nya belum siap atau ada yang salah dengan projectnya.
P7-2. GeoServer memakai kredensial super user database (Tinggi)
Section titled “P7-2. GeoServer memakai kredensial super user database (Tinggi)”Praktik 7 meminta mengisi data store dengan “koneksi sesuai dengan koneksi PostgreSQL anda”, dan
koneksi yang tersedia adalah user postgres. Pola yang sama dipakai di Praktik 11.
GeoServer lalu memegang kredensial yang bisa menghapus tabel. Salah memilih tabel saat membuat
store sudah cukup untuk merusak data, dan kredensial itu juga tersimpan di dalam konfigurasi
GeoServer pada volume geoserver-data.
P7-3. GEOSERVER_CORS_ALLOWED_ORIGINS tidak dibaca image kartoza (Sedang)
Section titled “P7-3. GEOSERVER_CORS_ALLOWED_ORIGINS tidak dibaca image kartoza (Sedang)”Praktik 11 menyetel dua variabel ini pada service geoserver:
- GEOSERVER_CORS_ENABLED=true- GEOSERVER_CORS_ALLOWED_ORIGINS=*Saya periksa source image kartoza/docker-geoserver. Fungsi web_cors() pada
scripts/functions.sh hanya menyalin berkas web.xml bawaan, dan tidak ada satu baris pun yang
membaca kedua variabel tersebut. Pada scripts/env-data.sh juga tidak ada.
CORS sebenarnya diatur di build_data/web.xml dengan cors.allowed.origins bernilai *, dan
nilainya selalu *.
Artinya dua baris itu konfigurasi mati. Mengubahnya menjadi domain tertentu juga tidak akan berpengaruh, dan origin tetap terbuka untuk semua.
P7-4. Tidak ada pemeriksaan otomatis untuk klaim akses publik (Sedang)
Section titled “P7-4. Tidak ada pemeriksaan otomatis untuk klaim akses publik (Sedang)”Praktik 7 ditutup dengan klaim:
Buka browser dalam Incognito mode, copy url GeoJSON lalu buka di Incognito, layer akan terbuka tanpa muncul permintaan login karena layer sudah diberikan akses publik
Klaim ini tidak disertai cara membuktikannya selain membuka Incognito secara manual. Peserta tidak punya cara mengetahui apakah hak aksesnya benar tanpa mengulang pemeriksaan itu.
P7-5. Namespace URI memakai alamat yang akan berubah (Rendah)
Section titled “P7-5. Namespace URI memakai alamat yang akan berubah (Rendah)”Materi meminta mengisi Namespace URI dengan domain GeoServer saat ini diikuti nama workspace,
dan Praktik 11 memakai http://IP_EKSTERNAL_VM/geoportal. Namespace URI melekat pada setiap
layer dan tidak ikut berubah saat alamatnya berganti ke subdomain atau HTTPS. Layer yang
dipublikasikan sebelum alamatnya tetap akan memakai alamat lama.
Solusi
Section titled “Solusi”Untuk P7-1, firewall
Section titled “Untuk P7-1, firewall”Bagi tugasnya dengan tegas, dan tulis di modul siapa mengerjakan apa:
| Aturan | Dibuat oleh | Peserta |
|---|---|---|
allow-webgis-http |
Penyelenggara, sekali per project | Hanya memeriksa |
allow-webgis-iap-ssh |
Penyelenggara, sekali per project | Hanya memeriksa |
Lalu tambahkan hasil yang harus muncul di modul, supaya daftar kosong tidak menimbulkan tebakan:
gcloud compute firewall-rules list \ --filter="name:(allow-webgis-http OR allow-webgis-iap-ssh)" \ --format="table(name,direction,allowed[].map().firewall_rule().list())"Dua baris harus muncul. Bila kosong, peserta berhenti dan melapor, tidak membuat sendiri.
Untuk P7-2, kredensial database
Section titled “Untuk P7-2, kredensial database”Buat peran khusus baca-saja untuk GeoServer:
psql "$DATABASE_URL" -v ON_ERROR_STOP=1 \ -v sandi_geoserver='GANTI_SANDI_KUAT' -f 01_peran_geoserver.sqlBerkas itu membuat dua peran: geoserver_ro untuk publikasi layer, dan geoserver_rw bila nanti
ada fitur edit. Keduanya bukan super user, dan hanya geoserver_ro yang perlu dipakai pada
data store.
Isi form data store PostGIS dengan peran itu, bukan dengan postgres.
Untuk P7-3, variabel CORS
Section titled “Untuk P7-3, variabel CORS”Hapus dua baris ini dari docker-compose.yml, karena tidak dibaca image:
- GEOSERVER_CORS_ENABLED=true- GEOSERVER_CORS_ALLOWED_ORIGINS=*CORS yang berlaku diatur build_data/web.xml dengan cors.allowed.origins bernilai *. Bila
perlu dibatasi, caranya dengan menyalin web.xml ke volume EXTRA_CONFIG_DIR, bukan lewat
variabel lingkungan.
Pada skema ini Nginx melayani aplikasi dan GeoServer pada origin yang sama, sehingga CORS tidak diperlukan sama sekali.
Untuk P7-4, klaim akses publik
Section titled “Untuk P7-4, klaim akses publik”Ganti langkah Incognito manual dengan perintah yang bisa diulang:
curl -sS -o /dev/null -w "%{http_code}\n" \ "http://IP_VM/geoserver/wfs?service=WFS&version=2.0.0\&request=GetFeature&typeNames=geoportal:batas_admin&outputFormat=application/json&count=1"Kode 200 berarti layer terbuka untuk publik. Kode 401 atau 403 berarti hak aksesnya belum
disetel, dan peserta tahu persis langkah mana yang kurang.
Berkas periksa-geoserver.mjs melakukan pemeriksaan ini beserta empat pemeriksaan lain dalam
satu perintah.
Untuk P7-5, Namespace URI
Section titled “Untuk P7-5, Namespace URI”Tetapkan alamat akhir lebih dahulu, lalu pakai alamat itu sejak awal. Bila belum tahu, pakai bentuk yang tidak akan berubah:
http://IP_STATIS_VM/geoportalAlamat IP statis tidak berubah, sedangkan nama host bisa berubah. Namespace URI melekat pada setiap layer dan tidak ikut berubah saat alamatnya berganti.
Berkas siap pakai
Section titled “Berkas siap pakai”| Berkas | Isi |
|---|---|
Praktik 7/sql/01_peran_geoserver.sql |
Peran geoserver_ro dan geoserver_rw |
Praktik 7/tools/periksa-geoserver.mjs |
Periksa login, workspace, store, layer, akses publik, dan CORS |
Ringkasan
Section titled “Ringkasan”| Butir | Tingkat | Inti |
|---|---|---|
| P7-1 | Tinggi | Firewall yang dibutuhkan tidak pernah dibuat |
| P7-2 | Tinggi | GeoServer memakai kredensial super user database |
| P7-3 | Sedang | Dua variabel CORS tidak dibaca image yang dipakai |
| P7-4 | Sedang | Klaim akses publik tidak bisa diperiksa otomatis |
| P7-5 | Rendah | Namespace URI memakai alamat yang akan berubah |