前后端分离项目部署(Tomcat+Nginx):若依

您所在的位置:网站首页 tomcat部署多个war包同一个 前后端分离项目部署(Tomcat+Nginx):若依

前后端分离项目部署(Tomcat+Nginx):若依

2023-07-16 02:25| 来源: 网络整理| 查看: 265

一、后端部署(tomcat) 1、修改打包方式为war包 war 2、移除tomcat依赖或者将tomcat依赖scope改为provide 移除Tomcat依赖   org.springframework.boot     spring-boot-starter-web                          org.springframework.boot         spring-boot-starter-tomcat             将scope改为provide   org.springframework.boot   spring-boot-starter-tomcat   provided 3、继承SpringBootServletInitializer

  正常springboot项目在创建的时候是会生成启动类的,这个类启动的是内置的tomcat容器。

但是我们是用的外部的容器,这个时候我们发现有一个问题就是,我们配置的时候好像少了一个web.xml文件,这个是在spring+springmvc时代的配置文件,但是在springboot中是没有这个文件的,但是功能上来说我们不能丢弃这,所以才需要继承SpringBootServletInitializer这个类来替代web.xml的功能。

启动类代码:

@SpringBootApplication public class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);   } } 方式一:启动类继承 @SpringBootApplication public class Application extends SpringBootServletInitializer { ​    public static void main(String[] args) {        SpringApplication.run(Application.class, args);   } ​    @Override    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {        return builder.sources(Application.class);   } } 方式二:新增类 public class ServletInitializer extends SpringBootServletInitializer { ​    @Override    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {        //此处的Application.class为带有@SpringBootApplication注解的启动类        return builder.sources(Application.class);   } ​ } 4、注意事项

使用外部Tomcat部署访问的时候,application.yml中配置的

server.port= server.servlet.context-path=

将失效,请使用tomcat的端口。

建议pom.xml文件中标签下添加标签:

   war包名称                        org.springframework.boot            spring-boot-maven-plugin             5、配置Tomcat

打开conf文件夹下的server.xml,在其HOST节点下添加

端口号配置:

配置完成后重启tomcat

二、前端部署(ngnix) 1.前端打包

运行npm run build:prod命令(此处以若依为例)

成功后根目录生成dist文件夹,里面有js、css、html等静态文件

2、部署静态文件

将static文件夹、favicon以及index.html复制到nginx的html文件夹下

3、配置nginx

打开conf文件夹下的nginx.conf,加入以下配置:

worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 端口号; //此处为端口号配置 server_name localhost; charset utf-8; location / { root 此处为静态文件存放的路径,即html文件夹存放位置,建议填写绝对路径; try_files $uri $uri/ /index.html; index index.html index.htm; } location /prod-api/ { //此处是做路径跳转,具体根据项目来定,此外为若依配置;建议/prod-api/和/dev-api/两个都加上 proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8080/; //跳转路径 } location /dev-api/ { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8080/; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }

重要的配置:

server:listen:端口号

location/:root:静态文件路径

location /prod-api/:前后端映射路径跳转

三、netty配置

使用netty时,如果不做修改,会导致项目无法启动。

netty端口号在程序中yml中配置,本项目为:9090

netty: #端口 port: 8088

重要:

netty服务端绑定端口异步监听,等待客户端连接,这个过程会导致线程变为wait状态

解决:开辟一个新的线程专门监听客户端,程序如下:

@Component public class NettyServerListener implements ApplicationListener { @Autowired private TCPServer tcpServer; private static final Logger LOGGER = LoggerFactory.getLogger(NettyServerListener.class); @Override public void onApplicationEvent(ContextRefreshedEvent event) { if (event.getApplicationContext().getParent() == null){ LOGGER.info("NettyServer Start Success"); new Thread(tcpServer).start(); } } }

TCPServer需要继承Runnable,并重写run方法。run方法中书写netty服务端逻辑



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3