在如今的SpringBoot微服务项目中,前后端分离已成为业界标准使用方式,通过使用nginx等代理方式有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多个客户展现端,例如:web端,安卓app,IOSapp,微信小程序等)打下坚实的基础。这个步骤是系统架构从猿进化成人的必经之路。

 
image

上图是简单的分布式微服务开发及前后端分离的示意图。展现层也就是所谓的前端(客户可直观看到的),比如电商项目前端包含:app(安卓和IOS)、微信小程序、PC商城、Web后台。后端是整个项目的核心,也就是系列项目中讲的内容,后端用Springboot+Dubbo实现分布式开发微服务落地,服务实现层的每一个服务都是一个独立部署的应用,并提供服务(Dubbo的提供者),接口层根据前端的请求,然后找对应的服务提供者消费服务。

在前后端分离的应用模式中,后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果。至于前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端自己决定,网页有网页的处理方式,各自有各自的处理方式,但无论哪种前端,所需的数据基本相同,后端仅需开发一套逻辑对外提供数据即可。前端(Web项目)分离处理,都是从原先的JSP转成了Html静态页面。

Web项目部署容器的选取

目前常用的部署Web项目的容器用Tomcat、Apache、Nginx等,那我们前后端分离后的前端Html静态项目到底部署在那个应用容器呢?我们先看看这几个应用容器的区别。

Nginx,Apache,Tomcat的区别:

Nginx常用做静态内容服务和代理服务器,直接外来请求转发给后面的应用服务器(如tomcat),而tomcat更多用来做一个应用容器。

1,Apache和nginx应该叫做HTTP Server,而tomcat是一个Application Server是一个Servlet/JSO应用的容器。

2,HTTP Server访问服务器上存储的资源(HTML文件,图片文件等),HTTP Server是中只是把服务器上的文件如实通过HTTP协议传输给客户端。

3,Application Server(应用服务器)往往是运行在HTTP Server的背后并执行应用,将动态的内容转化为静态的内容之后,通过HTTP Server分发到客户端。

4,Apache是同步多进程模型,一个连接对应一个进程,而nginx是一步的,多个连接(万级别)可以对应一个进程。nginx轻量级,抗并发,处理静态文件好。

根据对比,我们不难发现Nginx是较好的选择,它是由俄罗斯人(伊戈尔·赛索耶夫)开发的一款高性能的HTTP和反向代理web服务器。本身是轻量级、抗并发、能实现万级的连接等。同时它也是一个反向代理服务器。因此,我们不仅可以用它部署静态的html应用,还可以实现域名及访问地址的代理。

Nginx部署前端Web项目

Nginx的安装这里不做介绍,只说配置及部署相关内容。首先进入linux系统中Nginx的安装录的conf目录下,找到nginx.config配置文件,vim nginx.config进入编辑模式,在http下的server对应的同级编辑或添加如下代码,然后在root对应的目录下上传对应的html今天项目文件。注意:这里上传的如果是压缩包就需要解压,目录下要有index.html。

server {

但我们的实际项目中,经常有多个Web端需要部署,如前面图中的例子,Web端有PC商城和Web后台系统,甚至可能更多,这些多个Web静态项目我们都放在nginx的html目录下的不同文件夹里,然后通过域名或ip+port代理到对应目录。下面就是多个Web项目在Nginx里的配置。

##商城Html页面

编辑完成后保存,并重启nginx服务 service nginx restart。

注:server_name 这里可配置域名或ip+端口号。

后端项目的部署

大家应该都知道,SpringBoot里集成了Tomcat容器,所有Springboot的项目部署,很是容易,根本不需要你还安装什么Tomcat、JBoss等应用。我们只需打成jar文件,上传到服务器,然后通过执行java -jar ***.jar &命令即可。

 
image

但有没有人遇到过,你通过java -jar ***.jar &刚刚部署的服务,在你断开linux服务器的shell连接后服务就没了。大家有知道这是什么原因吗?这里给大家说说部署java jar文件命令的那点事。

1,java -jar ***.jar &

此命令可直接启动jar文件,是在当前会话进程中开启一个子进程来运行程序,这个子进程会随着会话进程的结束而结束。也就是说在你端口Shell连接回话结束,服务就跟着结束了。这种情况适合短时间测试用。

2,nohup java -jar ***.jar &

这里在说这个命令前先说两个名词,即:

  • hangup (挂断),终端退出时会发送 hangup 信号来通知关闭所有子进程。

  • nohup(不挂断,忽略挂断信号)

nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上"&"来将命令同时放入后台运行,也可用">filename2>&1"来更改缺省的重定向文件名。这种情况适合在生产环境长时间运行。

在生产环境如果你只用简单的jar部署,那一定得用*nohup java *命令启动应用。

 
  • 扫码关注公众号,发送关键词获取相关资料:
  1. 发送“Springboot”领取电商项目实战源码;
  2. 发送“SpringCloud”领取cloud学习实战资料;
 

SpringBoot电商项目实战 — 前后端分离后的优雅部署及Nginx部署实现的更多相关文章

  1. springBoot 搭建web项目(前后端分离,附项目源代码地址)

    springBoot 搭建web项目(前后端分离,附项目源代码地址)   概述 该项目包含springBoot-example-ui 和 springBoot-example,分别为前端与后端,前后端 ...

  2. SpringBoot电商项目实战 — 商品的SPU/SKU实现

    最近事情有点多,所以系列文章已停止好多天了.今天我们继续Springboot电商项目实战系列文章.到目前为止,整个项目的架构和基础服务已经全部实现,分布式锁也已经讲过了.那么,现在应该到数据库设计及代 ...

  3. SpringBoot电商项目实战 — Redis实现分布式锁

    最近有小伙伴发消息说,在Springboot系列文第二篇,zookeeper是不是漏掉了?关于这个问题,其实我在写第二篇的时候已经考虑过,但基于本次系列文章是实战练习,在项目里你能看到Zookeepe ...

  4. SpringBoot电商项目实战 — ElasticSearch接入实现

    如今在一些中大型网站中,搜索引擎已是必不可少的内容了.首先我们看看搜索引擎到底是什么呢?搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术.搜索引擎依托于 ...

  5. SpringBoot电商项目实战 — Zookeeper的分布式锁实现

    上一篇演示了基于Redis的Redisson分布式锁实现,那今天我要再来说说基于Zookeeper的分布式现实. Zookeeper分布式锁实现 要用Zookeeper实现分布式锁,我就不得不说说zo ...

  6. Java 18套JAVA企业级大型项目实战分布式架构高并发高可用微服务电商项目实战架构

    Java 开发环境:idea https://www.jianshu.com/p/7a824fea1ce7 从无到有构建大型电商微服务架构三个阶段SpringBoot+SpringCloud+Solr ...

  7. vue项目实践-前后端分离关于权限的思路

    前后端分离后权限的思路 最近看到许多关于权限的思路,但好像都是使用动态加载路由的方式,现在也分享下我在项目中使用的解决方案. 前后端分离关于权限的处理每个人都不一样,根据项目选择制定合适的方案就好 我 ...

  8. Spark大型电商项目实战-及其改良之番外(1)-将spark前端页面效果高效拷贝至博客

    Spark大型电商项目实战-及其改良这个系列的时间轴展示图一直在变....1-3篇是用图直接表示时间轴,用一段简陋的html代码表示时间表.第4篇开始才是用比较完整的前端效果,能移动.缩放时间轴,鼠标 ...

  9. web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 ☝☝☝

    web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程    web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 学习 ...

随机推荐

  1. 20191107-7 beta week 2/2 Scrum立会报告+燃尽图 06

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9959 一.小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 韩昊 ...

  2. 01_Numpy基本使用

    1.Numpy读取txt/csv文件 读取数据 import numpy as np # numpy打开本地txt文件 world_alcohol = np.genfromtxt("D:\\ ...

  3. easyui textbox 赋值

    $('#fireInfo').textbox('setValue', tempData.fireInfo); $('#fireStartTime').datetimebox('setValue', t ...

  4. 【软件工具】easyExcel简明使用指南

    easyExcel简介 Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不发的话可能还行,但是一旦并发上来 ...

  5. Python下定义输出日志

    # 话不多说,直接看代码,,, # -*- coding:UTF-8 -*- # python version: 2.7.15 #脚本名, 日志名,日志路径 import os import sys ...

  6. 动态规划算法(java)

    一.动态规划算法 众所周知,递归算法时间复杂度很高为(2^n),而动态规划算法也能够解决此类问题,动态规划的算法的时间复杂度为(n^2).动态规划算法是以空间置换时间的解决方式,一开始理解起来可能比较 ...

  7. python内存-fromkeys

    fromkeys 这个方法涉及到可变不可变类型,记录下测试代码 不可变类型 #可变类型-list x=["zx","zx2","zx3"] ...

  8. Netty学习——Apache Thrift 简介和下载安装

    Netty学习——Apache Thrift 简介和下载安装 Apache Thrift 简介 本来由Facebook开发,捐献给了Apache,成了Apache的一个重要项目 可伸缩的,跨语言的服务 ...

  9. 硬核! 逛了4年Github ,一口气把我收藏的 Java 开源项目分享给你!

    Awsome Java Great Java project on Github(Github 上非常棒的 Java 开源项目). English Version 大家都知道 Github 是一个程序 ...

  10. 15.Django基础十一之认证系统

    一 auth模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个 ...