欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在Linux上部署SpringBoot前后端分离的项目

程序员文章站 2022-05-03 20:49:54
...

1、把后端spring boot项目打成jar包,传到Linux上
2、在Linux上运行jar包
(1)、java -jar xxx.jar; 关闭服务器连接时会关闭此程序进程,(推荐测试可用)
(2)、将jar程序设置成后台运行,并且将标准输出的日志重定向至文件xxx.log
nohup java -jar xxx.jar >xxx.log 2>&1 &;
nohup命令的作用就是让程序在后台运行,不用担心关闭连接进程断掉的问题了(推荐使用)

详解:
nohup
nohup命令运行由Command参数和任何相关的Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。
在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup命令,添加 &(表示“and”的符号)到命令的尾部。
nohup是no hang up的缩写,就是不挂断的意思。
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。
该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。

nohup和&的区别
&:指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出
nohup:不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,
例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行。

nohup java -jar jarName-0.0.1-SNAPSHOT.jar >msg.log 2>&1 &;
在上面的例子中,0:stdin (standard input)1:stdout (standard output)2:stderr (standard error)2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到msg.log文件中。

(3)、重新部署时

ps -ef|grep java;
找到此进程: 
root  9836  0.1  4.6 10903144 1522292 ?  Sl   Nov08   1:31 java -jar xxx.jar
执行:  kill -9 9836 杀死进程;:  9836 为进程标识号
(Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:#killall -9 name)
然后再重新执行一下nohup命令即可。

3、部署前端项目
(1)、在Linux上安装nginx,安装步骤请自行百度
(2)、修改vue项目的config文件夹下的index.js文件
在Linux上部署SpringBoot前后端分离的项目
修改内容

'use strict'
// Template version: 1.3.1
// see http://vuejs-templates.github.io/webpack for documentation.

const path = require('path')

module.exports = {
  dev: {

    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {
      '/api': {
        // target: 'http://localhost:8089',//本地地址
        target: 'http://xxx.xx.xx.xxx:8089',// 线上部署地址
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''//这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add’即可
        }
      }
    },

    // Various Dev Server settings
    // host: 'localhost', // can be overwritten by process.env.HOST
    host: 'localhost',
    port: 8088, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
    autoOpenBrowser: false,
    errorOverlay: true,
    notifyOnErrors: true,
    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-


    /**
     * Source Maps
     */

    // https://webpack.js.org/configuration/devtool/#development
    devtool: 'cheap-module-eval-source-map',

    // If you have problems debugging vue-files in devtools,
    // set this to false - it *may* help
    // https://vue-loader.vuejs.org/en/options.html#cachebusting
    cacheBusting: true,

    cssSourceMap: true
  },

  build: {
    // Template for index.html
    index: path.resolve(__dirname, '../dist/index.html'),

    // Paths
    assetsRoot: path.resolve(__dirname, '../dist'),
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',

    /**
     * Source Maps
     */

    productionSourceMap: true,
    // https://webpack.js.org/configuration/devtool/#production
    devtool: '#source-map',

    // Gzip off by default as many popular static hosts such as
    // Surge or Netlify already gzip all static assets for you.
    // Before setting to `true`, make sure to:
    // npm install --save-dev compression-webpack-plugin
    productionGzip: false,
    productionGzipExtensions: ['js', 'css'],

    // Run the build command with an extra argument to
    // View the bundle analyzer report after build finishes:
    // `npm run build --report`
    // Set to `true` or `false` to always turn it on or off
    bundleAnalyzerReport: process.env.npm_config_report
  }
}

线上地址可以是域名或者是服务器的IP地址
(3)、在vue项目下执行npm run build,会在项目的目录下生成dist文件夹
(4)、把dist文件夹上传到Linux上(我是上传到/usr/local/nginx下的test文件夹下(test文件夹是我自己创建的))
(5)、修改nginx的conf/nginx.conf文件


    server {
        listen       80;
        server_name  xxx.xx.xx.xx;     
		#注意:server_name 要和vue项目中写的一样,可以是IP地址或者域名
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #root   /usr/local/nginx/test/dist;

        location / {
            root   /usr/local/nginx/test/dist3;
            index  index.html index.htm;
        }

        location /api {
            proxy_pass http://xxx.xx.xx.xxx:8089/;
            #proxy_pass  是后端项目的部署地址,8089就是springboot的项目启动的端口号
        }

(6)、重启nginx
nginx安装路径下的/sbin/nginx -s reload

nginx的常用命令
启动 nginx安装路径下的/sbin/nginx
停止 nginx安装路径下的/sbin/nginx -s stop
重启 nginx安装路径下的/sbin/nginx -s reload
查看进程 ps -ef | grep nginx