Kong merupakan sebuah API gateway yang keren sekali. Kong ini sangat berguna untuk kita yang menerapkan microservice pada layanan / apps kita. Kemudian ada juga yang namanya konga, ini adalah GUI / WebUI dari kong namun bukan official dari kong.

Selain kong dan konga, nantinya kita juga membutuhkan DBMS yang berfungsi untuk menyimpan data data dari kong dan konga. Mereka support menggunakan postgresql, jadi kita akan gunakan postgresql untuk DBMS nya.

Prasyarat

Karena disini kita akan menjalankan nya menggunakan docker, maka temen temen harus sudah menginstall docker terlebih dahulu.

Artikel diatas bisa temen temen gunakan untuk panduan melakukan instalasi docker, tinggal disesuaikan aja OS dan versi yang digunakan pada saat menambahkan repositori.

Buat Network Untuk Kong dan Konga

Agar kong dan konga serta postgresql dapat terhubung dengan baik, maka kita buatkan network sendiri untuk mereka.

➜  ~ docker network create kong-network
3c0a99370dd0adc9b7c9a817279afd35023eb93a649d5d33dce2fb615bcb3f12
➜  ~

Install PostgreSQL

Pada kasus ini tkjpedia tidak menggunakan postgresql versi terbaru alih alih menggunakan postgresql versi 9.6. Alasan nya adalah kompatibilitas, dimana kong dan konga saat ini belum support postgresql versi baru.

tkjpedia akan menggukan image postgresql dari bitnami berikut: https://hub.docker.com/r/bitnami/postgresql

Tentunya kita menginginkan data yang kita simpan baik baik saja, maka kita akan buat terlebih dahulu volume untuk menyimpan database.

➜  ~ docker volume create postgresql-kong
postgresql-kong
➜  ~

Jalankan postgresql dengan perintah berikut:

docker run -d \
    --name postgresql-kong \
    -e POSTGRESQL_USERNAME=postgres \
    -e POSTGRESQL_PASSWORD=rahasia \
    -e POSTGRESQL_DATABASE=kong \
    -v postgresql-kong:/bitnami/postgresql \
    --restart always \
    --network kong-network \
    bitnami/postgresql:9.6

Untuk container ini kita beri nama postgresql-kong, kemudian buat username, password, dan juga database yang akan kita gunakan nantinya. Jangan lupa mount volume yang sudah kita buat tadi dan juga masukkan ke network kong-network yang sudah kita buat di atas.

Install Kong

Untuk kong nya tkjpedia menggunakan image official dari kong berikut: https://hub.docker.com/_/kong

Sebelum menjalankan container kong, kita jalankan dulu database migration dari untuk kong tersebut dengan perintah sebagai berikut:

docker run --rm \
    --link postgresql-kong:postgresql-kong \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_PG_HOST=postgresql-kong" \
    -e "KONG_PG_USER=postgres" \
    -e "KONG_PG_PASSWORD=rahasia" \
    --network kong-network \
    kong kong migrations bootstrap

Kemudian saatnya kita jalankan container kong nya.

docker run -d --name kong \
    --link postgresql-kong:postgresql-kong \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_PG_HOST=postgresql-kong" \
    -e "KONG_PG_USER=postgres" \
    -e "KONG_PG_PASSWORD=rahasia" \
    -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
    -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
    -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
    -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
    -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
    -p 8000:8000 \
    -p 8443:8443 \
    -p 8001:8001 \
    -p 8444:8444 \
    --restart always \
    --network kong-network \
    kong

Install Mongodb

Konga ini merupakan webui untuk mengatur kong. tkjpedia menggunakan image dari sini: https://hub.docker.com/r/pantsel/konga

Tadinya, tkjpedia ingin menggunakan dbms postgresql biar seragam dengan kong nya. Namun tkjpedia menemukan error bahwa konga ini ngga bisa konek ke dbms nya menggunakan hostname (tetap bisa konek jika menggunakan ip address). Namun jika kita menggunakan ip address sangat repot jika kedepan nya container restart dan ip nya berubah. Atau jika temen temen tetap ingin menggunakan postgresql dan koneksi menggunakan ip address, kalian bisa set ip address container nya ke static. Error nya bisa kalian lihat pada gambar berikut:

Maka tkjpedia akan menggunakan mongodb untuk database dari konga. Pertama buat dulu volume nya agar data nya persisten.

docker volume create mongodb-konga

Kemudian jalankan mongodb dengan perintah berikut

docker run -d \
    --name mongodb-konga \
    -v mongodb-konga:/bitnami/mongodb \
    -e MONGODB_ROOT_PASSWORD=rahasia \
    --restart always \
    --network kong-network \
    bitnami/mongodb:5.0

Install Konga

Jika mongodb sudah siap, maka kita bisa jalankan konga nya. Perhatikan env yang digunakan.

docker run -d -p 1337:1337 \
              -e "TOKEN_SECRET=rahasia" \
              -e "DB_ADAPTER=mongo" \
              -e "DB_URI=mongodb://root:rahasia@mongodb-konga:27017/?authSource=admin" \
              -e "NODE_ENV=production" \
              --name konga \
              --network kong-network \
              pantsel/konga

Cek Container

Pada artikel ini kita sudah membuat 4 container yaitu postgresql untuk kong, kong, mongodb untuk konga, dan konga. Kita bisa mengeceknya menggunakan perintah berikut:

Port yang dibuka yaitu 1337 untuk kong dan 8000, 8001, 8443, dan 8444 untuk kong.

Setup Konga

Setelah semua container berjalan, kita bisa menyiapkan sedikit untuk menggunakan kong ini. Pertama buka url konga dan isikan formulir untuk membuat akun.

Setelah itu hubungkan konga ke kong dengan hostname nya yaitu nama container nya “kong” dan port 8001 di http nya.

Jika berhasil maka kong sudah siap digunakan.

Uji coba dengan membuat service untuk httpbin