8
Konfigurasi, Menjalankan Lokal, dan Deployment
Halaman ini merangkum tiga hal yang dibutuhkan untuk menjalankan repository: variabel environment, perintah npm, dan dua jalur deploy yang tersedia. Isi berkas data yang disajikan server dibahas di Model Data quran.json dan juz.json, sedangkan proses pengambilan datanya dibahas di Crawler: Pipeline Pengambilan Data.
Peta konfigurasi ke target deploy
config.js adalah satu-satunya modul yang memuat .env dengan path: '.env' eksplisit, lalu mengekspor tiga nilai ke pemakainya. Server tidak memakai config.js; api/server.js memanggil dotenv sendiri. Satu-satunya pemakai config.js adalah crawler/script.js. config.js:1-111 crawler/script.js:52 api/server.js:23
graph TD
env[".env"] --> cfg["config.js"]
env --> srv["api/server.js"]
cfg --> crawl["crawler/script.js"]
cfg --> mongo["MONGODB_URI tidak dipakai"]
crawl --> qjson["data/quran.json"]
qjson --> srv
srv --> vjson["vercel.json @vercel/node"]
srv --> appjson["app.json heroku-18"]
vjson --> gha["vercel_production.yml"]
appjson --> docker["dockerfile.build"]
gha --> vtarget["Vercel production"]
docker --> htarget["Heroku dyno"]
style env fill:#f59e0b,color:#000
style cfg fill:#f59e0b,color:#000
style vjson fill:#f59e0b,color:#000
style appjson fill:#f59e0b,color:#000
style gha fill:#f59e0b,color:#000
style docker fill:#f59e0b,color:#000
style crawl fill:#8b5cf6,color:#fff
style qjson fill:#336791,color:#fff
style mongo fill:#dc2626,color:#fff
style srv fill:#2d7d46,color:#fff
style vtarget fill:#2d7d46,color:#fff
style htarget fill:#2d7d46,color:#fff
%% fig: Sumber konfigurasi menuju target deploy
%% desc: Variabel .env masuk ke config.js dan api/server.js, crawler menghasilkan data/quran.json, lalu api/server.js dikemas oleh vercel.json atau app.json menuju masing-masing target deploy.Variabel environment
config.js mendestrukturisasi tiga nama dari process.env dan mengekspornya kembali dengan nama yang sama. .env.example mendeklarasikan dua nama yang berbeda dari yang dibaca config.js. config.js:3-114 .env.example:1-35
Variabel dibaca config.js | Nama di .env.example | Dipakai untuk | Status |
|---|---|---|---|
SOURCE_API_BASEURL | SOURCE_SOURCE_API_BASEURL | membentuk URL ${SOURCE_API_BASEURL}/surah/${surah}/editions/... di crawler/script.js:186 | wajib untuk npm run crawl |
SOURCE_API_BASEURL_2 | SOURCE_SOURCE_API_BASEURL_2 | fetch(SOURCE_API_BASEURL_2) untuk daftar tafsir surah di crawler/script.js:1847 | wajib untuk npm run crawl |
MONGODB_URI | tidak ada | tidak dipakai di kode lain mana pun | tidak terpakai |
PORT | tidak ada | port server.listen di api/server.js:88 | opsional, jatuh ke 3000 |
⚠️ Awalan
SOURCE_SOURCE_di.env.exampletidak cocok denganSOURCE_API_BASEURLdanSOURCE_API_BASEURL_2yang dibacaconfig.js. Menyalin berkas contoh apa adanya menghasilkanundefinedpada URL crawler. .env.example:1-35 config.js:4-69
Komponen .env sendiri tidak masuk ke commit; .gitignore memuat .env bersama node_modules, quran-tafsir.json, dan .vercel. .gitignore:1-4
Perintah npm
package.json menetapkan api/server.js sebagai main dan menyediakan empat skrip. package.json:410 package.json:9-1411
| Perintah | Skrip | Yang dijalankan |
|---|---|---|
npm run build | build | npm install |
npm start | start | node api/server.js |
npm run dev | dev | nodemon api/server.js |
npm run crawl | crawl | node crawler/script.js |
dotenv ada di dependencies, sehingga npm install sudah cukup untuk npm start di lingkungan baru. nodemon dan isomorphic-fetch berada di devDependencies, jadi npm run dev dan npm run crawl membutuhkan dependensi development. package.json:15-2412
api/server.js menentukan port dari process.env.PORT dengan nilai cadangan 3000, lalu mencatat 'Server running at port:' saat listen berhasil. api/server.js:88 api/server.js:16-1813
⚠️
npm run crawlmenulis ulangdata/quran.jsonsecara penuh lewatwriteFile('./data/quran.json', ...)setelah mengulang surah 1 sampai 114. Perintah ini juga membaca../data/quran-tafsir.jsonyang di-ignoreoleh.gitignore, sehingga hasil clone bersih tidak bisa menjalankannya sebelum berkas itu disediakan sendiri. crawler/script.js:20314 crawler/script.js:1015 .gitignore:2-2
Deploy ke Vercel
vercel.json memakai @vercel/node untuk api/server.js dan mengarahkan seluruh path /.* ke berkas itu, sehingga tidak ada static build terpisah. vercel.json:1-1116
.vercelignore mengeluarkan screenshots dan crawler dari unggahan, jadi kode crawler tidak ikut ke deploy. .vercelignore:1-2
Workflow Vercel Production Deployment berjalan pada push ke branch main dan menjalankan lima langkah berurutan. .github/workflows/vercel_production.yml:1-2717
graph LR
trig["push ke main"] --> co["actions/checkout@v2"]
co --> inst["npm install --global vercel@latest"]
inst --> pull["vercel pull --environment=production"]
pull --> build["vercel build --prod"]
build --> dep["vercel deploy --prebuilt --prod"]
dep --> live["Vercel production"]
style trig fill:#f59e0b,color:#000
style co fill:#f59e0b,color:#000
style inst fill:#f59e0b,color:#000
style pull fill:#8b5cf6,color:#fff
style build fill:#8b5cf6,color:#fff
style dep fill:#2d7d46,color:#fff
style live fill:#2d7d46,color:#fff
%% fig: Urutan langkah deploy Vercel di GitHub Actions
%% desc: Push ke main memicu checkout, pemasangan Vercel CLI, penarikan environment, build artefak, lalu deploy prebuilt ke production.⚠️ Di blok
envworkflow,VERCEL_ORG_IDdiisi darisecrets.VERCEL_TEAM_ID, bukan dari secret organisasi tersendiri. NilaiVERCEL_TEAM_IDdanVERCEL_ORG_IDjadi selalu sama, sehinggavercel pullmengandalkanVERCEL_PROJECT_IDuntuk membedakan proyek. .github/workflows/vercel_production.yml:2-518
Menurut README, deploy inilah yang melayani alamat https://api.quran.gading.dev, dan README menyarankan deploy mandiri karena alamat tersebut dibatasi rate limiter. README.md:5-1119
Deploy ke Heroku
app.json mendefinisikan nama aplikasi, stack heroku-18, dan satu buildpack heroku/nodejs. Tidak ada skrip start khusus di berkas ini; Heroku memakai skrip start dari package.json. app.json:2-1220 package.json:1121
dockerfile.build adalah image untuk tahap build, bukan runtime: basisnya heroku/heroku:18 dan isinya hanya RUN npm install, tanpa CMD atau EXPOSE. dockerfile.build:1-222
Perbandingan jalur deploy
| Aspek | Vercel | Heroku |
|---|---|---|
| Berkas konfigurasi | vercel.json vercel.json:3-623 | app.json app.json:6-1124 |
| Entrypoint | api/server.js lewat @vercel/node vercel.json:3-623 | skrip start node api/server.js package.json:1121 |
| Otomasi | workflow push ke main .github/workflows/vercel_production.yml:7-1025 | tidak ada workflow di .github |
| Basis image | tidak ada | heroku/heroku:18 di dockerfile.build:126 |
| Cakupan berkas | crawler dikecualikan .vercelignore:1-2 | seluruh repository |