离线安装Kong网关踩坑记录

0.背景

最近项目上需要实现动态注册Api并提供对外调用的能力,经过领导的深思熟虑和严谨的技术栈评估,最后选择了Kong网关, 选什么不重要,但作为开发不但要搞代码,还得搞运维,就比较难受。最离谱的是基本上找不到离线安装相关的文档(要么就是互相抄,根本解决不了问题),因此做个记录~~~

1.准备pgsql 镜像

正常有网的情况下安装pg是很简单的,可以docker,yum等方式一键安装,但是在没有网或者网络不通的情况下就比较麻烦。前期梳理了两种方案:

  • yum: 下载rpm包上传到服务器挨个的安装,但是rpm安装的时候会自动拉取各种缺失的依赖,所以如果服务器上缺失的依赖比较多那这个就很难搞了,虽然我看也有大佬把依赖在别的服务器下载好然后上传,但如果依赖缺的很多,那就巨难受。。。因此不推荐。

  • docker: 这种是最方便的方法,找一个能下载docker镜像的服务器下载对应的pg镜像,然后把镜像打成tar包(根据实际情况修改命令):

    docker save -o postgres-12.17-bullseye postgres:12.17-bullseye

  • 切记centos7.x版本上最好使用12版本的pg,我试过13-16版本的,基本都启动失败,可能是我菜,反正系统的兼容有不少问题,搞定不了就只能用12版本。

在上面准备好镜像后把镜像上传到对应的服务器,然后加载镜像,过程如下:

bash 复制代码
#把pg的镜像加载到docker中
docker load -i postgres-12.17-bullseye.tar
​
#创建对应的目录
mkdir -p /home/postgres/data
​
#运行pg镜像
docker run -d -p 5432:5432 \
--restart=always \
-v /home/postgres/data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=konga2024 \
--name pg postgres:12.17-bullseye

2.连接到数据库中创建供kong使用的账号

sql 复制代码
docker exec -it pg psql -U postgres
create user kong with password 'kong2024';
create database kong owner kong;

3.下载kong安装包并安装

提前下载安装包然后上传到服务器:

https://packages.konghq.com/public/gateway-35/rpm/el/7/x86_64/kong-3.5.0.el7.x86_64.rpm

sudo yum install -y kong-3.5.0.el7.x86_64.rpm

4.安装好后修改配置,3处需要修改:

  • 说明:执行完上面的安装命令后,kong的配置默认会放在/etc/kong目录下,这时候先对kong.conf.default进行copy得到kong.conf,后续的修改都是基于kong.conf
  • (1)开启数据库配置,通常在1231行左右,配置信息根据实际情况修改
ini 复制代码
database = postgres   # Determines the database (or no database) for
pg_host = 127.0.0.1             # Host of the Postgres server.
pg_port = 5432                  # Port of the Postgres server.
pg_timeout = 5000               # Defines the timeout (in ms), for 
                                # reading and writing.
pg_user = kong                  # Postgres user.
pg_password = kong2024                  # Postgres user's password.
pg_database = kong              # The database name to connect to.
  • (2)端口监听范围修改为0.0.0.0,在618行左右
ini 复制代码
admin_listen = 0.0.0.0:8001 # reuseport backlog=16384
  • (3)开启可视化界面,按需修改对应的地址!! (可选!!!!)
ini 复制代码
# The Admin GUI for Kong Gateway.
admin_gui_listen = 0.0.0.0:8002, 0.0.0.0:8445 ssl                  
admin_gui_url = http://10.10.10.10:8002/manager
admin_gui_path = /manager

5.修改完配置后开始初始化数据库

bash 复制代码
kong migrations bootstrap -c /etc/kong/kong.conf

6.启动kong网关并验证

bash 复制代码
kong start -c /etc/kong/kong.conf
# 执行下面的命令后会返回200状态码,或者在浏览器直接请求对应的地址也可以
curl -i http://localhost:8001

7.踩坑总结

  • 访问不了可视化管理平台的时候记得检查一下防火墙是否开启,对应端口是否占用等

  • kong网关的下载地址可能会变或者失效,导致在服务器下载得到的rpm包是坏的,所以最好的办法就是直接在浏览器访问,然后下载再上传到服务器

  • 如果安装后启动失败,需要看一下8001及相关的kong使用的端口是否被占用

  • ss -tuln |grep 8001查看对应的端口是否监听在所有ip段

    ruby 复制代码
    [root@localhost kong]# ss -tuln |grep 8001
    tcp    LISTEN     0      128       *:8001                  *:* 

    如果是这样:

    markdown 复制代码
    ss -tuln |grep 8001
    tcp    LISTEN     0      128    127.0.0.1:8001                  *:*                  
    tcp    LISTEN     0      128    127.0.0.1:8001                  *:*                  
    tcp    LISTEN     0      128    127.0.0.1:8001                  *:*  

    那说明配置文件修改的不对,需要看看admin_listen是否修改!

非root账号安装会出现的异常问题记录:

  • 非root账号安装的情况,kong的目录(/usr/local/bin)不能写入到环境变量中,从而导致执行kong命令的时候提示找不到,因此需要手动加到环境变量文件中,比如.bashrc文件,文件位于~目录下。

    yaml 复制代码
    [root@localhost ~]# ll -a
    总用量 76
    dr-xr-x---.  9 root root  4096 10月 19 09:25 .
    dr-xr-xr-x. 18 root root   256 3月  25 2023 ..
    -rw-------.  1 root root  1639 2月  14 2022 anaconda-ks.cfg
    -rw-------.  1 root root 25308 10月 19 02:01 .bash_history
    -rw-r--r--.  1 root root    18 12月 29 2013 .bash_logout
    -rw-r--r--.  1 root root   176 12月 29 2013 .bash_profile
    -rw-r--r--.  1 root root   176 12月 29 2013 .bashrc

直接修改.bashrc,加入如下:

bash 复制代码
export PATH=/usr/local/bin:$PATH
#然后刷新配置
source ~/.bashrc
#或者
. ~/.bashrc
#还不生效的话就重新进入终端
  • 在上一步中把环境变量处理完后,有可能kong的安装目录/usr/local/kong没有权限,导致启动的时候不能创建对应的目录,因此先修改权限:

    bash 复制代码
    sudo chmod -R 777 /usr/local/kong/

    到这步基本上应该是可以启动了,如果还不行的话~~~~~~那就给爷死!

相关推荐
哎呦没3 小时前
Spring Boot OA:企业办公自动化的高效路径
java·spring boot·后端
真心喜欢你吖3 小时前
Spring Boot与MyBatis-Plus的高效集成
java·spring boot·后端·spring·mybatis
2401_857636393 小时前
实验室管理技术革新:Spring Boot系统
数据库·spring boot·后端
2401_857600953 小时前
实验室管理流程优化:Spring Boot技术实践
spring boot·后端·mfc
2402_857589363 小时前
企业办公自动化:Spring Boot OA管理系统开发与实践
java·spring boot·后端
恬淡虚无真气从之4 小时前
go interface(接口)使用
开发语言·后端·golang
程序猿毕设源码分享网4 小时前
基于springboot停车场管理系统源码和论文
数据库·spring boot·后端
程序员学姐4 小时前
基于SpringBoot+Vue的高校社团管理系统
java·开发语言·vue.js·spring boot·后端·mysql·spring
.生产的驴4 小时前
Docker Seata分布式事务保护搭建 DB数据源版搭建 结合Nacos服务注册
数据库·分布式·后端·spring cloud·docker·容器·负载均衡
2401_857439695 小时前
企业OA管理系统:Spring Boot技术应用与优化
java·spring boot·后端