Kong docker swarm 部署
这次分享下 Kong&Konga 通过 docker swarm 部署的脚本,因为目前没有用上 K8S,目前还是用比较轻量的 docker swarm 进行部署。
#!/bin/bash
# kong镜像名称,需带 tag, 若不带 tag 会默认查找 latest 版本
export KONG_IMAGE_NAME="kong:jerax"
# konga 镜像名称
export KONGA_IMAGE_NAME="konga:jerax"
# postgres 镜像名称
export POSTGRES_IMAGE_NAME="postgres:9.6"
# 本机 ip
export HOST_IP="127.0.0.1"
# 当前文件夹
SHELL_FOLDER=$(
cd "$(dirname "$0")" || exit
pwd
)
function build_yaml() {
echo -e "\033[32m Start building docker-compose.yaml files \033[0m"
cat <<EOF >"${SHELL_FOLDER}"/docker-compose.yaml
version: "3.8"
networks:
kong-net:
driver: overlay
services:
kong-database:
image: ${POSTGRES_IMAGE_NAME}
restart: always
networks:
- kong-net
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_PASSWORD: kong
PGDATA: /var/lib/postgresql/data/pgdata
ports:
- "5432:5432"
healthcheck:
test: ["CMD", "pg_isready", "-U", "kong"]
interval: 5s
timeout: 5s
retries: 5
kong-migration:
image: ${KONG_IMAGE_NAME}
command: "kong migrations bootstrap"
networks:
- kong-net
restart: on-failure
environment:
- KONG_DATABASE=postgres
- KONG_PG_HOST=kong-database
- KONG_PG_DATABASE=kong
- KONG_PG_PASSWORD=kong
links:
- kong-database
depends_on:
- kong-database
kong:
image: ${KONG_IMAGE_NAME}
restart: always
networks:
- kong-net
volumes:
- kong-data:/usr/local/kong
- kong-cfg:/etc/kong
deploy:
replicas: 3
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_PASSWORD: kong
KONG_PROXY_LISTEN: 0.0.0.0:8000, 0.0.0.0:8443 ssl
KONG_ADMIN_LISTEN: 0.0.0.0:8001, 0.0.0.0:8444 ssl
depends_on:
- kong-migration
links:
- kong-database
ports:
- "8001:8001"
- "8000:8000"
- "8443:8443"
- "8444:8444"
konga-prepare:
image: ${KONGA_IMAGE_NAME}
command: "-c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga"
networks:
- kong-net
restart: on-failure
environment:
- KONG_DATABASE=postgres
- KONG_PG_HOST=kong-database
- KONG_PG_DATABASE=konga
- KONG_PG_PASSWORD=kong
links:
- kong-database
depends_on:
- kong-database
konga:
image: ${KONGA_IMAGE_NAME}
restart: always
networks:
- kong-net
environment:
DB_ADAPTER: postgres
DB_URI: postgresql://kong:kong@kong-database:5432/konga
NODE_ENV: production
links:
- kong-database
depends_on:
- kong
- konga-prepare
ports:
- "1337:1337"
volumes:
postgres-data:
kong-data:
kong-cfg:
EOF
echo -e "\033[32m Yaml file build complete \033[0m"
}
function start_kong() {
# 初始化 docker swarm
result=$(docker info)
if [[ ${result} =~ "Swarm: active" ]]; then
echo -e "\033[31m Docker swarm already active \033[0m"
else
echo -e "\033[32m Start init docker swarm \033[0m"
docker swarm init --advertise-addr "${HOST_IP}"
fi
echo -e "\033[32m Start building the Kong service... \033[0m"
docker stack deploy -c docker-compose.yaml kong
}
build_yaml &&
start_kong
docker-compose.yaml
由于博客上 shell 的格式对于 yaml 文件不太友好,重新把 docker-compose.yaml 文件内容贴一下
version: "3.8"
networks:
kong-net:
driver: overlay
services:
kong-database:
image: ${POSTGRES_IMAGE_NAME}
restart: always
networks:
- kong-net
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_PASSWORD: kong
PGDATA: /var/lib/postgresql/data/pgdata
ports:
- "5432:5432"
healthcheck:
test: [ "CMD", "pg_isready", "-U", "kong" ]
interval: 5s
timeout: 5s
retries: 5
kong-migration:
image: ${KONG_IMAGE_NAME}
command: "kong migrations bootstrap"
networks:
- kong-net
restart: on-failure
environment:
- KONG_DATABASE=postgres
- KONG_PG_HOST=kong-database
- KONG_PG_DATABASE=kong
- KONG_PG_PASSWORD=kong
links:
- kong-database
depends_on:
- kong-database
kong:
image: ${KONG_IMAGE_NAME}
restart: always
networks:
- kong-net
volumes:
- kong-data:/usr/local/kong
- kong-cfg:/etc/kong
deploy:
replicas: 3
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_PASSWORD: kong
KONG_PROXY_LISTEN: 0.0.0.0:8000, 0.0.0.0:8443 ssl
KONG_ADMIN_LISTEN: 0.0.0.0:8001, 0.0.0.0:8444 ssl
depends_on:
- kong-migration
links:
- kong-database
ports:
- "8001:8001"
- "8000:8000"
- "8443:8443"
- "8444:8444"
konga-prepare:
image: ${KONGA_IMAGE_NAME}
command: "-c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga"
networks:
- kong-net
restart: on-failure
environment:
- KONG_DATABASE=postgres
- KONG_PG_HOST=kong-database
- KONG_PG_DATABASE=konga
- KONG_PG_PASSWORD=kong
links:
- kong-database
depends_on:
- kong-database
konga:
image: ${KONGA_IMAGE_NAME}
restart: always
networks:
- kong-net
environment:
DB_ADAPTER: postgres
DB_URI: postgresql://kong:kong@kong-database:5432/konga
NODE_ENV: production
links:
- kong-database
depends_on:
- kong
- konga-prepare
ports:
- "1337:1337"
volumes:
postgres-data:
kong-data:
kong-cfg:

本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。