部署環境:html
[OS]node
centos 6.8(若是是centos6.5,請自行先升級到6.8,不然不支持docker)nginx
[Docker]git
Client version: 1.7.1github
Client API version: 1.19sql
推薦使用Docker engine 1.9以上版本,支持docker-composedocker
[Kong]數據庫
Version: 0.9.9centos
因爲衆所周知的緣由,國內連接dockerhub以及github都有不一樣程度的問題,建議用daocloud.io的docker鏡像加速服務提升image pull的速度bash
部署過程
1.部署數據庫
kong支持2類數據庫 cassandra 和 postgres,這邊應用場景不大,因此使用postgres
使用命令:
sudo docker run -d \
--name kong-database \
--restart=always \
-p 5432:5432 \
-e POSTGRES_USER=kong \
-e POSTGRES_DB=kong \
-v /var/lib/containers/kong/data:/var/lib/postgresql/data \
postgres
完成後容器自動啓動
P.S:注意最後 volume的映射,將容器內數據庫映射到了本地/var/lib/containers/kong/data下作持久化用,若是遷移的時候不要忘記了挪數據
2.部署kong服務
sudo docker run -d \
--name kong-core \
--restart=always \
-p 8001:8001 \
-p 20802:8443 \
-p 20801:8000 \
-p 7946:7946 \
-p 7946:7946/udp \
--link kong-database:kong-database \
-e KONG_DATABASE=postgres \
-e KONG_PG_HOST=kong-database \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/letsencrypt:/etc/letsencrypt:ro \
-v /usr/local/container/kong/kong.conf:/usr/local/kong/kong.conf:ro \
-v /usr/local/container/kong/nginx-kong.conf/:/usr/local/kong/nginx-kong.conf:ro \
kong
配置SSL:
這裏使用letsencrypt的免費證書,如何生成,見另外一篇文章
sudo vi /usr/local/container/kong/kong.conf
1.修改ssl_cert_key爲你的私鑰pem(這邊路徑對應上面的 /etc/letsencrypt/live/your.domain.com/privkey.pem)
2.修改ssl_cert爲你的證書 pem(這邊路徑對應上面的 /etc/letsencrypt/live/your.domain.com/fullchain.pem)
sudo vi /usr/local/container/kong/nginx-kong.conf
1.修改 ssl_certificate_key 爲你的私鑰pem(這邊路徑對應上面的 /etc/letsencrypt/live/your.domain.com/privkey.pem)
2.修改 ssl_certificate 爲你的證書 pem(這邊路徑對應上面的 /etc/letsencrypt/live/your.domain.com/fullchain.pem)
完成後進入容器:
sudo docker exec -it kong-core /bin/bash
從新加載配置
kong reload
退出容器
exit
P.S:
1.這裏先將時區修正下,若是不對的話 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime (不然會因爲服務端/客戶端時間不一致影響以後的 hmac-sha1插件的驗證)
2.kong.conf以及nginx-kong.conf是爲了以後配置ssl使用,掛載爲readOnly,初次啓動的時候先根據kong默認的,創建起這2個文件,不然若是不生成文件就啓動會發生問題,也能夠第一次run的時候先不要加載爲ro,讓它自動生成,而後rm掉這個容器,從新掛載爲ro再啓動一下,那本地就會先自動生成了。最後對這兩個文件chomd 700。
3.部署kong-dashboard
爲方便經過ui增改插件,裝一個方便的插件ui
sudo docker run -d \
--name kong-ui \
--restart=always \
--link kong-core:kong-core \
-p 8080:8080 \
pgbi/kong-dashboard
啓動後Kong node URL,輸入上面 link過的kong-core(這裏就是"kong-core")名稱(我以前嘗試用ip什麼都不太正常)
備註 docker-compose.yml
1 version: "2" 2 3 services: 4 kong-database: 5 image: postgres 6 container_name: kong-database 7 restart: always 8 ports: 9 - "5432:5432" 10 environment: 11 - POSTGRES_USER=kong 12 - POSTGRES_DB=kong 13 volumes: 14 - "/var/lib/containers/kong/data:/var/lib/postgresql/data" 15 kong: 16 image: kong:0.9.9 17 container_name: kong-core 18 environment: 19 - KONG_DATABASE=postgres 20 - KONG_PG_HOST=kong-database 21 restart: always 22 ports: 23 - "20801:8000" 24 - "20802:8443" 25 - "8001:8001" 26 - "7946:7946" 27 - "7946:7946/udp" 28 links: 29 - kong-database 30 volumes: 31 - "/etc/localtime:/etc/localtime:ro" 32 - "/etc/letsencrypt:/etc/letsencrypt:ro" 33 - "/usr/local/container/kong/kong.conf:/usr/local/kong/kong.conf:ro" 34 - "/usr/local/container/kong/nginx-kong.conf/:/usr/local/kong/nginx-kong.conf:ro" 35 kong-ui: 36 image: pgbi/kong-dashboard 37 container_name: kong-ui 38 restart: always 39 links: 40 - kong-core 41 ports: 42 - "8080:8080"