Berikut ini adalah langkah-langkah konfigurasi PostgreSQL/PostGIS setelah prosedur instalasinya selesai dilaksanakan pada Part 1.
Setelah proses instalasi PostgreSQL (dan PostGIS, PgRouting, dll.) selesai dilaksanakan, hal pertama yang paling mendasar untuk dilakukan adalah menginisiasi built-in database-nya. Command-nya adalah sebagai berikut:
[rinjani@nusantara ~]$ sudo postgresql-setup --initdb --unit postgresql
[rinjani@nusantara ~]$ sudo systemctl enable postgresql.service
[rinjani@nusantara ~]$ sudo systemctl start postgresql.service
PostgreSQL sudah aktif dan siap diakses.
Pada praktiknya, Anda akan membutuhkan 2 (dua) jenis user, yaitu superuser dan regular user. User dengan akses level superuser dimanfaatkan untuk create, modify dan drop database maupun users, serta mengatur grant access untuk regular users. Sedangkan regular users digunakan untuk mengakses database dari aplikasi.
[rinjani@nusantara ~]$ sudo su - postgres
Shell akan berubah menjadi:
[postgres@nusantara ~]$
Jalankan commands:
[postgres@nusantara ~]$ createuser -sdrP pgdbadmin
Parameter -sdrP digunakan untuk create user yang username-nya pgdbadmin, dan memiliki access privilege sebagai superuser dan langsung prompting password-nya. Anda akan diminta untuk memasukkan password untuk user tersebut dan konfirmasinya.
[postgres@nusantara ~]$ createuser -P pgdbuser
Parameter -P digunakan untuk create user yang username-nya pgdbuser, dan memiliki access privilege sebagai regular user dan langsung prompting password-nya. Anda akan diminta untuk memasukkan password untuk user tersebut dan konfirmasinya.
Untuk mengakses sebuah database, regular users butuh grant access yang dijalankan oleh superuser.
Masih di shell yang sama, langkah berikutnya adalah membuat template database yang nantinya akan digunakan sebagai template database aplikasi.
[postgres@nusantara ~]$ createdb postgis_template
Masuk ke database postgis_template yang baru saja di-create dengan menggunakan psql (PostgreSQL Client):
[postgres@nusantara ~]$ psql -d postgis_template
Maka tampilan shell-nya akan berubah menjadi:
postgis_template-#
postgis_template-# CREATE EXTENSION postgis;
postgis_template-# CREATE EXTENSION postgis_topology;
postgis_template-# CREATE EXTENSION fuzzystrmatch;
postgis_template-# CREATE EXTENSION address_standardizer;
postgis_template-# CREATE EXTENSION pgcrypto;
Jika Anda membutuhkan extension PgRouting, maka tinggal jalankan:
postgis_template-# CREATE EXTENSION pgrouting;
Hingga tahap ini template database Anda sudah memiliki seluruh spatial-related extensions yang dibutuhkan.
Untuk konfirmasinya, Anda bisa langsung menjalankan commands:
postgis_template-# SELECT postgis_full_version();
postgis_template-# SELECT * FROM pgr_version();
Untuk keluar dan kembali ke PostgreSQL Shell, jalankan command:
postgis_template-# \q
By default, password untuk built-in superuser PostgreSQL (postgres) adalah KOSONG atau tidak ber-password. Hal ini tentu saja berbahaya bagi sistem dari segi keamanan. Oleh sebab itu, langkah-langkahnya adalah sebagai berikut:
Catatan: shell adalah postgres, atau langsung melanjutkan dari command pada bagian sebelumnya.
[postgres@nusantara ~]$ psql
Shell yang muncul adalah:
postgres-#
Command nya:
postgres-# \password
Anda akan diminta untuk memasukkan password untuk superuser postgres ini dan konfirmasinya.
Setelah mengganti password selesai, keluar ke PostgreSQL shell lagi:
postgres-# \q
Sehingga tampilan shell command-nya menjadi:
[postgres@nusantara ~]$
Keluar dari PostgreSQL Client shell:
[postgres@nusantara ~]$ exit
dan shell-nya akan kembali menjadi:
[rinjani@nusantara ~]$
Ada 2 (dua) file konfigurasi utama di PostgreSQL, yaitu postgresql.conf dan pg_hba.conf. Untuk meng-edit-nya, jalankan command:
[rinjani@nusantara ~]$ sudo systemctl stop postgresql.service
[rinjani@nusantara ~]$ sudo nano /var/lib/pgsql/data/postgresql.conf
Ganti:
listen_address = 'localhost'
menjadi: listen_address = '*'
yang berarti server akan listen dari seluruh IP address yang terdaftar di local-machine-nya, dan
#port = 5432
menjadi port = 5432
sehingga PostgreSQL bisa diakses melalui port 5432.
Save + exit, dan edit file pg_hba.conf dengan menjalankan command:
[rinjani@nusantara ~]$ sudo nano /var/lib/pgsql/data/pg_hba.conf
Ganti entries berikut ini untuk mengatur mode akses dari dalam:
local all all peer
host all all 127.0.0.1/32 ident
host all all ::1/128 ident
menjadi:
local all all trust
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
Dan tambahkan entry yang disesuaikan dengan setting jaringan server Anda, untuk mengatur akses dari luar, pada akhir file:
host all all 192.168.1.0/0 md5
Entry ini mengasumsikan server Anda memiliki IP address 192.168.1.xxx/24.
Save + exit, buka port 5432 di firewalld dan aktifkan kembali PostgreSQL:
[rinjani@nusantara ~]$ sudo firewall-cmd --permanent --zone=FedoraServer --add-port=5432/tcp
[rinjani@nusantara ~]$ sudo firewall-cmd --reload
[rinjani@nusantara ~]$ sudo systemctl start postgresql.service
Pada dasarnya, creating database adalah create database berdasar template yang sudah spatially-enabled (yaitu postgis_template), dan mengatur akses untuk user(s)-nya . Langkah-langkahnya:
[rinjani@nusantara ~]$ sudo su - postgres
[postgres@nusantara ~]$ createdb webmap_db -T postgis_template -O pgdbadmin
Penjelasan command di atas adalah create database dengan nama webmap_db, berdasar template (-T) postgis_template, yang owner (superuser)-nya (-O) pgdbadmin.
Berikutnya, masuk ke database webmap_db untuk mengatur akses user (dalam hal ini: pgdbuser):
[postgres@nusantara ~]$ psql -d webmap_db
Dan jalankan commands:
webmap_db=# GRANT CONNECT ON DATABASE webmap_db TO pgdbuser;
webmap_db=# GRANT ALL PRIVILEGES ON DATABASE webmap_db TO pgdbuser;
webmap_db=# \q
[postgres@nusantara ~]$ exit
Sehingga shell command-nya kembali menjadi:
[rinjani@nusantara ~]$
Lakukan langkah-langkah ini di workstation Anda.
FYI, PostGIS Shapefile and DBF Loader/Exporter adalah sebuah aplikasi sederhana yang menjadi bagian dari paket instalasi PostGIS. Instalasi PostGIS membutuhkan PostgreSQL yang sudah terinstall (dan aktif) sebelumnya. Nah, menurut opini saya, instalasi PostgreSQL dan PostGIS di workstation nggak berguna, kecuali hanya untuk "memancing" instalasi Application Stack Builder, biar bisa install PostGIS yang mana di proses instalasinya akan mengikutkan PostGIS Shapefile and DBF Loader Exporter. PostgreSQL dan PostGIS toh sudah ada di server. Tapi ya... mau gimana lagi? Let's just do it!
8.1. Download installer PostgreSQL dari EnterpriseDB/EDB, dan install sampai selesai.
Jika Anda akan langsung melakukan shapefile upload test, Anda bisa men-download 1 file dari situs Natural Earth. Ambil contoh, batas administrasi negara level 0.
8.3. Pilih PostgreSQL 10 (x64) on port 5432, dan klik Next >. Jangan pilih yang <remote server> yaa..., karena pilihan ini selanjutnya tidak menyediakan opsi instalasi Spatial Extensions (PostGIS dll.).
Tunggu beberapa saat, Application Stack Builder akan men-download list aplikasi yang bisa Anda install di tahap selanjutnya. Jika sudah muncul tampilan:
8.4. Pilih Npgsql, pgJDBC dan psqlODBC pada kelompok Database Drivers, dan PostGIS 2.5 Bundle for PostgreSQL 10 (64 bit) pada kelompok Spatial Extensions.
Klik Next >, dan tunggu beberapa saat hingga Application Stack Builder selesai men-download dan meng-install seluruh aplikasi yang sudah dipilih. Setelah selesai, keluar/matikan Application Stack Builder-nya dan buka Start menu.
Pilih (atau cari dulu) menu PostGIS 2.x Shapefile and DBF Loader Exporter. Tampilan aplikasinya:
Klik View connection details..., dan isikan Username: pgdbuser, Password: [password], Server Host: 192.168.1.23 dan port-nya: 5432, Database: webmap_db seperti ini:
Jika koneksinya sukses, maka pada bagian Log Window akan muncul log yang mengkonfirmasi bahwa koneksi berhasil.
Jika koneksi gagal, periksa kembali pengaturan koneksinya.
Sekarang saatnya Anda mencoba meng-upload sebuah shapefile ke PostgreSQL/PostGIS di server menggunakan PostGIS 2.x Shapefile and DBF Loader Exporter.
O ya, tapi lebih baik kita bahas dulu spesifikasi file yang pada bagian 8.1 di atas saya sarankan untuk di-download, yaitu batas administrasi negara level 0. Kalau kita ekstrak file ini, maka kita akan memiliki 1 set files yang yang nama file-nya identik, tapi extension-nya berbeda. Dalam konteks pembahasan ini, kita hanya akan fokus pada file ne_10m_admin_0_countries.prj
saja, karena pada saat upload shapefile nanti, kita butuh informasi SRID (Spatial Reference System Identifier).
File ber-extension *.prj
ini berisi informasi tentang CRS (Coordinate Reference System) yang diterapkan/digunakan oleh file ber-extension *.shp
dan *.shx
di direktori yang sama. Kalau Anda membuka file ini di ASCII text editor seperti Notepad atau Notepad++, dan Anda menemui entry yang bertuliskan WGS_1984, maka besar kemungkinan SRID -nya adalah EPSG 4326. Lebih lanjut lagi, "tebakan" SRID ini saya kira cukup masuk-akal karena shapefile ini coverage-nya world. Jika Anda ingin mengetahui lebih lanjut tentang CRS, WGS 1984, SRID, dan lain sebagainya yang terkait, silahkan gali lebih dalam, asal jangan "tersesat" saja (baca: menyerah, dan langsung ngikut paham bumi-datar. Hahaha...).
Kembali ke tampilan PostGIS Shapefile and DBF Loader Exporter, langsung saja klik Add File, maka dialog Select a Shape file muncul, pilih (klik) shapefile yang akan di-upload, dan klik Open.
Setelah klik Open, maka shapefile tersebut akan masuk ke Import List. Dalam tampilan ini mari kita fokus ke boks merah, yaitu kolom SRID.
Klik angka 0 dalam kolom, dan isi dengan angka 4326, dan klik pada ruang kosong dalam Import List, di bawah entry shapefile-nya. Untuk nama Table dan Geo Column yang akan jadi target di PostgreSQL/PostGIS biarkan saja apa-adanya.
Selanjutnya klik Import, dan tunggu beberapa saat sampai selesai. Jika tidak ada error saat proses upload, maka setelah selesai di Log Window-nya akan muncul konfirmasi bahwa upload shapefile-nya berhasil.
Sampai pada tahap ini, di PostgreSQL/PostGIS server sudah ada contoh geodata yang sudah siap diakses dari berbagai kanal.
Test mengakses PostGIS layer yang paling sederhana adalah dengan menggunakan Quantum GIS. Aktifkan Quantum GIS Anda, buat project baru, kemudian klik menu Layer -> Data Source Manager:
Setelah dialog Data Source Manager muncul, klik PostgreSQL pada bagian kiri, sehingga muncul tampilan koneksi ke PostgreSQL di bagian kanan, dan pada bagian Connections, klik New:
Setelah Anda klik New, maka akan muncul dialog Create a New PostGIS Connection.
Pada bagian Connection Information, isi Name: [email protected] (atau yang lain sesuka Anda), Service dibiarkan kosong saja, Host: 192.168.1.23, Port: 5432 dan Database: webmap_db.
Pada bagian Authentication, klik tab Basic, dan isi User name: pgdbuser, checkbox Store-nya di-check, Password diisi dengan password-nya pgdbuser, dan checkbox Store-nya dibiarkan unchecked saja.
Berikutnya Anda bisa melakukan connection testing dengan meng-klik Test connection. Konfirmasi berhasil atau tidak-nya koneksi akan muncul pada bagian atas dialog box ini.
Jika Anda ingin hanya menampilkan table yang memiliki geometry field saja, check saja checkbox pada opsi Don't resolve type of unrestricted columns (GEOMETRY).
Setelah Anda klik OK, maka table yang tadi sudah terbentuk saat kita meng-upload shapefile akan muncul sebagai pilihan layer yang akan ditampilkan.
Klik (pilih) pada table tersebut, kemudian klik Add pada bagian bawah dan tunggu sejenak hingga tampilan layer-nya muncul di belakang dialog Data Source Manager ini. Selanjutnya klik Close.
Jika layer ne_10m_admin_0_countries sudah muncul, maka test PostGIS layer Anda sudah berhasil.
Instalasi PgAdmin 4 sangat mudah. Anda tinggal men-download-nya dari download page di situsnya, dan laksanakan proses instalasi di workstation hingga selesai. Sebagai catatan, Anda akan diminta untuk membuat master password, yaitu password yang digunakan saat pertama kali mengakses PgAdmin 4 di workstation Anda.
Setelah Anda berhasil masuk ke PgAdmin 4, maka yang pertama kali harus dilakukan adalah create connection ke server PostgreSQL yang akan Anda akses.
Pada dialog ini, di tab General kita isi Name dengan Webmap Development Server (atau sesuka Anda), kemudian checkbox Connect now?-nya kita check, dan Comments-nya kita isi dengan deskripsi koneksinya.
Pindah ke tab Connection, kita isi Host name/address dengan 192.168.1.23 (IP server PostgreSQL-nya), Port: 5432, Username: pgdbadmin (biar bisa mengakses seluruh database yang ada), dan password-nya. Checkbox Save Password?-nya boleh di-check, tapi lebih baik dibiarkan unchecked saja, sehingga setiap kali koneksi Anda akan diminta untuk memasukkan password.
Kalau seluruh isian kita sudah benar, maka begitu kita klik Save, maka entry Webmap Development Server akan muncul di pilihan server pada PgAdmin 4:
Waktu kita unfold entry ini, maka akan muncul pilihan akses ke Databases, Login/Group Roles dan Tablespaces. Selanjutnya, kita akan fokus ke Databases dulu.
Setelah kita unfold Databases, maka akan terlihat 3 database, yaitu postgres (default database, yang digunakan oleh PostgreSQL), postgis_template (database yang sudah kita create sebelumnya dan kita fungsikan sebagai template database) dan webmap_db (database yang akan kita akses selanjutnya).
Masuk ke webmap_db -> Schemas -> public -> Tables, maka akan terlihat table bernama ne_10m_admin_0_countries, yang mana itu adalah hasil upload shapefile yang sudah kita laksanakan pada bagian sebelumnya.
Klik-kanan pada table tersebut (ne_10m_admin_0_countries), pilih View/Edit Data -> All Rows:
Maka selanjutnya pada bagian kanan (tampilan utama) dari PgAdmin 4 akan muncul tampilan query dan seluruh rows yang ada dalam table ne_10m_admin_0_countries.
Menariknya pada PgAdmin 4 ini, jika Anda scroll ke kanan terus hingga akhir table, akan ada sebuah button yang berfungsi untuk menampilkan/visualisasi data geometry-nya.
Kalau di-klik geometry viewer button ini, maka selanjutnya akan muncul webmap berbasis Leaflet.JS yang menampilkan data geometry-nya.
Sebagai catatan, basemap dari OpenStreetMap hanya akan muncul apabila SRID-nya EPSG 4326. Saya belum mencoba untuk EPSG 3857 atau lainnya. Untuk lebih jelasnya mengenai perbedaan antara EPSG 4326 dan EPSG 3857, dapat Anda baca di artikel bertajuk EPSG 4326 vs EPSG 3857 ini.
Test kemampuan Webmap Development Server selanjutnya adalah WMS/WFS services. Untuk melakukan test ini, Anda bisa memulainya dengan membuat WMS/WFS services melalui GeoServer yang sudah aktif di Webmap Development Server Anda. Langkah-langkahnya adalah sebagai berikut:
Pada bagian menu utama, (1) klik Workspaces, sehingga tampilan list seluruh workspace yang ada muncul, dan (2) klik Add new workspace.
Pada tampilan New Workspace, isi Name: webmap, dan Namespace URI: http://webmap.mysite.com/webmap
. Sebagai catatan, nama workspace hanya dibatasi hingga 10 karakter saja oleh GeoServer-nya.
Setelah Anda klik Submit, maka workspace baru (webmap) akan muncul/masuk dalam list workspace. Tapi by default, workspace ini (webmap) masih disabled dan harus di-enable dulu, serta seluruh services nya (WMS, WFS, WMTS, dll.) diaktifkan. Untuk melaksanakannya, Anda harus mengedit workspace-nya. Klik pada workspace yang akan diedit (box merah pada gambar berikut):
Pada bagian Settings, checkbox berlabel Enabled di-check. Dan pada bagian Services, check (yang berarti aktifkan services-nya) seluruh checkboxes untuk WMS, WMTS, WFS dan WCS. Scroll ke bawah hingga akhir halaman, dan klik button Save.
Berikutnya, hubungkan workspace yang telah kita buat tersebut (webmap) dengan PostgreSQL/PostGIS-nya. Klik menu Stores, dan setelah muncul tampilan Stores, (2) klik pada Add new Store.
Pada tampilan New data source, klik pada PostGIS - PostGIS Database.
Berikutnya akan muncul tampilan New Vector Data Source, seperti pada gambar berikut:
Pada bagian Basic Store Info, pilih workspace yang akan dihubungkan dengan database melalui pilihan drop-down yang tersedia. Pada contoh ini kita pilih webmap. Kemudian untuk Data Source Name (DSN), kita beri nama saja dengan nama database-nya, yaitu webmap_db. FYI, tuliskan nama DSN tanpa spasi. Untuk Description, isikan dengan deskripsi DSN-nya. Di sini boleh ada spasi, tapi ya jangan panjang-panjang. Akhirnya, pastikan checkbox Enabled-nya di-check.
Pada bagian Connection Parameters, isi host: localhost (ingat, GeoServer dan PostgreSQL/PostGIS ada dalam host yang sama. Jadi aksesnya tetap ke localhost), port: 5432, database: webmap_db, user: pgdbuser, password: password Anda, dan checkbox Expose primary keys-nya di-check.
Berikutnya, scroll ke bawah, dan klik Save, maka berikutnya yang muncul adalah tampilan New Layer. Klik Publish, seperti pada gambar:
Proses selanjutnya adalah Edit Layer. Fokus ke tab Data. Untuk section Basic Resource Info, biarkan apa-adanya saja. Name dan Title: ne_10m_admin_0_countries. Pastikan checkboxes Enabled dan Advertised dalam keadaan di-check.
Kemudian pada bagian Coordinate Reference Systems, pada drop-down pilihan SRS handling, pilih Keep native. Ini berarti antara Native SRS dan Declared SRS-nya sama, yaitu EPSG 4326.
Di bawah bagian Coordinate Reference Systems, berikutnya adalah Bounding Boxes. Klik pada Compute from data untuk mendapatkan Native Bounding Box-nya, dan diikuti klik pada Compute from native bounds untuk mendapatkan Lat/Lon Bounding Box-nya (lihat box merah pada gambar di bawah ini),
sehingga seluruh field Min X, Min Y, Max X dan Max Y baik untuk Native Bounding Box dan Lat/Lon Bounding Box terisi semua.
Beralih ke tab Publishing, pastikan checkbox Queryable di-check. Untuk pilihan Opaque nantinya bisa Anda pilih jika diperlukan.
Terakhir, scroll ke bawah, dan klik Save.
Tampilan berikutnya yang bakal muncul adalah Layers, dimana WMS layer yang sudah di-create tadi sudah muncul dalam daftar seluruh layers yang aktif (lihat box merah).
Untuk melihat/preview layer-nya, masuk ke menu Layer Preview pada bagian/kelompok menu Data. Daftar seluruh layers yang bisa di-preview akan muncul, dan pada layer yang akan kita preview (ne_10m_admin_0_countries), klik pada link Openlayers (lihat box merah pada gambar berikut).
By default, GeoServer menggunakan library OpenLayers pada preview webmap-nya.
Preview dari WMS/WFS layer Anda akan tampil di tab baru browser, dan jika kita meng-klik pada salah-satu polygon, maka pada bagian bawah tampilan petanya akan muncul seluruh attributes yang persis-sama dengan fields di table PostgreSQL, seperti pada gambar berikut:
Hingga tahap ini, WMS/WFS services pada GeoServer Anda yang terhubung dengan PostgreSQL/PostGIS sudah siap diakses dengan menggunakan aplikasi lain, seperti Quantum GIS atau langsung ditampilkan dalam sebuah webmap dengan menggunakan JavaScript library seperti OpenLayers atau Leaflet.JS.
Hampir sama dengan menambahkan layer PostgreSQL/PostGIS, pada Quantum GIS kita dapat langsung menambahkan WMS/WMTS/WFS layer melalui menu Layer -> Data Source Manager. Pada dialog ini Anda dapat langsung menambahkan koneksi untuk WMS/WMTS dan WFS sekaligus, karena pengaturan akses untuk seluruh layanan data ini relatif sama perlakuannya. Pada contoh berikut ini kita akan memilih WMS/WMTS:
Setelah muncul dialog Data Source Manager, pilih WMS/WMTS pada menu di bagian kiri, dan pada bagian kanan, di tab Layers, klik New.
Jika dialog Create a New WMS/WMTS Connection muncul, isi Name: WMS @ Webmap Development Server, dan URL: http://192.168.1.23:8080/geoserver/webmap/wms
, dan klik OK.
Setelah koneksi selesai dibuat, klik Connect.
Data Source Manager akan menampilkan WMS/WMTS layers pada list-nya, dan pilih layer ne_10m_admin_0_countries. Kemudian klik Add, tunggu beberapa saat hingga seluruh polygon-nya muncul di background, dan klik Close.
Dan akhirnya WMS/WMTS layer ne_10m_admin_0_countries akan muncul seperti dalam gambar berikut:
Lakukan hal yang sama untuk memunculkan WFS layer.
Exhausting? Tedious? Or so overwhelming? Semua! Saya sendiri merasa bahwa sebanyak-banyak dan sedetail-detailnya saya menulis Part 4 ini, tentu saja masih belum bisa meng-cover seluruh use case PostgreSQL/PostGIS dalam praktiknya di dunia nyata. Ini masih di kulit-luarnya saja, dan itu-pun masih se-titik. Tolong beri saya masukan! PRs are welcome!
Instalasi dan konfigurasi sebuah tech-stack adalah sebuah craftmanship -- semakin mendalam Anda menggali bagaimana sebuah komponen bekerja dalam ekosistemnya, in-and-out, maka semakin paham pula Anda terhadap seluruh ketidaksempurnaan yang pernah Anda jumpai dalam hidup.
- Part 1: Post-Installation / OS Configuration
- Part 2: Configuring Apache Tomcat for GeoServer
- Part 3: GeoServer Installation / Configuration
- Part 4: Configuring PostgreSQL and PostGIS (this file)
- Part 5: Configuring MySQL Database
- Part 6: Configuring PHP, PHP-FPM and Nginx
- Part 7: Configuring Nginx as a Reverse-Proxy
- Part 8: Configuring Pure-FTPd