前后端(react+springboot)服务器部署

前后端(react+springboot)服务器部署

  • 1_前端react+umi服务器部署
    • 1.1_前端生成dist目标文件
    • 1.2_准备连接服务器的工具
    • 1.3_安装nginx
    • 1.4_部署项目
      • 1.4.1_传输dist文件
      • 1.4.2_配置配置文件
      • 1.4.3_启动nginx
  • 2_后端springboot项目部署服务器
    • 2.1_后端生成目标文件
    • 2.2_准备连接服务器的工具(同1.2)
    • 2.3_在服务器上安装jdk环境
    • 2.4_部署项目

1_前端react+umi服务器部署

1.1_前端生成dist目标文件

在控制台输入:umi build生成dist文件

1.2_准备连接服务器的工具

准备XShell(用于控制服务器控制台)以及Xftp(用于和服务器传输文件)

阿里云盘下载链接

1.3_安装nginx

见此大神博客

1.4_部署项目

1.4.1_传输dist文件

将前端目标文件dist重命名为自己喜欢的名字如webClient(比如现在需要部署两个项目,在本例中前端的两个目标文件分别命名为webClient1,webClient2),放到服务器中安装好的nginx文件目录下。

目录结构:
+usr
​+++nginx //安装的nginx
​+++conf //配置文件目录
​+++sbin //启动nginx时需要前往的文件
​+++webClient1 //前端1的目标文件
+++webClient2 //前端2的目标文件

1.4.2_配置配置文件

配置配置文件nginx.conf

原文件(别看这个)

#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;#    location / {#        root   html;#        index  index.html index.htm;#    }#}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}}

删减后并加了注释的原文件

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#配置一个server接口,此例的访问路径为localhost:80/,因为接口的默认端口是80,所以也可以这样访问localhost#上一行中的localhost代表此服务器的IP地址server {listen       80;#监听的端口号server_name  localhost;# localhost后面的 '/' 是访问的接口路径location / {root   html;#html是nginx下的前端目标文件的相对路径index  index.html index.htm;#不用动}}
}

在本例中应该如此配置

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#配置webClient1的接口,访问路径是localhost:8080/webClientserver {listen       8080;server_name  localhost;location /webClient {root   webClient1;index  index.html index.htm;}}#配置webClient2的接口,访问路径是localhost:8081/webClientserver {listen       8081;server_name  localhost;location /webClient {root   webClient2;index  index.html index.htm;}}
}

1.4.3_启动nginx

  1. 启动nginx

启动代码格式:nginx安装目录地址 -c nginx配置文件地址

例如:

[root@localhost ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  1. 重启nginx
[root@localhost sbin]# ./nginx -s reload

nginx命令大全

2_后端springboot项目部署服务器

这里只讲解其中一种比较简单的方式

详情见此大神博客

2.1_后端生成目标文件

  1. 在pom文件中加入代码
<packaging>jar</packaging>

[(img-NaGobuYK-1668481227479)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20221115103659948.png)]

  1. 生成jar目标文件(生成文件的位置在target目录下)

点击package运行即可

在这里插入图片描述

2.2_准备连接服务器的工具(同1.2)

2.3_在服务器上安装jdk环境

  1. 下载jdk

jdk下载官网:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html,博主使用的版本是jdk-8u261-linux-x64.tar.gz

  1. 上传到服务器中并解压

    (1)在opt目录下创建jdk文件夹

    (2)解压 jdk-8u261-linux-x64.tar.gz

    tar -zxvf jdk-8u261-linux-x64.tar.gz
    

    解压完成之后会出现jdk1.8文件夹。

  1. 配置环境变量

    (1)打开profile配置文件

    vi /etc/profile
    

    (2)添加以下代码(注意:JAVA_HOME就是jdk1.8的文件路径。其他不用变)

    export JAVA_HOME=/opt/jdk/jdk1.8
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
    

    (3)使配置文件生效

    source /etc/profile
    

    (4)查看jdk安装成功与否

    java -version
    

2.4_部署项目

  1. 将目标jar文件放到opt目录下的新建文件夹下,比如新建的文件名为webServer
  1. 改写start.sh运行脚本文件
#!/bin/bash#变量,将APP_NAME改为自己的jar包名,APP_LOCAL改为自己项目的路径
APP_NAME=serve-0.0.1-SNAPSHOT.jar
APP_LOCAL=/opt/mySpringboot/
APP_ALL=$APP_LOCAL$APP_NAME#线程已经存在则 先kill 
tpid=`ps -ef|grep $APP_ALL|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; thenecho 'Stopping' $APP_ALL '...'kill -15 $tpid
fi
sleep 5
tpid=`ps -ef|grep $APP_ALL|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; thenecho 'Kill' $APP_ALL 'Process!'kill -9 $tpid
elseecho $APP_ALL 'Stoped Success!'
fi#启动
rm -f tpidnohup java -Dfile.encoding=UTF-8 -jar $APP_ALL > $APP_LOCAL"out.log" 2>&1 &
echo $! > $APP_ALL".tpid"
echo $APP_ALL Start Success!
  1. 将start.sh脚本文件放入webServer项目目录下并在当前目录下运行

    bash start.sh
    
  1. 查看运行日志

    运行成功后会在当前目录下生成一个out.log日志,可以进行查看

  1. 重启

    (1)杀死之前的进程

    #查看所占用的进程号
    ps -ef | grep jar包的名字.jar
    #杀死进程
    kill -9 进程id
    

    (2)启动

    bash start.sh

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

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

相关文章

提高生产力,最全 MyBatisPlus 讲解!

如果你每天还在重复写 CRUD 的 SQL&#xff0c;如果你对这些 SQL 已经不耐烦了&#xff0c;那么你何不花费一些时间来阅读这篇文章&#xff0c;然后对已有的老项目进行改造&#xff0c;必有收获&#xff01;一、MP 是什么MP 全称 Mybatis-Plus &#xff0c;套用官方的解释便是成…

c#象棋程序_C ++程序确定象棋方块的颜色

c#象棋程序A chess board is equally divided into 64 identical squares that are black and white alternately. Each square on the chessboard can be identified by the coordinates as A to H on the horizontal axis and 1 to 8 on the vertical axis as shown in the f…

MySQL中你必须知道的10件事,1.5万字!

攻击性不大&#xff0c;侮辱性极强1、SQL语句执行流程MySQL大体上可分为Server层和存储引擎层两部分。Server层&#xff1a;连接器&#xff1a;TCP握手后服务器来验证登陆用户身份&#xff0c;A用户创建连接后&#xff0c;管理员对A用户权限修改了也不会影响到已经创建的链接权…

Xamarin只言片语2——Xamarin下的web api操作

在很多时候&#xff0c;我们是希望手机app是要和服务端关联&#xff0c;并获取服务端的数据的&#xff0c;本篇博文我们看一下在xmarin下&#xff0c;怎么和用web api的方式与服务端连接并获取数据。首先看web api的开发&#xff0c;本实例是用Visual Studio 2013 with update …

求求你,别再用wait和notify了!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;Condition 是 JDK 1.5 中提供的用来替代 wait 和 notify 的线程通讯方法&#xff0c;那么一定会有人问&#xff1a;为什么不…

一文学搞懂阿里开源的微服务新贵Nacos!

正式开始之前我们先来了解一下什么是 Nacos&#xff1f;Nacos 是阿里的一个开源产品&#xff0c;它是针对微服务架构中的 「服务发现」、「配置管理」、「服务治理」的综合性解决方案。官网给出的回答&#xff1a;“Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组…

The connection to adb is down, and a severe error has occured.

转自&#xff1a;http://blog.csdn.net/yu413854285/article/details/7559333 &#xff08;感谢原文作者&#xff0c;问题解决&#xff09; 启动android模拟器时.有时会报The connection to adb is down, and a severe error has occured.的错误.在网友说在任务管理器上把所有…

线程池的7种创建方式,强烈推荐你用它...

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;根据摩尔定律所说&#xff1a;集成电路上可容纳的晶体管数量每 18 个月翻一番&#xff0c;因此 CPU 上的晶体管数量会越来越…

线性代数向量乘法_标量乘法属性1 | 使用Python的线性代数

线性代数向量乘法Prerequisite: Linear Algebra | Defining a Vector 先决条件&#xff1a; 线性代数| 定义向量 Linear algebra is the branch of mathematics concerning linear equations by using vector spaces and through matrices. In other words, a vector is a mat…

Synchronized 的 8 种使用场景!

blog.csdn.net/x541211190/article/details/106272922简介本文将介绍8种同步方法的访问场景&#xff0c;我们来看看这8种情况下&#xff0c;多线程访问同步方法是否还是线程安全的。这些场景是多线程编程中经常遇到的&#xff0c;而且也是面试时高频被问到的问题&#xff0c;所…

Python的threadpool模块

2019独角兽企业重金招聘Python工程师标准>>> Python的threadpool模块 这是一个使用python实现的线程池库。 安装 pip install threadpool 文档 http://gashero.yeax.com/?p44 http://www.chrisarndt.de/projects/threadpool/ 测试 使用一个20个线程的线程池进行测试…

硬核Redis总结,看这篇就够了!

高清思维导图已同步Git&#xff1a;https://github.com/SoWhat1412/xmindfile总感觉哪里不对&#xff0c;但是又说不上来1、基本类型及底层实现1.1、String用途&#xff1a;适用于简单key-value存储、setnx key value实现分布式锁、计数器(原子性)、分布式全局唯一ID。底层&…

文件写入的6种方法,这种方法性能最好

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;在 Java 中操作文件的方法本质上只有两种&#xff1a;字符流和字节流&#xff0c;而字节流和字符流的实现类又有很多&#x…

JDK 16 即将发布,新特性速览!

你还能追上 Java 的更新速度吗&#xff1f;当开发者深陷 Java 8 版本之际&#xff0c;这边下一版本 Java 16 有了最新的消息&#xff0c;与 Java 15 一样&#xff0c;作为短期版本&#xff0c;Oracle 仅提供 6 个月的支持。根据发布计划&#xff0c;JDK 16 将在 12 月 10 日和 …

最牛逼的 Java 项目实战,没有之一!

想要成长为高级开发&#xff0c;掌握更多层面的技术&#xff0c;兼顾深度和广度是毋庸置疑的。你肯定认为&#xff0c;我要认真努力的学习技术&#xff0c;丰富自己的技术栈&#xff0c;然后就可以成为一个优秀的高级开发了。但当你真正去学习之后就会发现&#xff0c;技术栈异…

定时任务的实现原理,看完就能手撸一个!

一、摘要在很多业务的系统中&#xff0c;我们常常需要定时的执行一些任务&#xff0c;例如定时发短信、定时变更数据、定时发起促销活动等等。在上篇文章中&#xff0c;我们简单的介绍了定时任务的使用方式&#xff0c;不同的架构对应的解决方案也有所不同&#xff0c;总结起来…

Spring Boot集成Redis,这个坑把我害惨了!

最近项目中使用SpringBoot集成Redis&#xff0c;踩到了一个坑&#xff1a;从Redis中获取数据为null&#xff0c;但实际上Redis中是存在对应的数据的。是什么原因导致此坑的呢&#xff1f;本文就带大家从SpringBoot集成Redis、所踩的坑以及自动配置源码分析来学习一下SpringBoot…

数据分析告诉你为什么Apple Watch会大卖?

摘要: 不管是无敌创意还是无聊鸡肋&#xff0c;苹果手表还是来了。眼下它上市在即&#xff0c;将率先登陆9个国家或地区——包括中国。根据凌晨发布会上公布的内容&#xff0c;Apple Watch采用全新的压感触屏和蓝宝石镜面&#xff0c;能够记录健康数据、同步手机信息 ...不管是…

putc函数_C语言中的putc()函数与示例

putc函数C语言中的putc()函数 (putc() function in C) The putc() function is defined in the <stdio.h> header file. putc()函数在<stdio.h>头文件中定义。 Prototype: 原型&#xff1a; int putc(const char ch, FILE *filename);Parameters: const char ch,…

编程中的21个坑,你占几个?

前言最近看了某客时间的《Java业务开发常见错误100例》&#xff0c;再结合平时踩的一些代码坑&#xff0c;写写总结&#xff0c;希望对大家有帮助&#xff0c;感谢阅读~1. 六类典型空指针问题包装类型的空指针问题级联调用的空指针问题Equals方法左边的空指针问题ConcurrentHas…