Lewati ke konten

Workbook Uji Asisten

Asisten TrainerSebagian terujiArti badge ini

Workbook ini dipakai setiap asisten trainer untuk menguji satu VM unik miliknya sendiri di dalam satu project kelompok bersama. Tujuannya bukan mengajar peserta, tetapi mengumpulkan bukti bahwa seluruh alur berjalan pada email masing-masing asisten, mulai dari fork repository instruktur sampai unggah data spasial ke GeoServer.

Setiap asisten mengerjakan workbook ini sendiri, satu per satu, dengan email yang sudah di-assign ke project. Tidak ada pengujian serentak yang diwajibkan, jadi satu orang tidak perlu menunggu asisten lain selesai. Setelah semua laporan terkumpul, hasilnya dipakai untuk menjawab satu pertanyaan besar: apakah satu project mampu menjalankan lima VM sekaligus dengan beban Next.js dan GeoServer pada spesifikasi default.

Jumlah asisten saat ini lima orang termasuk koordinator. Jika undangan email belum lengkap, lengkapi dulu lewat panduan setup project sebelum VM dibuat.

Yang sudah pernah diuji: satu email, satu project, tiga container, dari fork sampai halaman /portal terbuka, GeoServer bisa dibuka dan login, shapefile terunggah, dan layer terbaca lewat WFS. Bagian 24 tentang domain, DNS, dan HTTPS juga sudah lulus uji pada 12 September 2026, termasuk penerbitan sertifikat Let’s Encrypt dan perpanjangan otomatisnya.

Yang belum pernah diuji: lima VM berjalan bersamaan dalam satu project, undangan lima email beserta sepuluh role IAM, dan lima GitHub connection dalam satu project. Bagian yang belum diuji itulah yang wajib dibuktikan lewat workbook ini.

Pencadangan, pemantauan, pendaftaran mesin pencari, dan pembersihan resource sudah teruji pada 12 sampai 13 September 2026, jadi bukan lagi uji terbuka. Rincian buktinya ada pada kotak berikut.

Langkah teknis lengkap tidak diulang di sini. Setiap uji menunjuk bagian pada panduan deployment asisten, sedangkan nama resource dan pemeriksaan benturan mengikuti panduan batch peserta bagian 8 dan panduan setup project bagian 8.

Dokumen Dipakai untuk
Setup project Koordinator membuat project, mengaktifkan API, dan mengundang email asisten
Deployment asisten Asisten menjalankan fork, VM, Cloud Build, dan GeoServer
Batch peserta Pembagian slug, pemeriksaan benturan nama, dan peserta susulan
Workbook ini Mencatat status setiap uji dan mengumpulkan bukti
Troubleshooting Mencocokkan gejala error dengan solusi yang sudah terverifikasi
  • Satu email yang sudah di-assign koordinator ke project kelompok.
  • Akun GitHub yang akan memegang fork.
  • Slug unik maksimal 18 karakter. Boleh memakai nama pribadi, misalnya nama01 atau dhanypedia.
  • Billing project sudah aktif sehingga Compute Engine boleh membuat VM.
  • Node.js terpasang, karena seluruh pemeriksaan di laptop memakai Node.js, tanpa Docker.
  • Kuota di region sendiri masih tersedia. Yang paling cepat habis adalah alamat IP publik, yaitu 4 per region. Rinciannya pada panduan deployment bagian 10.

Isi satu baris per peserta. Kolom Status diisi Belum, Berjalan, atau Selesai. Lima baris pertama masih menunggu email yang belum dikonfirmasi.

Asisten Email GitHub Slug Zone Project ID Status
belum diisi nama01 asia-southeast2-b Belum
belum diisi nama02 asia-southeast2-b Belum
belum diisi nama03 asia-southeast2-b Belum
belum diisi nama04 asia-southeast2-b Belum
asisten05@example.com nama05 asia-southeast1-b Belum

Kolom Zone bukan sekadar catatan. Jatah alamat IP publik hanya 4 per region, jadi asisten kelima memang sengaja ditaruh di region lain. Kalau salah satu VM di asia-southeast2 perlu dibuat ulang dan keempat slotnya sedang terpakai, pindahkan akun itu ke asia-southeast1 dengan mengganti nilai ZONE saja.

Lembar hasil per asisten. Satu tabel untuk setiap orang.

Kolom Isi
Slug Nilai PARTICIPANT_ID
VM Nama VM dan zone
URL portal http://IP_EKSTERNAL_VM/portal
URL GeoServer http://IP_EKSTERNAL_VM/geoserver/web
Commit yang diuji Keluaran git rev-parse HEAD pada laptop
Waktu build Durasi build pertama dari halaman Cloud Build
Status akhir Selesai jika seluruh checkpoint lulus

Setiap asisten menjalankan tujuh uji ini sendiri secara berurutan. Tidak perlu menunggu asisten lain, dan tidak perlu menjalankan build bersamaan. Jangan melompat ke GeoServer sebelum container nextjs terbukti jalan, karena error NEXTJS_IMAGE akan menyamar sebagai error GeoServer.

# Uji Panduan bagian Bukti yang dikumpulkan
1 Fork repo, lengkapi berkas, verifikasi, commit, push 1, 2, 3 URL fork dan keluaran git log --oneline -1
2 Buat Service Account dan VM, lalu kunci alamat IP statis 5, 7, 9, 10 Keluaran gcloud compute instances describe
3 Clone fork, isi .env, nyalakan GeoServer dan Nginx 12, 13, 14 Keluaran sudo docker compose ps di VM
4 Hubungkan repository, buat trigger, push, lalu buka /portal 15, 16, 17, 18, 22 Status koneksi COMPLETE, build hijau, dan keluaran curl -sSIL
5 Buka GeoServer dan unggah data spasial 19, 20, 21 Keluaran WFS GetFeature
6 Catat beban memori default 23 Keluaran free -h, docker stats, dan OOMKilled
7 Hentikan VM 30 Status TERMINATED

Setelah seluruh asisten menyelesaikan uji 1 sampai uji 6, lanjutkan ke bagian 12 untuk pengukuran lima VM sekaligus. Uji 7 dijalankan setelah pengukuran itu selesai, bukan sebelumnya.

Uji ini dikerjakan dari laptop, sebelum menyentuh Google Cloud. Alasannya: repository instruktur belum memuat docker-compose.yml, nginx.conf, maupun .env.example, sedangkan Cloud Build membaca berkas itu dari fork. Kalau fork belum lengkap, build pertama gagal walaupun project GCP sudah benar.

  • Fork https://github.com/matiurari/personal-geoportal ke akun GitHub sendiri. Repository ini public, jadi fork tidak butuh izin khusus.
  • Beri nama fork personal-geoportal-peserta. Jika nama itu sudah terpakai, gunakan nama bawaan dan sesuaikan URL clone nanti.
  • Tambahkan docker-compose.yml dengan tiga service: nextjs, geoserver, dan nginx.
  • Tambahkan nginx.conf yang memuat blok location /geoserver/.
  • Tambahkan .env.example sebagai contoh isi .env.
  • Tambahkan /geoserver-data/ ke .gitignore.
  • Tambahkan scripts/check-config.mjs dari panduan bagian 1.
  • Tambahkan scripts/periksa-nginx.mjs dari panduan bagian 1.
  • Tambahkan GEOSERVER_ADMIN_PASSWORD ke .env.example dan isi di .env dengan openssl rand -hex 16, tanpa tanda dolar. Nilainya tidak ditulis di docker-compose.yml.
  • Periksa dua berkas YAML dengan node scripts/check-config.mjs sampai muncul tiga service.
  • Periksa struktur nginx.conf dengan node scripts/periksa-nginx.mjs nginx.conf.
  • Commit keenam berkas itu, lalu push ke branch main.
Checkpoint Perintah atau bukti Hasil
Fork bisa dibuka di browser URL fork
Enam berkas konfigurasi ada di fork Halaman repository GitHub
Kata sandi GeoServer tidak ada di repo grep GEOSERVER_ADMIN_PASSWORD docker-compose.yml menampilkan ${GEOSERVER_ADMIN_PASSWORD}
Tiga service terbaca Keluaran node scripts/check-config.mjs
Struktur nginx.conf valid Keluaran node scripts/periksa-nginx.mjs nginx.conf
Push berhasil Keluaran git log --oneline -1
Berkas konfigurasi ikut ter-push Keluaran git show --stat HEAD
  • Buka project kelompok memakai email yang sudah di-assign.
  • Tetapkan variabel Cloud Shell, termasuk slug sendiri.
  • Buat Service Account cb-deployer-SLUG beserta enam role-nya.
  • Berikan roles/artifactregistry.reader pada Service Account VM.
  • Berikan roles/iam.serviceAccountUser dari Service Account build ke Service Account VM.
  • Buat VM webgis-SLUG dengan e2-medium, Ubuntu 22.04 LTS, dan OS Login.
  • Kunci alamat IP publiknya menjadi alamat statis dengan nama webgis-ip-SLUG.
  • Masuk ke VM lewat IAP dan pastikan Docker serta gcloud CLI terpasang.
  • Pastikan dua firewall bersama sudah tersedia.
Checkpoint Perintah atau bukti Hasil
VM berstatus RUNNING gcloud compute instances describe
Tipe mesin e2-medium Kolom machineType.basename()
Alamat IP sudah statis gcloud compute addresses describe menampilkan status: IN_USE
Docker Compose aktif di VM sudo docker compose version
Firewall bersama terlihat gcloud compute firewall-rules list --filter

Catat juga slug asisten lain yang sudah memakai nama serupa, supaya tumbukan nama bisa dikesan lebih awal.

Slug lain yang sudah dipakai Nama resource yang bertabrakan

7. Uji 3: Clone fork dan nyalakan GeoServer

Section titled “7. Uji 3: Clone fork dan nyalakan GeoServer”
  • Clone fork ke VM lewat HTTPS tanpa token, lalu cp .env.example .env.
  • Pastikan git remote -v menunjuk ke fork sendiri, bukan ke repository instruktur.
  • Isi .env: NEXTJS_IMAGE=nginx:1.27-alpine, dua secret, GEOSERVER_ADMIN_PASSWORD, NEXTAUTH_URL dan BASE_URL memakai IP VM.
  • Jalankan sudo docker compose up -d --no-deps geoserver nginx supaya nextjs tidak ikut ditarik.
  • Periksa nginx_proxy berstatus running, bukan Exited. Kalau keluar dengan kode 1, berarti pola resolver belum ada di nginx.conf.
  • Jalankan sudo docker compose up -d geoserver nginx.
  • Pastikan geoserver_app berstatus running, bukan restarting.
Checkpoint Perintah atau bukti Hasil
Clone berhasil tanpa prompt Keluaran git log --oneline -1 di VM
Remote menunjuk ke fork sendiri Keluaran git remote -v
Tiga container terdaftar Keluaran sudo docker compose ps menampilkan nextjs_portal, geoserver_app, dan nginx_proxy
GeoServer selesai boot Log memuat Server startup in
Memori terpakai tiga container Keluaran free -h dan sudo docker stats --no-stream. Acuan terukur: GeoServer 882 MiB dari batas 2048 MiB

Catat waktu boot GeoServer, karena inilah beban terberat pada e2-medium.

Percobaan Waktu sampai Server startup in Catatan
Pertama
Setelah restart
  • Hubungkan fork ke Cloud Build sampai berstatus COMPLETE.
  • Simpan trigger dengan empat substitution variable.
  • Push commit dari laptop, bukan dari VM.
  • Tunggu seluruh step hijau.
  • Buka http://IP_EKSTERNAL_VM/portal.
  • Pastikan tidak ada ERR_TOO_MANY_REDIRECTS.
Checkpoint Perintah atau bukti Hasil
GitHub connection COMPLETE Halaman Cloud Build Repositories
Build hijau Status trigger terakhir
NEXTJS_IMAGE terisi sudo grep '^NEXTJS_IMAGE=' /opt/webgis/app/.env
Tag image sama dengan commit gcloud artifacts docker images list menampilkan tag berupa commit SHA, bukan latest
Halaman portal terbuka Keluaran curl -sSIL --max-redirs 3
Halaman refresh tanpa redirect loop Percobaan di browser

Isi tabel berikut untuk melacak apakah push satu asisten mengubah VM asisten lain. Kolom VM lain seharusnya tetap pada commit lama. Isi baris VM lain dari pemeriksaan slug asisten lain yang sudah selesai lebih dahulu.

Asisten yang push Commit VM sendiri berubah VM lain berubah

9. Uji 5: GeoServer dan unggah data spasial

Section titled “9. Uji 5: GeoServer dan unggah data spasial”

Ini bagian yang paling penting untuk diulang di VM sendiri, karena jalur GeoServer paling panjang dan paling sering memunculkan kendala.

  • Buka http://IP_EKSTERNAL_VM/geoserver/web.
  • Login memakai GEOSERVER_ADMIN_PASSWORD, bukan geoserver.
  • Buat workspace geoportal.
  • Salin public/data/batas_admin.zip ke container lalu ekstrak, karena store GeoJSON tidak tersedia.
  • Tambahkan store Shapefile dengan Data Source Name batas_admin.
  • Publish layer, dan pastikan Feature Type Details memuat kolom bertipe Geometry.
  • Berikan izin Read kepada ROLE_ANONYMOUS.
  • Panggil endpoint WFS dan pastikan jawabannya berisi features.
  • Restart container GeoServer dan pastikan layer tetap ada.
Checkpoint Perintah atau bukti Hasil
Halaman admin GeoServer terbuka Tangkapan halaman /geoserver/web
Login memakai kata sandi sendiri berhasil Halaman beranda GeoServer
Workspace geoportal tersimpan Daftar Workspaces
Layer geoportal:batas_admin tersimpan Daftar Layers
Kolom geometri dikenali Feature Type Details memuat kolom bertipe Geometry
Layer bisa dibaca tanpa login Keluaran WFS GetFeature berisi FeatureCollection
Layer bertahan setelah restart Keluaran WFS setelah restart

Catat juga jalur yang gagal, karena jalur gagal lebih berguna daripada jalur yang berhasil.

Jalur yang dicoba Hasil Pesan error
/geoserver/web tanpa slash
/geoserver/web/ dengan slash
/geoserver/wfs

Catatan dari pengujian 11 September 2026. Jalur yang berhasil dipakai adalah /geoserver/web tanpa slash, karena GeoServer mengalihkan bentuk berslash ke bentuk tanpa slash. Store GeoJSON tidak tersedia pada instalasi bawaan, sehingga data diubah menjadi shapefile lebih dahulu. Layer hasil unggahan bertahan setelah container di-restart.

10. Uji 6: Beban memori pada spesifikasi default

Section titled “10. Uji 6: Beban memori pada spesifikasi default”

Spesifikasi default sengaja dipertahankan supaya kendala nyata muncul. Jangan menaikkan tipe mesin sebelum tabel ini terisi.

Angka pada kolom acuan berasal dari pengukuran nyata 11 September 2026 pada satu VM e2-medium dengan tiga container berjalan. Pakai sebagai pembanding, bukan target.

Metrik Acuan terukur Hasil pengukuranmu
Memori tersedia (free -h) 2,3 GiB dari 3,8 GiB
Memori GeoServer (docker stats) 882 MiB dari batas 2048 MiB
Memori Next.js (docker stats) 46 MiB
Memori Nginx (docker stats) 4 MiB
OOMKilled ketiga container false
Waktu boot GeoServer 46.996 ms

Keputusan yang diambil setelah pengukuran:

  • Heap 2048m dipertahankan karena masih aman, dengan pemakaian jauh di bawah batas.
  • Heap diturunkan ke 1024m karena muncul OOMKilled.
  • Tipe mesin dinaikkan ke e2-standard-2 karena heap serendah apa pun tidak cukup.

Alasan keputusan:

Jalankan penghentian VM setelah pengukuran pada bagian 12 selesai, karena lima VM harus menyala bersamaan untuk pengukuran itu.

  • Hentikan VM milik sendiri setelah pengukuran selesai.
  • Pastikan status TERMINATED.
  • Periksa Billing Reports untuk memastikan tidak ada biaya compute yang berjalan.
  • Pastikan static IP dan disk diperhitungkan dalam pemeriksaan biaya.
VM Commit terakhir Status akhir Catatan biaya

12. Uji bareng: lima VM dalam satu project

Section titled “12. Uji bareng: lima VM dalam satu project”

Bagian ini dikerjakan setelah kelima asisten menyelesaikan uji 1 sampai uji 6. Tujuannya menjawab satu pertanyaan: apakah satu project dengan lima VM e2-medium yang menjalankan Next.js dan GeoServer pada spesifikasi default masih berjalan wajar. Pengukuran ini tidak perlu build serentak, cukup kelima VM hidup pada waktu yang sama.

  1. Setiap asisten menyalakan VM miliknya dengan gcloud compute instances start "$VM_NAME" --zone="$ZONE".
  2. Setiap asisten memastikan tiga container berjalan dengan sudo docker compose ps.
  3. Setiap asisten memeriksa /portal dan /geoserver/web miliknya, lalu mencatat waktu respons yang terasa. Pemeriksaan bisa lewat alamat IP publik atau lewat terowongan IAP.
  4. Akun koordinator menjalankan pemeriksaan terpusat di bawah ini.
Cloud Shell koordinator
PROJECT_ID="geoportal-kelompok-a-xxxxx"
# Seluruh VM harus berstatus RUNNING pada saat yang sama
gcloud compute instances list \
--filter="name~'^webgis-'" \
--format="table(name,zone,status,machineType.basename())"
# Periksa kuota region. Ketiga baris ini yang menentukan berapa VM masih bisa dibuat.
gcloud compute regions describe asia-southeast2 --format=json \
| python3 -c 'import json,sys
for q in json.load(sys.stdin)["quotas"]:
m = q["metric"]
if any(k in m for k in ("CPUS","ADDRESSES","INSTANCES","SSD","DISKS")):
print("%-26s %7s / %s" % (m, q["usage"], q["limit"]))'
gcloud compute project-info describe --format=json \
| python3 -c 'import json,sys
for q in json.load(sys.stdin)["quotas"]:
if "CPUS" in q["metric"]:
print("%-26s %7s / %s" % (q["metric"], q["usage"], q["limit"]))'

Catatan pembacaan kuota: nilai CPUS dan CPUS_ALL_REGIONS baru diperbarui beberapa menit setelah VM dibuat, sedangkan INSTANCES dan kuota disk langsung berubah. Jangan menyimpulkan apa pun dari selisih CPU kalau VM baru saja dibuat.

Isi satu baris per asisten pada waktu pengukuran yang sama.

Asisten VM Status VM Container jalan Respons /portal Respons /geoserver/web OOMKilled Catatan
Pertanyaan Jawaban Bukti
Berapa VM yang berhasil hidup bersamaan?
Apakah kuota alamat IP publik cukup, atau ada VM yang harus memakai --no-address?
Apakah ada VM yang kehabisan memori saat lima VM hidup?
Apakah waktu buka /geoserver/web masih wajar?
Apakah Cloud Build satu asisten mengganggu VM asisten lain?

Kesimpulan bersama:

  • Lima VM e2-medium aman dengan spesifikasi default.
  • Lima VM aman, tetapi heap GeoServer perlu diturunkan ke 1024m.
  • Lima VM tidak aman, perlu naik ke e2-standard-2 atau pembagian project tambahan.

Setiap temuan baru ditulis ke halaman Troubleshooting GCP bagian 6b, bukan ke berkas baru. Isi tabel berikut lebih dahulu supaya temuan bisa dibahas bersama.

# Uji Gejala Dugaan penyebab Solusi yang dicoba Status
1
2
3

Nilai Status berisi Terbuka, Tertutup, atau Perlu keputusan instruktur.

14. Pertanyaan yang perlu dijawab setelah pengujian

Section titled “14. Pertanyaan yang perlu dijawab setelah pengujian”

Lima pertanyaan ini menentukan apakah modul dan panduan perlu direvisi.

  1. Apakah e2-medium cukup untuk tiga container pada data latihan?
  2. Apakah jalur /geoserver/web bertahan setelah kata sandi GeoServer diganti?
  3. Apakah lima GitHub connection dalam satu project saling mengganggu?
  4. Apakah satu project cukup untuk lima VM yang hidup bersamaan?
  5. Apakah undangan lima email pada satu project menimbulkan kendala IAM?

Jawaban singkat beserta bukti:

Pertanyaan Jawaban Bukti
1
2
3
4
5

Hasil uji Dhany 13 September 2026 dicatat pada workbook-dhanypedia.md. Pemantauan akses portal melalui Nginx sudah teruji; pemeriksaan database dan layanan lain secara terpisah belum tercakup.

Untuk tiap asisten, catat project/VM/check/policy ID, konfigurasi condition, waktu stop, respons gagal, waktu incident baru dan email firing, waktu start dan HTTP 200, serta email recovered untuk incident yang sama. Bedakan durasi incident dengan latensi notifikasi.