Skip to content

Installation Guide

Semua backend services ditulis dalam Rust. Install via rustup:

Terminal window
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# Verifikasi
rustc --version # >= 1.80
cargo --version

Services berkomunikasi via gRPC. protoc dibutuhkan untuk compile .proto files:

Terminal window
# macOS
brew install protobuf
# Ubuntu/Debian
apt-get install -y protobuf-compiler
# Verifikasi
protoc --version # >= 25.x

Auth API, Main API, dan Reference API masing-masing punya database sendiri:

Terminal window
# macOS
brew install postgresql@15
brew services start postgresql@15
# Buat databases
createdb waqfuel_auth
createdb waqfuel_main
createdb waqfuel_reference

Alternatif: gunakan Neon untuk managed PostgreSQL (yang dipakai di production).

Dipakai oleh Auth API untuk caching dan rate limiting:

Terminal window
# macOS
brew install redis
brew services start redis
# Verifikasi
redis-cli ping # PONG

Frontend clients menggunakan Node.js:

Terminal window
# Install via fnm (recommended)
fnm install --lts
fnm use lts-latest
node --version # >= 20.x
npm --version

Untuk manage S3 bucket secara lokal:

Terminal window
brew install awscli
aws configure # masukkan credentials
Terminal window
cd waqfuel-auth-api
git submodule update --init --recursive
cp .env.example .env

Edit .env — key variables:

Terminal window
API_PORT=3001
GRPC_PORT=50051
DATABASE_URL=postgresql://localhost/waqfuel_auth
# Generate RSA key pair untuk JWT
openssl genrsa -out keys/private.pem 2048
openssl rsa -in keys/private.pem -pubout -out keys/public.pem
JWT_PRIVATE_KEY_PATH=keys/private.pem
JWT_PUBLIC_KEY_PATH=keys/public.pem
JWT_KEY_ID=key-dev-001
# Super admin — di-seed saat pertama kali startup
SUPER_ADMIN_EMAIL=admin@waqfuel.com
SUPER_ADMIN_PASSWORD=changeme123
# gRPC endpoints service lain
GRPC_REFERENCE=localhost:50050
GRPC_NOTIF=localhost:50052

Jalankan migrations dan start:

Terminal window
# Install sqlx-cli
cargo install sqlx-cli --features postgres
# Run migrations
sqlx migrate run
# Start service
cargo run
Terminal window
cd waqfuel-main-api
git submodule update --init --recursive
cp .env.example .env

Key variables:

Terminal window
API_PORT=8081
DATABASE_URL=postgresql://localhost/waqfuel_main
# Auth service JWKS endpoint untuk validasi JWT
JWKS_AUTH=http://localhost:3001/.well-known/jwks.json
# gRPC auth service
GRPC_AUTH=localhost:50051
# AWS S3
AWS_REGION=ap-southeast-1
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
AWS_BUCKET_ASSETS=waqfuel-assets-dev
Terminal window
sqlx migrate run
cargo run
Terminal window
cd waqfuel-notif-api
cp .env.example .env
Terminal window
GRPC_PORT=50052
RESEND_API_KEY=re_... # dari resend.com
NOREPLY_EMAIL=no-reply@waqfuel.com
Terminal window
cargo run
Terminal window
cd waqfuel-reference-api
git submodule update --init --recursive
cp .env.example .env
Terminal window
API_PORT=4000
GRPC_PORT=50050
DATABASE_URL=postgresql://localhost/waqfuel_reference
AWS_ENDPOINT=https://s3.ap-southeast-1.amazonaws.com
AWS_BUCKET_ASSETS=waqfuel-assets-dev
AWS_REGION=ap-southeast-1
Terminal window
sqlx migrate run # includes lokasi Indonesia (provinsi, kota, kecamatan, kelurahan)
cargo run
Terminal window
# Platform Client (admin dashboard)
cd waqfuel-platform-client
npm install
cp .env.example .env.local
npm run dev # http://localhost:3000
# Public Website
cd waqfuel-web
npm install
cp .env.example .env.local
npm run dev # http://localhost:3000

Setelah semua services running, test endpoint health:

Terminal window
# Reference API
curl http://localhost:4000/provinces | jq '.[:3]'
# Auth API
curl http://localhost:3001/.well-known/jwks.json | jq .
# Main API
curl http://localhost:8081/health | jq .
# Login sebagai super admin
curl -X POST http://localhost:3001/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@waqfuel.com","password":"changeme123"}' | jq .access_token