当前位置: 首页 > wzjs >正文

扁平化网站布局如何做网站推广方案

扁平化网站布局,如何做网站推广方案,衡南网站建设,温州网站 公司Docker 部署 Kong云原生API网关 本指南提供了在 Docker Compose 上配置 Kong Gateway 的步骤,基于有数据库模式的配置。本指南中使用的数据库是 PostgreSQL。 前置条件 准备一台Ubuntu服务器: 节点IP: 192.168.73.11操作系统: Ubuntu 24…

Docker 部署 Kong云原生API网关

本指南提供了在 Docker Compose 上配置 Kong Gateway 的步骤,基于有数据库模式的配置。本指南中使用的数据库是 PostgreSQL。
在这里插入图片描述

前置条件

准备一台Ubuntu服务器:

  • 节点IP: 192.168.73.11
  • 操作系统: Ubuntu 24.04
  • 已安装docker及docker-compose

部署kong网关

创建docker-compose文件

root@user-service:/data/apps/kong# cat docker-compose.yaml
name: 'kong-gateway'services:kong-db:image: postgres:17.5container_name: kong-dbrestart: alwaysenvironment:POSTGRES_DB: kongPOSTGRES_USER: kongPOSTGRES_PASSWORD: kongpassvolumes:- kong_db_data:/var/lib/postgresql/datanetworks:- kong-nethealthcheck:test: ["CMD-SHELL", "pg_isready -U kong -d kong"]interval: 10stimeout: 5sretries: 5kong-migrations:image: kong:3.9.1container_name: kong-migrationsdepends_on:kong-db:condition: service_healthyenvironment:KONG_DATABASE: postgresKONG_PG_HOST: kong-dbKONG_PG_USER: kongKONG_PG_PASSWORD: kongpasscommand: "kong migrations bootstrap"networks:- kong-netrestart: on-failurekong:image: kong:3.9.1container_name: kong-gatewayrestart: alwaysdepends_on:kong-migrations:condition: service_completed_successfullyenvironment:# kong databaseKONG_DATABASE: postgresKONG_PG_HOST: kong-dbKONG_PG_DATABASE: kongKONG_PG_USER: kongKONG_PG_PASSWORD: kongpass# kong proxyKONG_PROXY_LISTEN: 0.0.0.0:8000KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443# kong adminKONG_ADMIN_LISTEN: 0.0.0.0:8001, 0.0.0.0:8444 ssl# kong managerKONG_ADMIN_GUI_LISTEN: 0.0.0.0:8002, 0.0.0.0:8445 ssl# kong logsKONG_PROXY_ACCESS_LOG: /dev/stdoutKONG_PROXY_ERROR_LOG: /dev/stderrKONG_ADMIN_ACCESS_LOG: /dev/stdoutKONG_ADMIN_ERROR_LOG: /dev/stderrports:- "8000:8000" # Proxy- "8443:8443" # Proxy SSL- "8001:8001" # Admin API- "8444:8444" # Admin API SSL- "8002:8002" # Kong Manager- "8445:8445" # Kong Manager SSLnetworks:- kong-nethealthcheck:test: ["CMD-SHELL", "kong health"]interval: 15stimeout: 10sretries: 3networks:kong-net:driver: bridgevolumes:kong_db_data:driver: local

启动服务

docker compose up -d

确认容器启动状态

root@user-service:/data/apps/kong# docker compose ps -a
NAME              IMAGE           COMMAND                  SERVICE           CREATED          STATUS                      PORTS
kong-db           postgres:17.5   "docker-entrypoint.s…"   kong-db           3 days ago       Up 3 days (healthy)         5432/tcp
kong-gateway      kong:3.9.1      "/docker-entrypoint.…"   kong              24 minutes ago   Up 24 minutes (healthy)     0.0.0.0:8000-8002->8000-8002/tcp, [::]:8000-8002->8000-8002/tcp, 0.0.0.0:8443-8445->8443-8445/tcp, [::]:8443-8445->8443-8445/tcp
kong-migrations   kong:3.9.1      "/docker-entrypoint.…"   kong-migrations   3 days ago       Exited (0) 24 minutes ago   
root@user-service:/data/apps/kong# 

浏览器访问kong manager GUI
在这里插入图片描述

部署示例应用

下面是一个简单且贴近实际业务场景的系统,模拟一个订单系统的调用流程,基于docker构建:

  • A 是前端页面,用户点击“创建订单”按钮;
  • A 通过 Kong 网关调用后端 B(订单服务);
  • B 接收到请求后,再通过 Kong 网关调用后端 C(库存服务)进行扣减库存;
  • 最后返回响应到前端。

Kong 网关地址为:http://192.168.73.11:8000

在这里插入图片描述
创建相关目录

mkdir -p /data/app/order-app{order-ui,order-servcie,inventory-service}
cd /data/app/order-app

1. 后端 C:库存服务(inventory-service)

inventory-service/app.py

root@ubuntu:~# cat /data/app/order-app/inventory-service/app.py
from flask import Flask, jsonifyapp = Flask(__name__)@app.route("/inventory/decrease", methods=["POST"])
def decrease_inventory():print("库存扣减成功")return jsonify({"msg": "库存扣减成功"}), 200if __name__ == "__main__":app.run(host="0.0.0.0", port=5002)

inventory-service/Dockerfile

root@ubuntu:~# cat /data/app/order-app/inventory-service/Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY app.py .
RUN pip install flask
EXPOSE 5002
CMD ["python", "app.py"]

2. 后端 B:订单服务(order-service)

order-service/app.py

root@ubuntu:~# cat /data/app/order-app/order-service/app.py
from flask import Flask, jsonify
import requestsapp = Flask(__name__)@app.route("/order/create", methods=["POST"])
def create_order():print("收到创建订单请求,调用库存服务扣减库存")try:# 通过Kong调用库存服务resp = requests.post("http://192.168.73.11:8000/inventory/decrease")return jsonify({"msg": "订单创建成功", "inventory_response": resp.json()})except Exception as e:return jsonify({"msg": "订单创建失败", "error": str(e)}), 500if __name__ == "__main__":app.run(host="0.0.0.0", port=5001)

order-service/Dockerfile

root@ubuntu:~# cat /data/app/order-app/order-service/Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY app.py .
RUN pip install flask requests
EXPOSE 5001
CMD ["python", "app.py"]

3. 前端 A:订单创建页面

order-ui/index.html

root@ubuntu:~# cat /data/app/order-app/order-ui/index.html
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>订单系统</title>
</head>
<body><h1>订单系统</h1><button onclick="createOrder()">创建订单</button><pre id="result"></pre><script>function createOrder() {fetch('http://192.168.73.11:8000/order/create', { method: 'POST' }).then(async res => {const text = await res.text();try {const json = JSON.parse(text);document.getElementById("result").innerText = JSON.stringify(json, null, 2);} catch (err) {console.error("非 JSON 响应内容:", text); // 只打印在控制台document.getElementById("result").innerText = "请求失败:服务暂时不可用,请稍后再试。";}}).catch(err => {console.error("请求错误:", err);document.getElementById("result").innerText = "网络异常或服务器未响应,请检查后端服务状态。";});}</script></body>
</html>

order-ui/Dockerfile

root@ubuntu:~# cat /data/app/order-app/order-ui/Dockerfile
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80

4. Docker Compose

构建docker镜像

root@ubuntu:~# cd /data/app/order-app/order-ui
docker build -t registry.cn-shenzhen.aliyuncs.com/cnmirror/order-ui:v1.0 .
root@ubuntu:~# cd /data/app/order-app/order-service  
docker build -t registry.cn-shenzhen.aliyuncs.com/cnmirror/order-service:v1.0 .
root@ubuntu:~# cd /data/app/order-app/order-service  
docker build -t registry.cn-shenzhen.aliyuncs.com/cnmirror/inventory-service:v1.0 .

创建docker-compose

root@ubuntu:~# cat /data/app/order-app/docker-compose.yaml
name: "order-app"
services:ui:image: registry.cn-shenzhen.aliyuncs.com/cnmirror/order-ui:v1.0container_name: order-uiports:- "8080:80"networks:- order-netorder-service:image: registry.cn-shenzhen.aliyuncs.com/cnmirror/order-service:v1.0container_name: order-serviceports:- "5001:5001"networks:- order-netinventory-service:image: registry.cn-shenzhen.aliyuncs.com/cnmirror/inventory-service:v1.0container_name: inventory-serviceports:- "5002:5002"networks:- order-netnetworks:order-net:driver: bridge

四、Kong配置建议(注册B和C)

创建 Service(服务)

服务代表你后端的 API 服务,告诉 Kong 请求最终要发到哪里。

# 注册服务B(订单)
curl -i -X POST http://192.168.73.11:8001/services \--data name=order-service \--data url=http://192.168.73.11:5001# 注册服务C(库存)
curl -i -X POST http://192.168.73.11:8001/services \--data name=inventory-service \--data url=http://192.168.73.11:5002

查看注册的服务
在这里插入图片描述

创建 Route(路由)

路由是入口规则,告诉 Kong 哪些路径/域名/方法应该映射到哪个 Service。

# order-service 的路由(例如 /order)
curl -i -X POST http://192.168.73.11:8001/services/order-service/routes \--data name=order-route \--data paths[]=/order \--data 'strip_path=false'# inventory-service 的路由(例如 /inventory)
curl -i -X POST http://192.168.73.11:8001/services/inventory-service/routes \--data name=inventory-route \--data paths[]=/inventory \--data 'strip_path=false'

查看注册的路由
在这里插入图片描述

全局启用cores插件,解决跨域问题

curl -i -X POST http://192.168.73.11:8001/plugins \--data "name=cors" \--data "config.origins=*" \--data "config.methods[]=GET" \--data "config.methods[]=POST" \--data "config.methods[]=PUT" \--data "config.methods[]=DELETE" \--data "config.methods[]=OPTIONS" \--data "config.headers[]=Accept" \--data "config.headers[]=Authorization" \--data "config.headers[]=Content-Type" \--data "config.exposed_headers[]=X-Custom-Header" \--data "config.credentials=true" \--data "config.max_age=3600"

演示应用请求调用

演示流程:

  1. 启动服务和Kong;
  2. 注册 B 和 C 到 Kong;
  3. 浏览器访问 http://192.168.73.11:8080
  4. 点击“创建订单”;
  5. 查看链路:A → B → C。

验证inventory-service接口

root@user-service:~# curl -s -X POST http://192.168.73.11:5002/inventory/decrease | jq
{"msg": "库存扣减成功"
}

验证order-service接口

root@user-service:~# curl -s -X POST http://192.168.73.11:5001/order/create | jq
{"inventory_response": {"msg": "库存扣减成功"},"msg": "订单创建成功"
}

验证通过aloha网关请求inventory-service接口

root@user-service:~# curl -s -X POST http://192.168.73.11:8000/inventory/decrease | jq
{"msg": "库存扣减成功"
}

验证通过aloha网关请求order-service接口

root@user-service:~# curl -s -X POST http://192.168.73.11:8000/order/create | jq
{"inventory_response": {"msg": "库存扣减成功"},"msg": "订单创建成功"
}

浏览器输出
在这里插入图片描述


文章转载自:

http://jBGVZJXS.xrhst.cn
http://kqijbz9j.xrhst.cn
http://yJz42Fry.xrhst.cn
http://ueumqQCt.xrhst.cn
http://eFyfa7Ae.xrhst.cn
http://tqYnFnKi.xrhst.cn
http://g33mDEBx.xrhst.cn
http://qYVUzgM1.xrhst.cn
http://6CNvsO8o.xrhst.cn
http://AdpQQdzA.xrhst.cn
http://ZRAgEUqb.xrhst.cn
http://QkUk9jFc.xrhst.cn
http://2UbrOctp.xrhst.cn
http://JBiFVIzz.xrhst.cn
http://spUC5Jcx.xrhst.cn
http://jvhfm3ou.xrhst.cn
http://Rl0IQkY9.xrhst.cn
http://2sRdcZmz.xrhst.cn
http://OAeHpfU9.xrhst.cn
http://g0yaj6U2.xrhst.cn
http://GObUh89X.xrhst.cn
http://LFww7OZR.xrhst.cn
http://KJvagF5h.xrhst.cn
http://1Fe7Tj01.xrhst.cn
http://U0uU8tfG.xrhst.cn
http://N3wSJA7l.xrhst.cn
http://bQ79nEQI.xrhst.cn
http://sWq6jqlU.xrhst.cn
http://gZE6LboI.xrhst.cn
http://Q4oFUu6v.xrhst.cn
http://www.dtcms.com/wzjs/733512.html

相关文章:

  • 对其网站建设进行了考察调研空间设计师
  • 龙腾盛世网站建设广告公司企业简介怎么写
  • 南通城乡建设局网站招聘客厅设计
  • 深圳鼎诚网站建设哪个网站做高仿衣服
  • python做网站性能wordpress怎么搜索网站
  • 网站泛解析wordpress 缓存用什么
  • 人才网站怎么做学校网站群管理系统建设项目
  • 微网站页面网络运维工程师考试
  • 西安自助建站系统网站建设html代码
  • 网站建设合同 下载怎么制作公众号视频
  • 南京移动网站建设wordpress auth_key
  • 湖北网站建设网址wordpress什么编辑器好用
  • 惠州企业网站建设选哪家域名查询ip
  • 聊城开发区建设局网站好看的网站色彩搭配
  • 南京的电商网站设计摄影网站源代码
  • 网站 手机 微信 app外包软件公司在哪里去接项目
  • 山东省建设备案网站审批表会用框架做网站能找到工作吗
  • 北京网站优化推广分析免费咨询法律援助电话号码
  • 网站建设可视化工具美食网站的设计与实现
  • 建设家具网站的目的及功能定位色无极网站正在建设中
  • php网站建设原码网站还建设 域名可以备案吗
  • 网站如何解析返利网站怎么做
  • 如何在税局网站上做税种认定wordpress视差插件
  • 湖南网站建设策划安卓应用市场app下载安装
  • 想学做网站学那个软件好三星商城app下载
  • 营销型网站建设模板微软 网站开发
  • 陕西交通建设集团西商分公司网站设计师找工作的网站
  • 门户网站产品设计方案做问卷的网站好
  • 免费的行情网站appled营销型网站建设
  • 南山网站建设哪家便宜做动漫网站的素材