Scott

macos搭建kong 7 days ago

微服务
7334个字符
共有10人围观

在 macOS 上使用 Docker 搭建 Kong 并访问管理界面

要在 macOS 上使用 Docker 搭建 Kong 并访问其管理界面(Kong Manager 或 Konga),可以按照以下步骤操作:

方法一:使用官方 Docker 镜像(仅 Kong API 网关)

  1. 安装 Docker Desktop for Mac

  2. 创建 Docker 网络

docker network create kong-net
  1. 启动 PostgreSQL 数据库
docker run -d --name kong-database \
  --network=kong-net \
  -p 5432:5432 \
  -e "POSTGRES_USER=kong" \
  -e "POSTGRES_DB=kong" \
  -e "POSTGRES_PASSWORD=kong" \
  postgres:13
  1. 初始化 Kong 数据库
docker run --rm \
  --network=kong-net \
  -e "KONG_DATABASE=postgres" \
  -e "KONG_PG_HOST=kong-database" \
  -e "KONG_PG_USER=kong" \
  -e "KONG_PG_PASSWORD=kong" \
  kong:latest kong migrations bootstrap
  1. 启动 Kong
docker run -d --name kong \
  --network=kong-net \
  -e "KONG_DATABASE=postgres" \
  -e "KONG_PG_HOST=kong-database" \
  -e "KONG_PG_USER=kong" \
  -e "KONG_PG_PASSWORD=kong" \
  -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:latest
  1. 验证安装
curl -i http://localhost:8001/

方法二:使用 Kong 企业版(包含 Kong Manager)

如果你需要官方 UI(Kong Manager),需要使用 Kong 企业版:

  1. 获取 Kong 企业版镜像

    • 需要从 Kong 官网获取企业版 Docker 镜像(需要许可证)
  2. 启动命令示例

docker run -d --name kong-ee \
  --network=kong-net \
  -e "KONG_DATABASE=postgres" \
  -e "KONG_PG_HOST=kong-database" \
  -e "KONG_PG_USER=kong" \
  -e "KONG_PG_PASSWORD=kong" \
  -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
  -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
  -e "KONG_ADMIN_GUI_URL=http://localhost:8002" \
  -e "KONG_ADMIN_GUI_LISTEN=0.0.0.0:8002" \
  -e "KONG_PORTAL_GUI_LISTEN=0.0.0.0:8003" \
  -p 8000:8000 \
  -p 8443:8443 \
  -p 8001:8001 \
  -p 8444:8444 \
  -p 8002:8002 \
  -p 8003:8003 \
  kong-ee:latest

方法三:使用 Konga(第三方管理界面)

如果你不想使用企业版,可以安装 Konga(开源管理界面):

  1. 启动 PostgreSQL(如果尚未启动)
docker run -d --name konga-database \
  --network=kong-net \
  -p 5433:5432 \
  -e "POSTGRES_USER=konga" \
  -e "POSTGRES_DB=konga" \
  -e "POSTGRES_PASSWORD=konga" \
  postgres:13
  1. 初始化 Konga 数据库
docker run --rm \
  --network=kong-net \
  pantsel/konga:latest -c prepare -a postgres -u postgres://konga:konga@konga-database:5432/konga
  1. 启动 Konga
docker run -d -p 1337:1337 \
  --network=kong-net \
  -e "DB_ADAPTER=postgres" \
  -e "DB_URI=postgres://konga:konga@konga-database:5432/konga" \
  -e "KONGA_HOOK_TIMEOUT=120000" \
  -e "NODE_ENV=production" \
  --name konga \
  pantsel/konga:latest
  1. 访问 Konga

    • 打开浏览器访问 http://localhost:1337
    • 首次访问需要注册管理员账户
    • 登录后配置 Kong 管理 API 地址(通常是 http://kong:8001http://localhost:8001

访问管理界面

  • Kong Admin APIhttp://localhost:8001
  • Kong Manager(企业版)http://localhost:8002
  • Konga(第三方)http://localhost:1337

注意:企业版功能需要有效的 Kong 企业许可证。对于大多数开发和个人使用场景,Konga 是一个不错的开源替代方案。

ISSUE

按照上述方法搭建kong报错了

$ docker run --rm \
  --network=kong-net \
  pantsel/konga:latest -c prepare -a postgres -u postgres://konga:konga@konga-database:5432/konga

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
debug: Preparing database...
Using postgres DB Adapter.
Database exists. Continue...
error: A hook (`orm`) failed to load!
error: Failed to prepare database: error: column r.consrc does not exist
    at Connection.parseE (/app/node_modules/sails-postgresql/node_modules/pg/lib/connection.js:539:11)
    at Connection.parseMessage (/app/node_modules/sails-postgresql/node_modules/pg/lib/connection.js:366:17)
    at Socket.<anonymous> (/app/node_modules/sails-postgresql/node_modules/pg/lib/connection.js:105:22)
    at Socket.emit (events.js:310:20)
    at Socket.EventEmitter.emit (domain.js:482:12)
    at addChunk (_stream_readable.js:286:12)
    at readableAddChunk (_stream_readable.js:268:9)
    at Socket.Readable.push (_stream_readable.js:209:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:186:23)

原因是我的macbook是m1的芯片

使用下面3个方法之一就可以解决

这个错误是因为你使用的是 ARM64 架构的 Mac(如 M1/M2 芯片),而 Konga 的 Docker 镜像目前只支持 linux/amd64 平台。此外,PostgreSQL 版本也可能导致兼容性问题。

解决方案

方法 1:指定平台并使用兼容的 PostgreSQL 版本

  1. 删除现有容器(如果存在):

    docker rm -f konga-database
    
    1. 重新启动 PostgreSQL 容器(使用兼容版本)bash docker run -d --name konga-database \ --network=kong-net \ -p 5433:5432 \ -e "POSTGRES_USER=konga" \ -e "POSTGRES_DB=konga" \ -e "POSTGRES_PASSWORD=konga" \ postgres:11
  2. 初始化 Konga 数据库(指定平台)

    docker run --rm --platform linux/amd64 \
     --network=kong-net \
     pantsel/konga:latest -c prepare -a postgres -u postgres://konga:konga@konga-database:5432/konga
    

    方法 2:使用 Docker Compose(推荐)

    创建一个 docker-compose.yml 文件:

    version: '3.8'
    services:
    kong-database:
    image: postgres:13
    container_name: kong-database
    environment:
      POSTGRES_USER: kong
      POSTGRES_DB: kong
      POSTGRES_PASSWORD: kong
    ports:
      - "5432:5432"
    networks:
      - kong-net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U kong"]
      interval: 5s
      timeout: 5s
      retries: 5
    konga-database:
    image: postgres:11
    container_name: konga-database
    environment:
      POSTGRES_USER: konga
      POSTGRES_DB: konga
      POSTGRES_PASSWORD: konga
    ports:
      - "5433:5432"
    networks:
      - kong-net
    kong:
    image: kong:latest
    container_name: kong
    depends_on:
      kong-database:
        condition: service_healthy
    environment:
      KONG_DATABASE: postgres
      KONG_PG_HOST: kong-database
      KONG_PG_USER: kong
      KONG_PG_PASSWORD: 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, 0.0.0.0:8444 ssl'
    ports:
      - "8000:8000"
      - "8443:8443"
      - "8001:8001"
      - "8444:8444"
    networks:
      - kong-net
    konga:
    platform: linux/amd64
    image: pantsel/konga:latest
    container_name: konga
    depends_on:
      - konga-database
      - kong
    environment:
      DB_ADAPTER: postgres
      DB_URI: postgres://konga:konga@konga-database:5432/konga
      KONGA_HOOK_TIMEOUT: 120000
      NODE_ENV: production
      TOKEN_SECRET: some-secret-token
    ports:
      - "1337:1337"
    networks:
      - kong-net
    networks:
    kong-net:
    driver: bridge
    

然后运行:

docker-compose up -d

方法 3:手动修复数据库问题

如果仍然遇到 column r.consrc does not exist 错误,可以尝试:

  1. 进入 PostgreSQL 容器:

    docker exec -it konga-database psql -U konga
    
    1. 执行以下 SQL: sql ALTER DATABASE konga SET search_path TO public, pg_catalog; \q
  2. 重新运行 Konga 初始化。

验证安装

  1. 等待所有容器启动(约1-2分钟)
  2. 访问 Konga:http://localhost:1337
  3. 首次访问需要注册管理员账户
  4. 登录后配置 Kong 管理 API 地址为 http://kong:8001

这些方法应该能解决你在 M1/M2 Mac 上运行 Konga 的问题。如果仍有问题,可以考虑使用 Rosetta 模式运行 Docker Desktop 或等待 Konga 官方支持 ARM64 架构。