Runbook Konfigurasi dan Penyebaran
Pendahuluan
Runbook ini mendokumentasikan pengembangan lokal, build, runtime Docker, perilaku Nginx, konfigurasi runtime, dan langkah-langkah pemecahan masalah umum untuk frontend Ravenxcope.
Pengembangan Lokal
Instal dependensi menggunakan Yarn (direkomendasikan untuk konsistensi dengan Docker):
yarn install --frozen-lockfile
Perintah Umum:
- Dev Server:
yarn dev - Build:
yarn build - Lint:
yarn lint
Perintah npm yang setara mungkin berfungsi secara lokal, tetapi build Docker produksi secara ketat menggunakan Yarn.
Variabel Lingkungan
Didokumentasikan dalam .env.example:
VITE_API_BASE_URL=
VITE_ANALYTICS_AI_CHAT_ENABLED=false
| Variabel | Wajib | Default / Fallback | Tujuan |
|---|---|---|---|
VITE_API_BASE_URL | Direkomendasikan | http://localhost:5009/api | URL basis backend |
VITE_ANALYTICS_AI_CHAT_ENABLED | Tidak | false | Mengaktifkan UI chat AI analitik |
Untuk produksi, tetapkan variabel-variabel ini pada kontainer agar docker-entrypoint.sh dapat menginjeksikannya.
Build Docker
Dockerfile menggunakan build dua tahap:
-
Tahap Builder:
- Menggunakan
node:22-alpine. - Menginstal dependensi dengan
yarn install --frozen-lockfile. - Menghasilkan aset produksi dengan
yarn build.
- Menggunakan
-
Tahap Runtime:
- Menggunakan
nginx:alpine. - Melayani aset dari
/usr/share/nginx/html. - Menginjeksikan konfigurasi runtime melalui
docker-entrypoint.sh. - Mengekspos port
8000.
- Menggunakan
Injeksi Konfigurasi Runtime
Saat startup kontainer, docker-entrypoint.sh menulis variabel ke dalam window.__APP_CONFIG__ sebelum memulai Nginx. Hal ini memungkinkan image yang sama disebarkan ke berbagai lingkungan (Staging, Produksi) tanpa harus melakukan build ulang.
Perilaku Nginx
nginx/default.conf mendengarkan pada port 8000 dan menyediakan:
- Penyajian Statis: Melayani aset yang dibangun dengan caching jangka panjang.
- Kompresi: Mengaktifkan gzip untuk aset teks dan JSON.
- Keamanan: Menambahkan
X-Frame-Options,X-Content-Type-Options, danX-XSS-Protection. - Fallback SPA: Menggunakan
try_files $uri $uri/ /index.htmluntuk mendukung perutean sisi klien. - Kesegaran Konfigurasi: Melayani
/config.jsdengan header no-cache.
Daftar Periksa Penyebaran (Deployment Checklist)
Sebelum menyebarkan, verifikasi hal-hal berikut:
- Keterjangkauan API: API Backend harus dapat dijangkau dari browser pengguna.
- Origin API:
VITE_API_BASE_URLharus berupa origin backend publik tanpa akhiran/api. - Status Chat:
VITE_ANALYTICS_AI_CHAT_ENABLED=truememerlukan titik akhir chat backend yang terkonfigurasi. - Pemetaan Port: Port Nginx
8000harus diarahkan dengan benar. - Verifikasi Konfigurasi: Pastikan
/config.jsmengembalikan nilai runtime yang diharapkan. - Fallback Rute: Pastikan rute dasbor dengan tautan dalam (deep-linked) disegarkan dengan benar.
Pemecahan Masalah
Permintaan login mengarah ke localhost
- Penyebab:
VITE_API_BASE_URLhilang atau tidak valid. - Pemeriksaan: Verifikasi konten
/config.js. Harus berupa URLhttpatauhttpsyang valid.
404 saat penyegaran dasbor
- Penyebab: Fallback SPA tidak aktif.
- Pemeriksaan: Pastikan
nginx/default.confterpasang dengan benar dan berisi direktiftry_files.
Perubahan konfigurasi tidak tercermin
- Penyebab: Caching browser atau CDN pada
/config.js. - Pemeriksaan: Verifikasi header
Cache-Control: no-storetersedia.
Auth mengalihkan ke login
- Kemungkinan Penyebab:
- Cookie sesi hilang atau kadaluwarsa.
- Backend mengembalikan
401. - Ketidakcocokan URL basis API.
- Pembatasan kebijakan cookie SameSite.
- Pemeriksaan: Devtools browser untuk keberadaan cookie dan payload respons API.
Chat AI analitik hilang
- Kemungkinan Penyebab:
VITE_ANALYTICS_AI_CHAT_ENABLEDbernilai false.- Titik akhir status chat backend tidak terjangkau atau melaporkan dinonaktifkan.
- Pemeriksaan:
/config.jsdanGET /api/analytics/chat/status.
Hal-hal yang Bukan Tujuan (Non-Goals)
Image frontend ini hanya melayani aplikasi browser dan konfigurasi runtime. Image ini tidak menjalankan layanan backend, database, atau agen sensor.