文章目录

  • 1. 项目准备
    • 1.1 后端项目
      • 1.1.1 数据库表
      • 1.1.2 SpringBoot项目
    • 1.2 前端项目
      • 1.2.1 页面
      • 1.2.2 nginx代理
      • 1.2.3 页面效果
  • 2. Docker镜像准备
    • 2.1 数据库镜像
      • 2.1.1 初始化sql脚本
      • 2.1.2 Dockerfile
    • 2.2 后端镜像
      • 2.2.1 Dockerfile
    • 2.3 前端镜像
  • 3. k8s配置文件
    • 3.1 数据库
      • 3.1.1 Deployment
      • 3.1.2 Service
    • 3.2 后端项目
      • 3.2.1 ReplicationController
      • 3.2.2 Service
    • 3.3 前端项目
      • 3.3.1 Deployment
      • 3.3.2 Service

1. 项目准备

项目demo简述:
前端:nginx部署页面,并反向代理后端api接口
后端:SpringBoot + Mybatis,web项目访问mysql数据库

1.1 后端项目

1.1.1 数据库表

user

CREATE DATABASE  IF NOT EXISTS `demo` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `demo`;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`age` int(11) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'Jack', 22);
INSERT INTO `user` VALUES (2, 'Tom', 21);SET FOREIGN_KEY_CHECKS = 1;

1.1.2 SpringBoot项目

同普通SpringBoot项目一样,整合Mybatis,可参考我其他的博客。下面只给出Controller,和访问结果。

package ace.gjh.controller;import ace.gjh.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author ACE_GJH* @date 2021/5/7*/
@RestController
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/user")public Object userInfo(){return userService.listUsers();}}

访问效果

GET http://localhost:8888/test/user
[{"id": 1,"name": "Jack","age": 22},{"id": 2,"name": "Tom","age": 21}
]

1.2 前端项目

1.2.1 页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>test</title><script src="js/jquery-3.4.1.min.js"></script><script>$(function () {test()})/*加载文件列表*/function test() {$.ajax({url: "/api/test/user",type: "GET",dataType: "json",success: function (result) {$("#result").text("name: " + result[0].name + " age: " + result[0].age + " | name: " + result[1].name + " age: " + result[1].age)}})}</script>
</head>
<body><h2>测试页面</h2>
访问后台数据结果:<p id="result"></p>
</body>
</html>

1.2.2 nginx代理

注意反向代理需要配置后端Service的Cluster-IP和端口,因为nginx的配置文件无法从环境变量中获取值(无法通过服务发现获取后端服务的IP和端口)。

    server {listen       18888;server_name  localhost;location / {root   <你的前端文件夹路径>\k8s-test-frontend;index  index.html index.htm;}# 反向代理后端apilocation /api {rewrite ^/api/(.*)$ /$1 break; proxy_pass http://<后端Service的Cluster-IP>:<后端Service的端口>/;} }

1.2.3 页面效果

2. Docker镜像准备

2.1 数据库镜像

2.1.1 初始化sql脚本

CREATE DATABASE  IF NOT EXISTS `demo` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `demo`;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`age` int(11) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'Jack', 22);
INSERT INTO `user` VALUES (2, 'Tom', 21);SET FOREIGN_KEY_CHECKS = 1;

2.1.2 Dockerfile

FROM mysql:8.0.24
MAINTAINER ACE_GJH
COPY ./demo.sql /docker-entrypoint-initdb.d

制作镜像

docker build -f Dockerfile -t demo-mysql:0.1.0 .

2.2 后端镜像

2.2.1 Dockerfile

注意:脚本中最后的java运行命令,需要从环境变量中注入Mysql服务Service的Cluster-IP和对应的端口,需要参照MySQL的Service中的名称进行对应,例如下面的mysql服务IP地址为环境变量DEMO_MYSQL_SERVICE_SERVICE_HOST,mysql端口DEMO_MYSQL_SERVICE_SERVICE_PORT_MYSQL_PORT,还要注意这坑爹的时区serverTimezone=UTC,一定要和你的服务器对应,否则一直连接超时。

FROM java:8-alpine
MAINTAINER ACE_GJH
RUN mkdir /app
WORKDIR /app
COPY k8s-deploy-1.0-SNAPSHOT.jar /app
EXPOSE 8888
ENV JAVA_OPT="-Xmx32m -Xms32m -Xmn16m"
CMD java $JAVA_OPT -Dspring.datasource.url="jdbc:mysql://${DEMO_MYSQL_SERVICE_SERVICE_HOST}:${DEMO_MYSQL_SERVICE_SERVICE_PORT_MYSQL_PORT}/demo?characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" -jar k8s-deploy-1.0-SNAPSHOT.jar

制作镜像

docker build -f Dockerfile -t demo-backend:0.1.0 .

2.3 前端镜像

FROM nginx:1.20.0-alpine
MAINTAINER ACE_GJH
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
COPY ./webpack/dist /usr/share/nginx/webpack/dist

制作镜像

docker build -f Dockerfile -t demo-frontend:0.1.0 .

3. k8s配置文件

3.1 数据库

3.1.1 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:name: demo-mysqlnamespace: gjh
spec:selector:matchLabels:app: demo-mysqlreplicas: 1template:metadata:labels:app: demo-mysqlspec:volumes:# mysql数据- name: mysql-datahostPath:path: /root/data/demo/mysqlcontainers:- name: demo-mysqlimage: demo-mysql:0.1.0ports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: rootvolumeMounts:- mountPath: /var/lib/mysqlname: mysql-data

3.1.2 Service

apiVersion: v1
kind: Service
metadata:name: demo-mysql-servicenamespace: gjh
spec:ports:- port: 3306name: mysql-portselector:app: demo-mysql

3.2 后端项目

3.2.1 ReplicationController

为了起到负载均衡的作用,这里副本数选择2

apiVersion: v1
kind: ReplicationController
metadata:name: demo-backend-rcnamespace: gjhlabels:app: demo-backend
spec:selector:app: demo-backendreplicas: 2template:metadata:labels:app: demo-backendspec:containers:- name: demo-backendimage: demo-backend:0.1.0ports:- containerPort: 8888

3.2.2 Service

apiVersion: v1
kind: Service
metadata:name: demo-backend-servicenamespace: gjh
spec:type: NodePortports:- port: 8888name: backend-portnodePort: 38888selector:app: demo-backend

3.3 前端项目

3.3.1 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:name: demo-frontendnamespace: gjh
spec:selector:matchLabels:app: demo-frontendreplicas: 1template:metadata:labels:app: demo-frontendspec:containers:- name: demo-frontendimage: demo-frontend:0.1.0ports:- containerPort: 18888

3.3.2 Service

apiVersion: v1
kind: Service
metadata:name: demo-frontend-servicenamespace: gjh
spec:type: NodePortports:- port: 18888name: frontend-portnodePort: 38889selector:app: demo-frontend

k8s部署前后端分离项目相关推荐

  1. linux --- 部署前后端分离项目

    vue + uwsgi +nginx 部署前后端分离项目 准备项目 1.将前端vue项目包和后端django项目包上传服务器,通过lrzsz,直接从windows拖进linux中 2.解压缩操作 前端 ...

  2. 使用 Nginx 部署前后端分离项目,解决跨域问题

    前后端分离这个问题其实松哥和大家聊过很多了,上周松哥把自己的两个开源项目部署在服务器上以帮助大家可以快速在线预览(喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了 ...

  3. (一)专题介绍:移动端安卓手机改造成linux服务器linux服务器中安装软件、部署前后端分离项目实战

    快捷目录 前言 一.涉及到的相关技术简介 二.具体实现过程及踩坑杂谈 1.安卓手机改造成linux系统实现方案 2.改造后的手机Linux中软件的安装 3.手机Linux中安装MySQL5.7踩坑实录 ...

  4. Docker部署前后端分离项目

    云主机 centos7 中Docker容器式部署前后端分离项目Django+Vue.js 前期准备: Docker安装Docker - CentOS Docker 软件包和依赖包已经包含在默认的 Ce ...

  5. tomcat vue 不用 前后端_部署前后端分离项目(后端 tomcat 前端 nginx)

    关键词 spring-boot gradle 腾讯云 tomcat nginx vue 前后端分离 代理 前言 因为种种原因,把后端部署在 tomcat,前端项目部署在 nginx. Tomcat t ...

  6. weblogic部署前后端分离项目

    环境说明 序号 服务名称 版本信息 1 weblogic weblogic 12.2.1.3.0 2 jdk jdk-1.8.0_111 环境准备 (1)jdk安装(已安装请忽略) 将发布包下的ins ...

  7. Windows 平台部署前后端分离项目

    背景 因为公司业务主要与工业相关,工业使用的多数为Windows电脑,此时就需要将公司的系统部署在Windows平台上,这里使用Django来作为后端. 一.数据库部署 1.1 本地环境准备 在后端部 ...

  8. tomcat部署前后端分离项目404问题

    最近在部署项目时,访问出现了404,特此记录一下 1.tomcat解压,最好不要放在C盘 2.将VUE开发的前端项目放在webapp目录下,目的是tomcat启动后可以访问网站 3.部署后端war包 ...

  9. 基于docker部署前后端分离项目--->docker+Dockerfile+vue+nginx+uwsgi+django+socket+负载均衡

    1. 介绍 本文基于阿里云服务器,安装的ubuntu20.04系统 适用于conten7.5系列 适用于ubuntu16.04以上系列 vue已经打包完成,所以不能使用我的vue项目 2. 部署 部署 ...

最新文章

  1. asp.net httpmodule 访问页面控件 备忘
  2. 微服务项目的整合与测试
  3. java两个线程同时运行_Java实现的两个线程同时运行案例
  4. 全球及中国海洋工程装备行业产值规模价值及投资风险预警报告2021-2027年版
  5. 学习笔记(3.23)
  6. Java并发之volatile
  7. 用python处理excel的基本语法_《使用python3读取处理excel表的数据内容如何对内容求平均值》 用python读取excel文件...
  8. 前端学习(2821):windows上配置tabber字段
  9. SLAM Cartographer(12)Local SLAM的主线业务
  10. 美味爱读提供一种崭新的阅读方式
  11. 单片机制作工具大汇总!!
  12. 全球供应链报告显示2020年中国采购业一枝独秀;疫情加大全球企业数字化差距 | 美通企业日报...
  13. 创龙TI TMS320C6748定点/浮点DSP C674xSD卡接口、拓展IO信号
  14. NLP+词法系列(一)︱中文分词技术小结、几大分词引擎的介绍与比较
  15. 开始自学PHP之路3(HTML)
  16. Spring2:bean的使用
  17. Proxifier设置代理上网详细操作
  18. html字数不同相同宽度的按钮,HTML_按钮在IE中两边被拉伸的 BUG,大家在写按钮(input、button) - phpStudy...
  19. 心理测评软件的心理测试法的优缺点,心理测评平台系统优点 心理测试软件 靠谱的心理测评系统...
  20. 7.深入浅出:互补输出级——参考《模拟电子技术基础》清华大学华成英主讲

热门文章

  1. steam服务器维修,Steam 停机及服务器维护 - Steam Support
  2. Properties类的load方法
  3. 互联网:2023年,省市县行政区划名称及编码对照表、最新省市区表1
  4. 「Java」基于Mirai的qq机器人开发踩坑笔记(其二)
  5. PHP imagick安装与配置
  6. SQL中1=1与11的使用
  7. 芯片设计产业链的一些理解
  8. ABAP ALV 删除按钮标准写法
  9. openssl 加盐_用盐打开Openssl AES 256 CBC Java Decrypt文件
  10. ospf不连续区域网络互通