Workbook Uji Asisten
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.
1. Peran setiap dokumen
Section titled “1. Peran setiap dokumen”| 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 |
2. Perlengkapan sebelum mulai
Section titled “2. Perlengkapan sebelum mulai”- 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
nama01ataudhanypedia. - 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-mediumdi regionasia-southeast2masih tersedia untuk lima VM.
3. Lembar identitas
Section titled “3. Lembar identitas”Isi satu baris per asisten. Kolom Status diisi Belum, Berjalan, atau Selesai.
Baris kelima disiapkan untuk asisten yang emailnya belum dikonfirmasi.
| Asisten | 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 |
4. Urutan pengujian
Section titled “4. Urutan pengujian”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.
5. Uji 1: Fork dan lengkapi repository
Section titled “5. Uji 1: Fork dan lengkapi repository”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-geoportalke 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.ymldengan tiga service:nextjs,geoserver, dannginx. - Tambahkan
nginx.confyang memuat bloklocation /geoserver/. - Tambahkan
.env.examplesebagai contoh isi.env. - Tambahkan
/geoserver-data/ke.gitignore. - Tambahkan
scripts/check-config.mjsdari panduan bagian 1. - Ganti
GEOSERVER_ADMIN_PASSWORD, jangan biarkanISI_PASSWORD_GEOSERVER. - Periksa dua berkas YAML dengan
node scripts/check-config.mjssampai muncul tiga service. - Periksa sintaks
nginx.confdengan 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 |
6. Uji 2: Service Account dan VM
Section titled “6. Uji 2: Service Account dan VM”- Buka project kelompok memakai email yang sudah di-assign.
- Tetapkan variabel Cloud Shell, termasuk slug sendiri.
- Buat Service Account
cb-deployer-SLUGbeserta enam role-nya. - Berikan
roles/artifactregistry.readerpada Service Account VM. - Berikan
roles/iam.serviceAccountUserdari Service Account build ke Service Account VM. - Buat VM
webgis-SLUGdengane2-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 -vmenunjuk ke fork sendiri, bukan ke repository instruktur. - Isi
.envdengan dua secret berbeda danNEXTAUTH_URLmemakai IP VM. - Jalankan
sudo docker compose up -d geoserver nginx. - Pastikan
geoserver_appberstatusrunning, bukanrestarting.
| 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 |
8. Uji 4: Cloud Build dan halaman portal
Section titled “8. Uji 4: Cloud Build dan halaman portal”- 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, bukangeoserver. - Buat workspace
geoportal. - Tambahkan store GeoJSON dari berkas
public/data/batas_admin.geojson. - Publish layer
geoportal:batas_admin. - Berikan izin
ReadkepadaROLE_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
-Xmx2048mdipertahankan karena masih aman. - Heap diturunkan ke
1024mkarena munculOOMKilled. - Tipe mesin dinaikkan ke
e2-standard-2karena heap serendah apa pun tidak cukup.
Alasan keputusan:
11. Uji 7: Hentikan VM
Section titled “11. Uji 7: Hentikan VM”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.
Langkah
Section titled “Langkah”- Setiap asisten menyalakan VM miliknya dengan
gcloud compute instances start "$VM_NAME" --zone="$ZONE". - Setiap asisten memastikan tiga container berjalan dengan
sudo docker compose ps. - Setiap asisten membuka
/portal/dan/geoserver/web/miliknya, lalu mencatat waktu respons yang terasa. - Akun koordinator menjalankan pemeriksaan terpusat di bawah ini.
PROJECT_ID="geoportal-kelompok-a-xxxxx"
# Seluruh VM harus berstatus RUNNING pada saat yang samagcloud 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 aktifgcloud compute instances list --filter="name~'^webgis-'" --format="value(name)" | wc -l
# Periksa kuota CPU region, karena lima e2-medium memakai 10 vCPUgcloud compute regions describe asia-southeast2 \ --format="value(quotas.filter(metric:CPUS).limit,quotas.filter(metric:CPUS).usage)"Tabel pengukuran bersama
Section titled “Tabel pengukuran bersama”Isi satu baris per asisten pada waktu pengukuran yang sama.
| Asisten | VM | Status VM | Container jalan | Respons /portal/ |
Respons /geoserver/web/ |
OOMKilled |
Catatan |
|---|---|---|---|---|---|---|---|
Hasil yang menentukan keputusan
Section titled “Hasil yang menentukan keputusan”| 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-mediumaman dengan spesifikasi default. - Lima VM aman, tetapi heap GeoServer perlu diturunkan ke
1024m. - Lima VM tidak aman, perlu naik ke
e2-standard-2atau pembagian project tambahan.
13. Lembar temuan
Section titled “13. Lembar temuan”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.
- Apakah
e2-mediumcukup untuk tiga container pada data latihan? - Apakah jalur
/geoserver/web/bertahan setelah kata sandi GeoServer diganti? - Apakah lima GitHub connection dalam satu project saling mengganggu?
- Apakah satu project cukup untuk lima VM yang hidup bersamaan?
- Apakah undangan lima email pada satu project menimbulkan kendala IAM?
Jawaban singkat beserta bukti:
| Pertanyaan | Jawaban | Bukti |
|---|---|---|
| 1 | ||
| 2 | ||
| 3 | ||
| 4 | ||
| 5 |