Menjalankan instance sendiri
Instance publik dipakai bersama dan dibatasi. Instance sendiri punya batasnya sendiri, dan seluruh API berjalan dalam satu container.
Docker
Image dibangun untuk amd64 dan arm64 dari branch utama, dan sudah memuat situs ini.
docker run -d --name bmkg-api -p 8099:8099 ghcr.io/dhanyyudi/bmkg-api:latest
curl http://localhost:8099/healthDocker Compose dengan Redis
Berkas docker-compose.yml di repository menambahkan Redis supaya cache bertahan saat container dimulai ulang. Stack itu bergabung ke network eksternal bernama private_network dan tidak membuka port host, cocok untuk reverse proxy atau tunnel. Untuk akses langsung, tambahkan entri ports.
git clone https://github.com/dhanyyudi/bmkg-api.git
cd bmkg-api
cp .env.example .env
docker compose up -dDevelopment lokal
Python 3.12 atau lebih baru untuk API, Node 22 atau lebih baru untuk situs.
git clone https://github.com/dhanyyudi/bmkg-api.git
cd bmkg-api
make setup
source venv/bin/activate
make dev # API di http://localhost:8099
# Situs dibangun terpisah, hasilnya ditulis ke ./landing
make webKonfigurasi
Semua pengaturan berupa environment variable, dibaca dari .env bila ada.
| Variabel | Default | Kegunaan |
|---|---|---|
REDIS_URL | redis://localhost:6379 | Backend cache. Tanpa Redis, API memakai cache di dalam proses. |
RATE_LIMIT_ANONYMOUS | 30/minute | Request yang diizinkan per client, per endpoint. |
CLIENT_IP_HEADER | (kosong) | Header pembawa IP client yang sebenarnya di belakang proxy, misalnya CF-Connecting-IP. Dibiarkan kosong kecuali semua request datang lewat proxy itu. |
UPSTREAM_MAX_PER_MINUTE | 50 | Jumlah request terbanyak per menit ke tiap host BMKG. Nilai 0 menghapus batas. |
CACHE_TTL_EARTHQUAKE_LATEST | 60 | Detik gempa terbaru di-cache. |
CACHE_TTL_EARTHQUAKE_LIST | 300 | Detik daftar gempa di-cache. |
CACHE_TTL_NOWCAST | 120 | Detik peringatan dini di-cache. |
CACHE_TTL_WEATHER | 900 | Detik satu prakiraan di-cache. |
CACHE_TTL_WILAYAH | 86400 | Masa cache yang dikirim untuk data wilayah. |
Membukanya ke internet
Instance publik cepat atau lambat akan dibanjiri request. Tiga hal menjaganya tetap hidup:
- Cache di CDN. Setiap response /v1 membawa Cache-Control sesuai umur datanya. Dengan CDN di depan yang mematuhi header itu, request berulang tidak sampai ke server.
- Rate limit per client yang sebenarnya. Di belakang proxy, CLIENT_IP_HEADER perlu diisi. Tanpa itu semua pengunjung terhitung sebagai proxy.
- Batas ke BMKG. UPSTREAM_MAX_PER_MINUTE mencegah penyalahgunaan instance berujung pada pemblokiran IP server oleh BMKG.
Server MCP
Image yang sama menjalankan endpoint MCP: container kedua dengan perintah python -m mcp_server.http_server, dan BMKG_API_BASE_URL diarahkan ke API.