Kali ini kita akan belajar cara memasang Kong di Docker. Kong itu apaan sih? Kong itu merupakan salah satu API Gateway yang populer. Dengan Kong, kita bisa mengelola banyak API secara terpusat. Selain itu, kita bisa melakukan load balancing, autentikasi, monitoring, hingga transformasi request/response. Dalam microservices Kong memegang peranan yang sangat penting.
Bayangkan kita punya 10 Backend, apakah kita harus memasang security pada masing-masing Backend? Apakah kita harus membuat JWT authentication di setiap backend? Apakah Frontend harus mengakses ke ip berbeda-beda? Pasti akan merepotkan jika kita harus membuat hal-hal yang berulang pada setiap service backend yang kita buat. Oleh karena itu, yuk kita belajar memasang Kong.
Ada 3 hal utama yang harus kita lakukan untuk memasang Kong di Docker, yaitu:
- Kita buat database container. Database yang didukung oleh kong adalah PostgreSQL dan Cassandra
- Melakukan generate table yang dibutuhkan oleh Kong dengan kong-migrations
- Menjalankan kong.
Database PostgreSQL
Sebenarnya ketiga langkah tersebut bisa kita kerjakan secara otomatis dengan sebuah docker-compose.yml, tapi untuk mengetahui prosesnya dengan jelas, aku akan menjelaskan per tahap. Pertama, mari kita buat direktori dengan nama kong. Nantinya di dalam direktori ini kita buat 3 docker compose, yaitu db.yml, migrations.yml dan kong.yml. Mari kita mulai dengan membuat db.yml seperti berikut ini:
services:
kong-db:
image: postgres:16
container_name: kong-db
environment:
POSTGRES_USER: konguser
POSTGRES_PASSWORD: kongpassword
POSTGRES_DB: kong
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- kong-net
volumes:
postgres_data:
networks:
kong-net:
driver: bridge
Setelah kita buat jalankan container dengan perintah:
sudo docker compose -f db.yaml up -d
Jika berhasil, cobalah test database container tersebut menggunakan database client. Di sini aku menggunakan Dbeaver dan hasilnya seperti ini:

Melakukan Migrations
Database container yang baru saja kita pasang tentunya masih kosong. Kita harus melakukan migrations untuk mengisi database yang kosong tersebut dengan table yang dibutuhkan oleh Kong. Untuk melakukan migrations, kita buat file migrations.yml seperti berikut ini:
services:
kong-migrations:
image: kong:3.9
container_name: kong-migrations
command: "kong migrations bootstrap"
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-db
KONG_PG_USER: konguser
KONG_PG_PASSWORD: kongpassword
KONG_PG_DATABASE: kong
networks:
- kong-net
networks:
kong-net:
driver: bridge
Jalankan migrations yang telah kita buat dengan perintah:
sudo docker compose -f migrations.yml up
Kita tidak perlu menambahkan -d, karena setelah proses migration selesai container akan otomatis exit. Kita hanya perlu melakukan proses migrations ini sekali saja ya, jadi nantinya tidak perlu dijalankan lagi. Tapi pastikan table yang sudah dibuat tidak dihapus ya.
Menjalankan Kong di Docker
Jika proses migrations sudah berhasil sekarang kita bisa mulai menjalankan Kong di Docker. Untuk menjalankan Kong di Docker, kita harus membuat docker compose seperti berikut ini:
services:
kong:
image: kong:3.9
container_name: kong
restart: unless-stopped
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-db
KONG_PG_USER: konguser
KONG_PG_PASSWORD: kongpassword
KONG_PG_DATABASE: kong
KONG_PROXY_ACCESS_LOG: /dev/stdout
KONG_ADMIN_ACCESS_LOG: /dev/stdout
KONG_PROXY_ERROR_LOG: /dev/stderr
KONG_ADMIN_ERROR_LOG: /dev/stderr
KONG_ADMIN_LISTEN: 0.0.0.0:8001
KONG_ADMIN_GUI_LISTEN: 0.0.0.0:8002
ports:
- "8000:8000" # Proxy (Client request)
- "8001:8001" # Admin API
- "8002:8002" # Kong Manager (GUI)
- "8443:8443" # HTTPS Proxy
networks:
- kong-net
networks:
kong-net:
driver: bridge
Setelah membuat docker composenya, kita bisa menjalankan Kong di Docker dengan perintah berikut:
sudo docker compose -f kong.yml up -d
Jika berhasil kita dapat mengakses http://localhost:8000 dengan hasil seperti ini:

Loh? tapi kok error ya? tenang saja, meskipun error tapi Kong sudah berjalan dengan baik. Error tersebut muncul karena kita belum melakukan setting route untuk root. Jika ingin melakukan setting, kita bisa menggunakan API based di port 8001 atau menggunakan Kong Manager di port 8002. Cara yang lebih mundah sebenarnya menggunakan port 8002. Mari kita coba untuk mengakses http://localhost:8002, dan berikut ini tampilannya.

Jika kita perhatikan, cukup banyak juga ya menunya. Disitulah nanti kita akan bekerja untuk membuat route yang mengarah ke Backend Service yang sudah dibuat.
Penutup Kong di Docker
Loh, kok sudah ditutup? bagaimana kelanjutan Kong-nya? Hmm…. Pada tulisan ini aku hanya membahas cara agar kita bisa menjalankan Kong. Aku belum membahas cara mengoperasikan Kong maupun Kong Manager. Nantikan pembahasan tersebut pada tulisan berikutnya. Semoga tulisan ini bermanfaat dan selamat belajar.