环境准备:Linux服务器准备、Docker安装、Kong网关部署(Docker方式)

做API网关证书管理,第一步不是写代码,而是把实验环境搭起来。我个人习惯用Linux + Docker跑Kong,这套组合在开发和测试阶段特别灵活。今天就带你把这套环境搭好,每步我都会把坑点说清楚。

Linux服务器准备

咱们选什么Linux发行版?我个人推荐CentOS 7.9或Ubuntu 20.04 LTS。这两个我都在项目里用过,稳定省心。你手头如果是新买的云服务器,多半自带系统,但有几个要点必须检查:

  • 内核版本:Docker需要Linux内核3.10以上,用uname -r确认
  • 关闭防火墙或放开端口:Kong默认用8000(HTTP)、8443(HTTPS)、8001(Admin API),还有证书管理可能用到443等。测试阶段可以暂时关掉防火墙,生产环境记得精确放行
  • 关闭SELinux(CentOS):运行setenforce 0,否则Docker挂载目录会报权限错。这个坑我踩过好几次
  • 时间同步:证书校验对时间敏感,一定要装ntp或chrony,保持服务器时间准确
我的习惯:我会在服务器上先跑一遍curl -sSL https://get.docker.com | sh来做前期检查。它会自动判断系统兼容性,比手动查版本快得多。

Docker安装

Docker安装看似简单,但不同发行版命令差挺多。我把常用两种的安装步骤列出来:

发行版 安装命令 关键注意
Ubuntu 20.04 apt update && apt install docker.io -y 用系统自带版本,稳定但可能旧
CentOS 7.9 yum install docker -y 需要先装yum-utils和配置epel源

装完后记得启动服务:

systemctl start docker
systemctl enable docker
docker --version   # 验证安装

我再加一个验证步骤——跑个hello-world:

docker run hello-world

如果你看到“Hello from Docker!”,说明环境OK了。上面这个run命令第一次会从Docker Hub拉镜像,网络慢的话等一会儿就好。

我曾经遇到的问题:公司内网环境没有配置Docker镜像加速,拉Kong镜像动不动超时。建议你在/etc/docker/daemon.json里加上国内镜像站(比如阿里云或中科大),重启Docker后再继续。

Kong网关部署(Docker方式)

Kong有几种部署方式:裸机安装、Kubernetes、Docker。咱们用Docker Compose,因为它最轻量,适合本地测试和证书管理实验。我一般用官方docker-compose.yml做模板,然后改一改。

先创建目录结构:

mkdir ~/kong-cert-lab && cd ~/kong-cert-lab
mkdir -p data/postgres data/kong
touch docker-compose.yml

然后写入docker-compose配置:

version: '3.8'

services:
  kong-database:
    image: postgres:13-alpine
    environment:
      POSTGRES_DB: kong
      POSTGRES_USER: kong
      POSTGRES_PASSWORD: kong_pass
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    networks:
      - kong-net

  kong-migrations:
    image: kong:3.4-alpine
    depends_on:
      - kong-database
    environment:
      KONG_DATABASE: postgres
      KONG_PG_HOST: kong-database
      KONG_PG_PASSWORD: kong_pass
    command: "kong migrations bootstrap"
    networks:
      - kong-net

  kong:
    image: kong:3.4-alpine
    depends_on:
      kong-migrations:
        condition: service_completed_successfully
    ports:
      - "8000:8000"
      - "8443:8443"
      - "8001:8001"
      - "8444:8444"
    environment:
      KONG_DATABASE: postgres
      KONG_PG_HOST: kong-database
      KONG_PG_PASSWORD: kong_pass
      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
    volumes:
      - ./data/kong:/usr/local/kong/declarative
    networks:
      - kong-net

networks:
  kong-net:
    driver: bridge

接下来启动:

docker-compose up -d

等待几十秒,用docker-compose ps看状态,如果三个服务都是Up(kong-database、kong和kong-migrations应该已经退出),基本就成了。验证Kong是否正常运行:

curl -i http://localhost:8001/status

如果返回JSON数据,说明Kong Admin API可用。

证书管理环境的特殊准备:证书管理需要Kong的证书插件(如tls-handshake、mtls-auth等),这些在Kong 3.x版本里已经内置。但我们后面会用到自己签发的CA证书和服务器证书,所以需要在宿主机上建一个目录存证书文件。我习惯创建/etc/kong/certs,并映射进Kong容器。这个在后续章节会用上。
sudo mkdir -p /etc/kong/certs
# 然后把docker-compose.yml里volumes加上一行:
# - /etc/kong/certs:/etc/kong/certs

环境部署流程图

环境部署流程 Linux 服务器 Docker CE Docker Compose 安装 配置 PostgreSQL Kong Gateway 证书目录 依赖 启动 数据存储 挂载 说明:Kong使用PostgreSQL存储运行时配置,证书目录用于存放后续实验的自签名证书与CA文件

验证与常见问题

启动后建议做几个基础验证:

  1. 检查容器状态:docker-compose ps,确保kong-database和kong都是Up
  2. 测试Admin API:curl -s http://localhost:8001/status | jq .(如果装了jq)
  3. 测试代理端口:curl -i http://localhost:8000/,应该返回Kong的默认响应(404 Not Found,因为没有路由,但说明代理在监听)
快速诊断:如果kong-migrations服务启动后一直卡住,大概率是PostgreSQL连接问题。检查docker-compose logs kong-migrations,看是否有密码或主机名错误。我遇到过大小写坑——PostgreSQL用户名默认小写,但Kong环境变量里写成了大写,结果连接失败。

避坑指南(来自真实项目)

  • 端口冲突:如果你的服务器上已经跑了Nginx或Apache,80、443端口可能被占用。可以改Kong的映射端口,比如8001:8001改成9001:8001,后续所有API调用改端口就行
  • 版本一致性:Kong 3.x要和PostgreSQL 13.x匹配,官方文档有兼容性矩阵。我建议用同一份docker-compose里的version tag,因为官方镜像的版本一起打包测试过
  • 持久化数据:我习惯把PostgreSQL的数据目录放在./data/postgres,这样重启容器不会丢配置。证书目录同理,放在宿主机上方便管理
  • 性能与日志:测试环境可以不加日志限制,但生产务必配日志轮转,否则Kong的/dev/stdout会撑爆Docker日志
我曾经踩过的深坑:一次生产环境升级,我直接用docker-compose pull拉最新Kong镜像,结果PostgreSQL版本不兼容,migration脚本跑失败,导致网关挂了半小时。后来我养成了习惯——升级前先把镜像版本固定,并且先在测试环境跑一遍。

好了,环境准备工作基本完成。现在你的Linux上跑着一个Kong容器,背后挂着PostgreSQL,证书目录也准备好了。这门课程后面所有的证书管理操作——生成CA、签发服务器证书、配置双向TLS、轮换密钥——都将基于这套环境进行。你也不需要担心配置冲突或污染本地系统,Docker容器隔离开,想重建就docker-compose down && docker-compose up -d,一键恢复干净状态。