Hướng Dẫn Viết Docker Compose để Xây Dựng API Gateway Với ...

  • Contact
  • About
  • Rules & Privacy
ITBLOGNOTE | Knowledge Is Power

Header Ads Widget

ITBLOGNOTE | Knowledge Is Power

Ticker

6/recent/ticker-posts HomeLinuxHướng dẫn viết Docker Compose để xây dựng API Gateway với Kong và quản lý Kong bằng giao diện với Konga Hướng dẫn viết Docker Compose để xây dựng API Gateway với Kong và quản lý Kong bằng giao diện với Konga Keywords: How to write Docker Compose to build API Gateway with Kong and manage Kong by GUI with KongaTrước khi nói đến Kong thì chúng ta cần phải nói sơ qua về Microservices trước đã và mình sẻ không nói dài dòng lý thuyết mà chỉ nói ngắn gọn ý chính theo cái mà mình hiểu được thôi nên vì vậy, các bạn ai vẫn muốn hiểu rõ hơn về những vấn đề mình chuẩn bị nói đây thì vui lòng tra google giúp mình nhé, mình chỉ hướng dẫn còn giải thích thì đơn giản thôi, ok vậy Microservices là gì? Theo như mình biết bình thường khi chúng ta xây dựng một Application thì chúng ta sẻ xây dựng dưới dạng tập trung và được gọi là monolitd, nhưng monolitd chỉ có thể giúp ta với những Application nhỏ còn với một Application lớn với hệ thống khổng lồ, yêu cầu nhiều thứ, thì chúng ta cần phải tách từng phần ra thành một services nhỏ và chính vì thế chúng ta sẻ cần đến API Gateway để sử lý và khi chúng ta tách ra từng phần nhỏ như thế thì nó được gọi là MicroservicesThật ra có rất nhiều API Gateway để cho chúng ta lựa chọn, như của Amazon chẳng hạn, vậy tại sao ta lại chon Kong?
  • Thứ 1: Kong là một Open Sources và đơn nhiên nó miễn phí.
  • Thứ 2: Có khả năng mở rộng dễ dàng.
  • Thứ 3: Hiệu năng khủng, mình thì nghe nói thôi chứ cũng chưa test nó với Amazon trên thực tế thế nào.
  • Thứ 4: Nó có nhiều Plugins hổ trợ.
Ok chúng ta sẻ bắt đầu từng phần để cài đặt nào và mình sẻ hướng dẫn các bạn cài đặt với Docker nhé, như hướng dẫn và documents chính thức từ trang kong và konga (Phần giao diện cho Kong vì khi chỉ cài Kong bạn chỉ sử dụng API Rest chứ không có GUI) thì các câu lệnh Docker để xây dựng sẻ là như sau

Cách 1: Cài đặt Kong và Konga với Docker bình thường

Kong sử dụng 2 Database là Cassandra và Postgres nhưng mình sẻ hướng dẫn trên database PostgreSQL
  • Install Postgres:
docker run -d --name kong-database \ -p 5432:5432 \ -e "POSTGRES_USER=kong" \ -e "POSTGRES_DB=kong" \ postgres:9.6
  • Prepare Database cho Kong:
docker run --rm \ --link kong-database:kong-database \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=kong-database" \ -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \ kong kong migrations bootstrap
  • Install Kong:
docker run -d --name kong \ --link kong-database:kong-database \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=kong-database" \ -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \ -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 \ kong
  • Prepare Database cho Konga:
docker run --rm pantsel/konga:latest -c prepare -a {{adapter}} -u {{connection-uri}}
  • Install Konga (GUI):
docker run -p 1337:1337 --network {{kong-network}} \ // optional -e "TOKEN_SECRET={{somerandomstring}}" \ -e "DB_ADAPTER=the-name-of-the-adapter" \ // 'mongo','postgres','sqlserver' or 'mysql' -e "DB_HOST=your-db-hostname" \ -e "DB_PORT=your-db-port" \ // Defaults to the default db port -e "DB_USER=your-db-user" \ // Omit if not relevant -e "DB_PASSWORD=your-db-password" \ // Omit if not relevant -e "DB_DATABASE=your-db-name" \ // Defaults to 'konga_database' -e "DB_PG_SCHEMA=my-schema"\ // Optionally define a schema when integrating with prostgres -e "NODE_ENV=production" \ // or 'development' | defaults to 'development' --name konga \ pantsel/kongaNhững bước trên là mình lấy từ hướng dẫn chính thức từ trang chủ của nó, thề luôn là phải chạy lằng nhằn từng cái từng cái 1 rồi khi ta muốn gỡ ra chúng ta phải chạy từng câu lệnh nghe phức tạp, với lại nhìn vô cái mớ hướng dẫn hổn độn ở trên mình cảm thấy nhức đầu rồi nói chi là các bạn, vì thế mình sẻ hướng dẫn các bạn viết 1 đoạn Docker Compose từ các hướng dẫn về docker ở trên, để khi chạy ta chỉ việc gõ docker-compose up là ok và khi ta muốn gỡ nó ra thì chỉ việc gõ down là mọi thứ đều tự động tháo bỏ, nó cũng giống 1 con script vậy, nói chung muốn biết thằng docker compose là gì thì các bạn liên hệ với anh google nhé hehe, mình sẻ show file docker-compose của mình và giải thích từng phần cho các bạn hiểu.

Cách 2: Sử dụng Docker Compose

Đây là code của mình: version: '3.8' networks: kong-net: name: kong-net driver: bridge services: kong-database: image: postgres:9.6 container_name: kong-database environment: POSTGRES_USER: kong POSTGRES_DB: kong POSTGRES_PASSWORD: kong ports: - "1000:5432" volumes: - /root/docker-compose/kong/db-data:/var/lib/postgresql/data networks: - kong-net kong-migrations: image: kong:latest container_name: kong-migrations restart: on-failure depends_on: - kong-database links: - kong-database:kong-database environment: KONG_DATABASE: postgres KONG_PG_HOST: kong-database KONG_PG_USER: kong KONG_PG_PASSWORD: kong KONG_CASSANDRA_CONTACT_POINTS: kong-database entrypoint: sh -c "sleep 100 && kong migrations bootstrap --vv" networks: - kong-net kong: image: kong:latest container_name: kong restart: on-failure links: - kong-database:kong-database networks: - kong-net environment: KONG_DATABASE: postgres KONG_PG_HOST: kong-database KONG_PG_USER: kong KONG_PG_PASSWORD: kong KONG_CASSANDRA_CONTACT_POINTS: kong-database 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, 0.0.0.0:8444 ssl ports: - "1001:8000" - "1002:8443" - "1003:8001" - "1004:8444" konga-prepare: image: pantsel/konga container_name: konga-prepare command: "-c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga" networks: - kong-net restart: on-failure links: - kong-database:kong-database depends_on: - kong-database konga: image: pantsel/konga container_name: konga restart: on-failure links: - kong-database:kong-database depends_on: - kong-database networks: - kong-net environment: DB_ADAPTER: postgres DB_HOST: kong-database DB_PORT: 5432 DB_USER: kong DB_PASSWORD: kong DB_DATABASE: konga KONGA_HOOK_TIMEOUT: 120000 NODE_ENV: production ports: - "1005:1337"Ghi chú nhỏ tại đây:version: theo như mình hiểu thì đây là phiên bản của docker compose bạn muốn điền phiên bản nào cũng được, mình thì lấy phiên bản hiện tại là 3.8 vì hiện tại docker compose chỉ mới ra version 3.8 thôi networks: đây là nơi mình sẻ khai báo mạng mình dùng để sử dụng, nếu như mình cho nó tự tạo network thì mình sẻ để là "drive: bridge" nhưng phần networks này thì lát mình sẻ tự tạo nó, nên vì thế mình sẻ để là "external: true".services: đây sẻ là nơi chứa các bản build image của docker, như trên mình đã khai báo các thành phần để cài đặt Kong, giả sử mình muốn build container Postgres thì mình đã khai báo tên service của mình là kong-database
  1. image: mình lấy sẻ là postgres:9.6
  2. container_name: bạn muốn đặt tên gì cũng được nếu như không thích tên nó tự đặt
  3. ports: đây là nơi để port (1000:5432) trong đó 1000 chính là port giao tiếp ở máy host với các container trong docker, do docker mình là 1 máy tập trung chung nên mình sẻ sắp sếp port lại cho gọn gàng bằng cách đặt port theo ý mình 1000 tránh bị đụng port, khi ở ngoài mình truy cập 1000 nó sẻ kết nối tới port 5432 trong docker
  4. volumes: đây là nơi chứa data trong docker với máy ở ngoài của chúng ta (máy host) giả sử nếu mình đặt data trong docker thì khi mình gỡ docker ra đồng nghĩa vớiviệc data sẻ mất hết vì vậy mình sẻ để data ở ngoài bằng cách tạo volumes để khi mình chạy lại nó sẻ lấy data từ máy ngoài và data mình không bị mất, dễ backup nữa
  5. networks: networks ở đây khác networks mà mình hướng dẫn ở trên nghĩa là nó sẻ khai báo rằng uh tao sử dụng mạng kong-net đã tạo, đơn giản bạn chỉ cần hiểu rằng bạn sẻ lựa chọn mạng nào để sử dụng thế thôi chẳng gì hết
  6. environment: cái này bạn còn nhớ các dòng -e ở phía trên không? ở đây mình sẻ thêm một số biến vào cho nó như là user và password thay cho các dòng -e ở cách 1 vậy, thì đơn giản -e chính là viết tắt của environment chứ đâu
Mình chỉ giải thích đơn giản vậy thôi còn 1 số cái nó cũng tương tự như thế các bạn có thể xem nó rõ hơn tại file compose của mình đặt ở phía trên, file người khác thế nào thì mình không biết chứ mình là ok 100% rồi, giải thích vậy chắc cũng ok, còn lại thì dựa vào tư duy của các bạn rồi, mình sẻ bắt đầu vào bước thực hiện cài Kong và KongaĐầu tiên chúng ta sẻ tạo một mạng network có tên là kong-net với type là bridge nhé docker network create -d bridge kong-netSau đó thực hiện tạo 1 folder kong với đường dẫn như hình phía dướiTiếp đến mình sẻ tạo 1 file kong-compose.yml (do docker-compose chạy file.yml) với nội dung là đoạn code mà mình đã để ở trên cho các bạn rồi đấy, tạo luôn cả folder db-data để chứa database từ docker postgres nữa nhéSau đó mình gõ lệnh docker ps -a để kiểm tra thì như hình phía dưới hoàn toàn chưa có gìThực hiện chạy lệnh sau để run file kong-compose.yml docker-compose -f kong-compose.yml up -d --buildBình thường nếu như file có tên là docker-compose.yml thì ta chỉ cần gõ docker-compose up là nó sẻ chạy liền, còn đằng này mình thay đổi file yml thành 1 cái tên khác với cái tên mặt định nên phải sử dụng giá trị -f vào nữa với options -d là để build luôn và không cần kiểm tra lỗi, có show đi nữa cũng ra mấy cái lỗi tào lao mía lao không cần thiết và cũng không ảnh hưởngSau khi chạy xong bạn chạy lại lệnh docker ps -a để kiểm tra lại thì thấy nó đã tạo ra các services như những gì chúng ta config trong file compose rồi đấyGiờ bạn thử test thử kong trước nhé, tại máy linux bạn gõ lệnh sau: curl -i http://localhost:1003Nếu như nó hiện ra 1 nùi chữ thế này nghĩa là ok rồi đóChắc cú hơn thì các bạn truy cập trên browser bằng IP của máy bạn với Port 1003 ( Ở đây Port 1003 là do mình tự đặt trong file compose mình nói ở trên ak đáng lý port defaults của nó là 8001 nhưng mình đã trỏ nó về 1003 cho máy host ở ngoài )Ok như đã test 2 lần thì chắc chắn rằng kong đã được cài đặt rồi đấy, giờ chúng ta thực hiện truy cập konga để test luôn cả konga nha, ở đây konga của mình đặt là port 1005 nên mình chỉ cẩn sửa port lại là xong akNhư giao diện trên là ngay từ lần đầu đăng nhập đầu tiên nó đã yêu cầu chúng ta tạo tài khoản admin rồi, nên vì thế mình sẻ tạo 1 tài khoản tại đâySau khi đăng nhập ta điền Link Access đến server Kong lúc đầu ta check vào, để có thể quản lý Kong bằng KongaOk như vậy là mình đã hướng dẫn cho các bạn xong cách thực hiện cài đặt Kong và Konga sử dụng Compose của Docker rồi đấy, trong quá trình chạy file compose up lên mà bạn check docker ps -a thằng kong nó không start mà cứ để restarting (1) giống như hình thì không sao, cứ down nó đi và up lại 1 lần nữa thì nó sẻ lên ak, có thể code của mình viết còn sai sót nhỏ chổ nào đó không đáng kể hoặc do thằng Kong nó cần thời gian để start nhưng nói chung mình thấy nó lâu quá nên mình down nó và up lại cho nó lẹ haha, tại lúc đầu mình test chục cái không sao, không hiểu sao đến lúc viết guide cho các bạn nó lại chậm start lên.Còn việc sử dụng Kong thì mình sẻ gợi ý cho các bạn như sau, "Routes => Services => Upstreams":Routes: các bạn thực hiện trỏ đường dẫn routes đến domain của webServices: sau khi thực hiện routes rồi tiếp tục trỏ đến địa chỉ IP của web nghĩa là trước đây nếu muốn đến web bằng domain thì các bạn chỉ việc khai báo domain add với địa chỉ ip là xong nhưng với kong thì bạn sẻ được đi qua một con server trung gian đó là Kong, nhưng nếu các bạn thực hiện upstream thì phần Host không trỏ đến IP nữa mà phải trỏ đến name của upstreamUpstream: Để bạn có thể trỏ đến 2 IP thực hiện quá trình loadbalancer và high avaiability (Tính sẵn sàng cao) phân chia độ ưu tiên cho từng Web ApplicationNên mình sẵn tiện viết cách hướng dẫn luôn, tới đây thì coi như xong rồi Kong và Konga điều ok, chúc các bạn thành công nhé. Nguồn: itblognote.com Tags: Container Linux
  • Newer
  • Older
Yuki Thành Phát (thanhphatit)

Posted by: Yuki Thành Phát (thanhphatit)

Hiện tại mình là IT làm việc tại TP. HCM, mình rất thích giao lưu chia sẻ kiến thức cùng tất cả mọi người, thích khám phá tiềm tòi những điều khó khăn trong công việc biến những cái người ta không thể làm được thành những điều có thể, bởi lẻ với mình trong IT không có gì là không thể cả, mình cũng rất đam mê lập trình nhất là về ngôn ngữ hệ thống Linux.

You may like these posts

Post a Comment

1 Comments

  1. Unknown6/8/21 09:57

    Mình đã thử và đã chạy được trên windows với powershell và administator

    ReplyDeleteReplies
      Reply
Add commentLoad more...

Vài lời muốn nói:* Không được nhận xét thô tục bởi mình biết các bạn là những người văn minh.* Pass giải nén mặt định là itblognote hoặc itblognote.com nếu có Pass khác thì mình sẽ ghim trong bài viết.* Click vào quảng cáo và chia sẻ bài viết để mình có thêm động lực viết bài nhé.

Translate

Social Plugin

About Blog

Xin chào các bạn, mình là Phát hiện tại mình là một DevOps Engineer và mình xây dựng Blog này với tiêu chí đúng với cái tên "ITBLOGNOTE.COM" của nó, là nơi mà mình sẻ lưu trữ lại những kiến thức mà bản thân đã tích lũy được trong đó 80% bài viết về IT | System Admin | DevOps | Security | System Programming và 20% bài viết về những điều hay trong cuộc sống lẫn các kiến thức khác để chia sẻ cùng các bạn, đây cũng như là kho lưu trữ Note Public tổng hợp của cá nhân mình, với phương châm: "Nâng cao kiến thức bản thân bằng cách chia sẻ, nhận đóng góp từ mọi người!"

Fanpage

Labels

  • Container 7
  • DevOps 31
  • KaliLinux 6
  • Linux 102
  • TricksHacking 22
  • TricksLinux 48
  • TricksOther 55
  • TricksWindows 49

My Music

Info

  • INFO
  • TOOLS

Random Posts

3/random/post-list

Recent in Linux

3/Linux/post-list

Popular Posts

Phần mềm NSSM tạo services cho Windows

Phần mềm NSSM tạo services cho Windows

Tắt tính năng Run as administrator trên Windows cho một app chỉ định

Tắt tính năng Run as administrator trên Windows cho một app chỉ định

Chia sẻ code deployment ELK single sử dụng Kubernetes (K8S)

Chia sẻ code deployment ELK single sử dụng Kubernetes (K8S)

DMCA.com Protection Status

Menu Footer Widget

  • Home
  • Contact
  • About
  • Rules & Privacy
Copyright © ITBLOGNOTE | Knowledge Is Power

Từ khóa » Cài đặt Kong Api