linux环境 Java springboot 前后端 项目部署,仅支持md格式预览

仅支持md格式预览,可以下个typora,就能正常显示图片了

# codesheep 视频笔记

* 包含 项目下载、运行、配置、构建、打包、部署:全步骤实战演示。前后端分离式项目实战部署

* nginx、tomcat部署配置

###### [视频链接](https://www.bilibili.com/video/BV1uK411p7Bp)


![codesheep](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200626111359256.png)

## 下载

---

[项目下载地址](https://gitee.com/y_project/RuoYi-Vue)

文件结构![image-20200626130133931](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200626130133931.png)

## 运行

## 配置

###### 建立修改数据库

![image-20200626130452124](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200626130452124.png)
###### 修改redis配置

![image-20200626131246709](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200626131246709.png)
###### 修改日志路径 和 encoding 视频10分钟处

![image-20200626132750707](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200626132750707.png)

成功启动

我只有一台服务器,所以就在一台上操作了,羊哥是一台放前端文件,两台放后端文件 存放路径均保持一致

将前端文件ruoyi-ui打包成zip传到服务器root/workspace文件夹【打包是为了防止隐藏文件丢失】

unzip ruoyi-ui.zip 【解压】
rm -rf ruoyi-ui.zip  【删除压缩包】

后端文件同样传到root/workspace

## 打包

#### 前端部分

1. 安装前端依赖

   * cd ruoyi-ui

   * npm install --unsafe-perm --registry=https://registry.npm.taobao.org

     

2. 前端打包[打生产环境的包]

   * cd ruoyi-ui

   * npm run build:prod

     ```shell
    实际操作下来,npm run build:prod 会报错(如下),所以我就在自己机子上打war包,再传到服务器里
     ERROR  Build failed with errors.
     npm ERR! code ELIFECYCLE
     npm ERR! errno 1
     npm ERR! [email protected] build:prod: `vue-cli-service build`
     npm ERR! Exit status 1
     npm ERR! 
     npm ERR! Failed at the [email protected] build:prod script.
     npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
     
     npm ERR! A complete log of this run can be found in:
     npm ERR!     /root/.npm/_logs/2020-06-26T06_22_28_069Z-debug.log
     
     ```
   
   * 可以看到当前目录下会生成 dist 目录 ,这个就是前端的打包成品
   
     ![image-20200626141300869](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200626141300869.png)

前端打包完成

---

#### 后端部分

##### 方案一 直接打jar包【简单】

 * cd ../ruoyi    [切到后端文件夹]

 * mvn package    [打包命令]

 * 当前文件下生成 target 文件夹,里面有jar包【jar包可以直接运行】

   ![image-20200626142139427](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200626142139427.png)

   * 把ruoyi.jar复制一份到上级目录 【防止被清理掉 指令mvn clean 会清理掉target目录 】

     

     

   
   

##### 方案二 打war包,部署到外置tomcat的环境【需要改pom.xml文件配置】

###### 1.改打包方式

 ![image-20200626144329858](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200626144329858.png)

###### 2.添加dependency

将自带的tomcat排除掉,这样才能部署到外置的tomcat [前提是服务器上已经装好了tomcat]

   ![image-20200626144820242](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200626144820242.png)

###### 3. 创建项目的辅助类使指向原先的启动类

创建一个类SpringBootStartApplication,位置如图 

​    image-20200626145527994
​      代码部分:


  ```java
  package com.ruoyi;
  
  import org.springframework.boot.builder.SpringApplicationBuilder;
  import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
  
  public class SpringBootStartApplication extends SpringBootServletInitializer {
      @Override
      protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
          return builder.sources(RuoYiApplication.class); //RuoYiApplication.class 是原来的启动类
      }
  }
  ```

4. 将服务器中pom.xml包替换,然后在对应目录下添加新的class类

   * cd ../ruoyi    [切到后端文件夹]

   * mvn package    [打包命令]

   * target目录下生成war包

     ![image-20200626150846786](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200626150846786.png)

     后端打包完成

​      

## 部署

### jar包部署

#### 部署前端项目 视频25分处

* cd  /usr/local/nginx

* vim conf/nginx.conf   
* 【用于复制:   /root/workspace/ruoyi-ui/dist】 

第二行 # user nobody 改成 user root 保存

然后

image-20200626151445214改成image-20200626151530007

启动nginx

* cd sbin/ 【切入sbin目录】

* ./nginx   【nginx启动了】

  ```shell
  [root@iz2ze6jovvkf388jd1uypoz sbin]# ./nginx
  nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)  
                   说明80 端口已经在使用了,我们要把它关掉
  nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
  nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
  nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
  nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
  nginx: [emerg] still could not bind()
  [root@iz2ze6jovvkf388jd1uypoz sbin]# netstat -ntlp
  Active Internet connections (only servers)
  Proto Recv-Q Send-Q Local Address           Foreign Address         State       
  tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6387/nginx: master  
        
  [root@iz2ze6jovvkf388jd1uypoz sbin]# kill 6387
  [root@iz2ze6jovvkf388jd1uypoz sbin]# ./nginx
  成功启动
  ```

  

  * 直接输入自己的ip地址,不要带端口,出现页面,则前端布置成功  

  * 如果页面无法访问,那可能nginx.conf 文件里location里面的root设置的不对  需要确认下dist文件的位置

![image-20200626152117797](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200626152117797.png)

前端部署完成

#### 部署后端项目

切换到ruoyi目录

* cd root/workspace/ruoyi  【要到有ruoyi.jar的文件夹下!! 】

* nohup java -jar ruoyi.jar  &   

  【nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行 &代表在后台运行。】

  ```java
  出现
  [root@iz2ze6jovvkf388jd1uypoz target]# nohup: ignoring input and appending output to ‘nohup.out’
  没关系
  ```

  

#### 前后端关联 视频27分处

![image-20200626152614228](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200626152614228.png)

需要到nginx里配置下代理,让前端通往后端

* cd  /usr/local/nginx
* vim conf/nginx.conf   

凡是请求 /pord-api/的转发路径全都代理到 http://192.268.31.100:8080后端

```shell
       location /prod-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-Fordwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://192.268.31.100:8080/; #改成自己的ip地址!!!

        }

```

![](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200626153200182.png)

* 文件重新加载下

​        /usr/local/nginx/sbin/nginx -s reload

* 重新访问页面,成功连接

### war包后端项目部署

cd /usr/local/tomcat/

cd appache-tomcat

将war包放到/webapps下

 unzip ruoyi.war -d ruoyi  【-d 解压到文件夹】

cd webapps

cp /root/workspace/ruoyi/ruoyi.war  ./     【将war包复制到当前目录】

![image-20200626192104809](C:%5CUsers%5C10852%5CDesktop%5Ccodesheep%20%E8%A7%86%E9%A2%91%E7%AC%94%E8%AE%B0%5Cimage-20200626192104809.png)

service tomcat start

访问页面,如果能看到这两张图片,说明你的tomcat正常启动了,你的后端也是可以正常访问的

image-20200628161255032![image-20200628101755338](https://gitee.com/zhangfk/tuchuang/raw/master/img/image-20200628101755338.png)

我们改成根目录访问的方式,这样访问后端就可以直接用 ip:8080访问了

进入/usr/local/tomcat/apache-tomcat-8.5.55/conf 修改server.xml文件 将代码放到 154行【只要是在标签内部就可以】

```xml
 
```

service tomcat stop

service tomcat start

后端部署war包完成

> war包前后端关联操作步骤在上面小标题 “前后端关联 视频27分处”

# 个人实际部署问题总结

阿里云服务器端口8080没有开放导致以下问题

**jar包部署中**,当正常执行java -jar ruoyi.jar 时,进程会被Kill掉,如下

image-20200628165804921

当执行 nohup java -jar ruoyi.jar &时 进程过几秒或者去打其他命令也会显示被kill掉

**war包部署中** 若webapps中不存放war包,则tomcat是可以正常启动的,正常显示tomcat页面

存放war包后,执行service tomcat start 正常,然后执行service tomcat stop会报错显示tomcat没有在运行,

自己也用ps -aux|java 看了下,确实是假启动!!

这问题花了我两天时间,最后才发现是自己阿里云平台的服务器没有开8080端口,如果一开始用的是自己的虚拟机,更着上面走毫无问题。

#  linux命令总结

2. 前端打包[打生产环境的包]

   * cd ruoyi-ui
* npm run build:prod
  
2. 后端打包

   cd ruoyi

   mvn package    [打包命令]

​    3.启动nginx

* cd sbin/ 【切入sbin目录】
* ./nginx   【nginx启动了】
* /usr/local/nginx/sbin/nginx -s reload  【重新加载】

启动jar

* cd /workspace/ruoyi  【要到有ruoyi.jar的文件夹下!! 】

* nohup java -jar ruoyi.jar  &   

  【nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行 &代表在后台运行。】

复制目录

假设复制源目录 为 dir1 ,目标目录为dir2。怎样才能将dir1下所有文件复制到dir2下了
如果dir2目录不存在,则可以直接使用
cp -r dir1 dir2
即可。
如果dir2目录已存在,则需要使用
cp -r dir1/. dir2

如果存在文件删除
rm -rf  名字

3.如果某个进程起不来,可能是某个端口被占用

查看使用某端口的进程

```
lsof -i:8080

```

netstat -ap|grep 8090

查看到进程id之后,使用netstat命令查看其占用的端口

```
netstat -nap|grep 7779
        
```

查询进程

 ps -aux | grep java

  ps -l  列出与本次登录有关的进程信息;
  ps -aux  查询内存中进程信息;
  ps -aux | grep ***  查询***进程的详细信息;
  top  查看内存中进程的动态信息;
  kill -9 pid  杀死进程。

## 32分开始部署第二台后端虚拟机

你可能感兴趣的:(java,tomcat,linux,spring,boot)