本地?线上?分布式系统前后端架构、部署、联调指南,突破技术

news/2025/2/26 22:19:54/文章来源:https://www.cnblogs.com/lyflexi/p/18739900


引言:对于常见的BS架构系统,程序员如何进行本地或者线上环
境联调,这有助于提高个人工作效率,站在更高的角度审视系统,
从此以后再无惧Bug,让你早干完活,早摸鱼🐟,早下班。
对于Java初学者,或者是三年工作经验的“新手”
,希望此文对你有所裨益!

-- 诗经有云,有匪君子,如切如磋,如琢如磨。

前端启动之后,访问后端服务,需要通过代理指向目标服务器,本文基于Vue+SpringCloud Gateway+K8s(kubernetes)+Nginx讲解如下三种场景:

  • 本地前端对接本地后端:先启动后端,浏览器访问本地前端环境localhost:port+/api,本地前端再通过配置vue.config.js代理访问本地后端服务并重写/api规则
  • 线上前端对接线上后端:浏览器访问线上k8s域名(ingress)+/api,线上k8s域名(ingress)/api再转发到线上前端服务,线上前端服务内置nginx通过nginx.conf来代理并重写/api规则访问线上后端服务
  • 本地前端对接线上后端:先启动后端,浏览器访问本地前端环境localhost:port,本地前端再通过配置vue.config.js代理访问线上域名+/api

以上如果是分布式场景,则通过vue.config.js代理或者nginx.conf来代理之后,后端统一入口指的是后端网关服务GateWay,请求格式统一是 host[:port]+/api+/service-name

  • 第一层壳/api由vue.config.js代理或者nginx.conf代理去掉
  • 第二层壳由后端网关服务GateWay去掉
  • 最终由后端网关服务GateWay转发到具体的微服务

本地环境对接本地后端vue.config.js

vue.config.js

  • 配置代理目标服务器地址,target: 'http://localhost:8034',
  • 配置/api前缀重写规则,去壳/api,pathRewrite: {'^/api': ''}

vue.config.js全量配置如下,重点是proxy配置:

    devServer: {disableHostCheck: true,hot: true,port: devPort,open: false,noInfo: false,overlay: {warnings: true,errors: true},after: require('./mock/mock-server.js'),headers: {'Access-Control-Allow-Origin': '*'},proxy: {'/api': { target: 'http://localhost:8034',// target: 'https://后台域名/api',ws: true,secure: false,changeOrigin: true,pathRewrite: {'^/api': ''}}}},

线上环境对接线上后端ingress+nginx

k8s的ingress配置如下:

  • 配置代理目标服务器地址,并转发给打包后的前端线上服务
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:vke.volcengine.com/description: ""creationTimestamp: "2024-06-27T07:41:41Z"generation: 2managedFields:manager: nginx-ingress-controlleroperation: Updatetime: "2024-06-27T07:42:15Z"name: xxx-ingress-httpsnamespace: xxx-test
spec:ingressClassName: nginxrules:- host: 访问域名http:paths:- backend:service:name: xxx-webport:number: 80path: /pathType: Prefixtls:- secretName: ingress-cert

首先请求通过域名来到ingress,然后通过ingress转发给前端服务xxx-web(k8s服务)

前端服务xxx-web是前端打包之后,以nginx为基础的docker镜像服务,其nginx.conf配置(k8s配置项configmap),关键信息如下

  • 转发给线上后端的网关gateway服务:proxy_pass http://xxx-gateway:8034;
  • 配置/api前缀重写规则,rewrite ^/api/(.*)$ /$1 break;
server {listen 80;server_name  _;client_max_body_size 300m;#access_log  /var/log/nginx/host.access.log  main;add_header Access-Control-Allow-Credentials true;add_header Access-Control-Allow-Origin * always;add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS' always;add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-prototype-Version,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization' always;server_tokens off;real_ip_header   X-Forwarded-For;real_ip_recursive on;location / {root   /etc/nginx/html/;index  index.html index.htm;try_files $uri $uri/ /index.html;} location ^~/api/actuator {deny all;}location ^~/api { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; add_header Cache-Control no-store; rewrite ^/api/(.*)$ /$1 break; proxy_pass http://service-gateway:8034; }}

本地环境对接线上后端vue.config.js

这种情况是为了本地前端联调线上的后端测试环境,原理与本地环境对接本地后端,都只是很简单的正向代理vue.config.js

区别是vue.config.js里的target地址要改成线上的域名地址+/api

vue.config.js简化版配置如下

  • 配置代理目标服务器地址,target: 'https://后台域名/api',
  • 配置/api前缀重写规则,去壳/api,pathRewrite: {'^/api': ''}
    devServer: {disableHostCheck: true,hot: true,port: devPort,open: false,noInfo: false,overlay: {warnings: true,errors: true},after: require('./mock/mock-server.js'),headers: {'Access-Control-Allow-Origin': '*'},proxy: {'/api': { //target: 'http://localhost:8034',target: 'https://后台域名/api',ws: true,secure: false,changeOrigin: true,pathRewrite: {'^/api': ''}}}},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/890391.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring AI 学习之路 快速上手

随着人工智能(AI)技术的迅速发展,越来越多的开发者开始关注如何在自己的应用中集成 AI 功能。Spring 框架作为一种流行的 Java 开发框架,提供了强大的支持来构建现代应用程序。本文将为你介绍如何快速上手 Spring AI,帮助你在项目中轻松集成 AI 功能。什么是 Spring AI? …

【PWN】初识Orw

例题:NPCCTF - Ooooorw发现开启了沙箱,禁用了execve函数,所以只能利用open,read,write函数来进行输出flag from pwn import *file = ./pwnlibc = ELF(./libc.so.6)i = 0if i == 1: io = process(file)else: io = remote(175.27.249.18,32438)elf = ELF(file)context…

洛谷2025省选模拟赛D1T1“Ball” 题解

洛谷2025省选模拟赛D1T1“Ball” 题解首先可以写出一个暴力的 dp : 令 \(f_{i,j}\) 表示有 \(i\) 个选了一次的球和 \(j\) 个选了大于一次的球的期望答案,有等式: \[f_{i,j}=\frac jnf_{i,j}+\frac{n-i-j}nf_{i+1,j}+\frac in f_{i-1,j+1} \]进一步得 \(f_{i,j}=\frac{n-i-j…

[计算机网络/网络抓包/以太网] `.pcap` 数据报文存储格式

序:一份以太网报文概述:.pcap 数据报文存储格式 简介.pcap文件:一种常用的数据报文存储格式,主要用于网络数据包的捕获和存储。pcap文件格式由PCAP库提供,支持将网络上的所有数据包保存到文件中,并可以从文件中读取数据包。 pcap文件通常由文件头和数据包头组成,每个数据…

C#/.NET/.NET Core技术前沿周刊 | 第 27 期(2025年2.17-2.23)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

Jenkins详解教程

1.介绍2.Jenkins CI/CD 流程3.部署Jenkins查看初始密码4 使用Jenkins

Redis概述安装与基本数据类型

Redis概述安装与基本数据类型 1. 什么是NoSQL NoSQL( Not Only SQL ),意即不仅仅是SQL, 泛指非关系型的数据库。Nosql这个技术门类,早期就有人提出,发展至2009年趋势越发高涨。 2. NoSQL的广泛应用 随着大数据的兴起,数据量的暴增,数据类型的丰富,传统的关系数据库在应付动…

Hello! I am Zhan Yijue,nice to meet you

这个作业属于哪个课程 23软件工程这个作业要求在哪里 【作业1】自我介绍+软工5问这个作业的目标 学习使用 Markdown, 熟练掌握 GitHub 及 Git 的使用方法, 建立个人博客个人介绍 ❤️ 兴趣爱好听歌 🎧 书法📝 看书,尤其是科幻小说 📊 二次元爱好者 🎩📖 学习经历广东…

Hugging Face 发布 Python WebRTC 库:构建实时音视频应用;微软 Magma:多模态跨数字物理世界丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…

1Panel 专业版评测:全面超越宝塔的运维面板新标杆

一、 UX体验与移动端适配:更直观的跨平台交互 1Panel 专业版在用户体验上实现了对宝塔的全面超越。其界面采用现代化设计语言,以黑金主题 为代表的可定制化主题系统支持一键切换,视觉风格更符合技术审美,同时保持功能模块的清晰布局。相较于宝塔复杂的多级菜单,1Panel 的 …

基于抖音agent平台Cozi打造Agent智能体

AI Agent 一、AI Agent(智能体)与开发平台 【1】AI Agent的概念 AI Agent直接翻译更准确,AI代理人。AI Agent是指可以自主执行任务或目标的系统,它可以是一个软件,也可以是一个智能机器,这些系统通过感知环境并在此基础上做出决策。AI Agent可以集成多种技术,包括AI大模…