Lewati ke konten

Workbook Uji Asisten

Asisten TrainerBelum diuji

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, dua container, dari fork sampai halaman /portal/ terbuka. Yang belum pernah diuji: tiga container termasuk GeoServer, unggah data spasial ke GeoServer, dan lima VM berjalan bersamaan dalam satu project. Bagian yang belum diuji itulah yang wajib dibuktikan lewat workbook ini.

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

Dokumen Dipakai untuk
Setup project Koordinator membuat project, mengaktifkan API, dan mengundang email asisten
Deployment asisten Asisten menjalankan fork, VM, Cloud Build, dan GeoServer
Uji project kelompok Pembagian slug dan pemeriksaan benturan nama antar asisten
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.
  • Docker atau Podman terpasang. Kalau tidak ada, pemeriksaan memakai Node.js saja sudah cukup.
  • Kuota e2-medium di region asia-southeast2 masih tersedia untuk lima VM.

Isi satu baris per asisten. Kolom Status diisi Belum, Berjalan, atau Selesai. Baris kelima disiapkan untuk asisten yang emailnya belum dikonfirmasi.

Asisten Email GitHub Slug Project ID Status
belum diisi nama01 Belum
belum diisi nama02 Belum
belum diisi nama03 Belum
belum diisi nama04 Belum
asisten05@example.com nama05 Belum

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 7, 9, 10 Keluaran gcloud compute instances describe
3 Clone fork, isi .env, nyalakan GeoServer dan Nginx 14 Keluaran sudo docker compose ps di VM
4 Hubungkan repository, buat trigger, push 15, 16, 17 Status koneksi COMPLETE dan build hijau
5 Verifikasi tiga container dan buka /portal/ 18, 22 Keluaran docker compose ps dan curl -sSIL
6 Buka GeoServer dan unggah data spasial 19, 20, 21 Keluaran WFS GetFeature
7 Catat beban memori default 23 Keluaran free -h, docker stats, dan OOMKilled
8 Hentikan VM 27 Status TERMINATED

Setelah seluruh asisten menyelesaikan delapan uji di atas, lanjutkan ke bagian 12 untuk pengukuran lima VM sekaligus.

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.
  • Ganti GEOSERVER_ADMIN_PASSWORD, jangan biarkan ISI_PASSWORD_GEOSERVER.
  • Periksa dua berkas YAML dengan node scripts/check-config.mjs sampai muncul tiga service.
  • Periksa sintaks nginx.conf dengan perintah Node pada panduan bagian 2.
  • Commit kelima berkas itu, lalu push ke branch main.
Checkpoint Perintah atau bukti Hasil
Fork bisa dibuka di browser URL fork
Lima berkas ada di fork Halaman repository GitHub
Kata sandi GeoServer sudah diganti grep GEOSERVER_ADMIN_PASSWORD docker-compose.yml
Tiga service terbaca Keluaran node scripts/check-config.mjs
Nginx menerima sintaksnya Keluaran pemeriksaan Node pada panduan bagian 2
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.
  • 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()
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 dengan dua secret berbeda dan NEXTAUTH_URL memakai IP VM.
  • 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
Dua container terdaftar Keluaran sudo docker compose ps
GeoServer selesai boot Log memuat Server startup in
Memori terpakai dua container Keluaran free -h

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
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, karena belum pernah diuji tuntas.

  • Buka http://IP_EKSTERNAL_VM/geoserver/web/.
  • Login memakai GEOSERVER_ADMIN_PASSWORD, bukan geoserver.
  • Buat workspace geoportal.
  • Tambahkan store GeoJSON dari berkas public/data/batas_admin.geojson.
  • Publish layer geoportal:batas_admin.
  • 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
Layer bisa dibaca tanpa login Keluaran WFS GetFeature
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/
/geoserver/
/geoserver/wfs

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.

Metrik Sebelum unggah data Setelah unggah data Setelah tiga container penuh
Memori tersedia (free -h)
Memori GeoServer (docker stats)
CPU GeoServer (docker stats)
OOMKilled
Waktu boot GeoServer

Keputusan yang diambil setelah pengukuran:

  • Heap -Xmx2048m dipertahankan karena masih aman.
  • 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 membuka /portal/ dan /geoserver/web/ miliknya, lalu mencatat waktu respons yang terasa.
  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())"
# Jumlah VM juga bisa dilihat dari metrik CPU dan memori jika agent monitoring aktif
gcloud compute instances list --filter="name~'^webgis-'" --format="value(name)" | wc -l
# Periksa kuota CPU region, karena lima e2-medium memakai 10 vCPU
gcloud compute regions describe asia-southeast2 \
--format="value(quotas.filter(metric:CPUS).limit,quotas.filter(metric:CPUS).usage)"

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 vCPU region mencukupi untuk lima e2-medium?
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