当前位置:   article > 正文

vue+springboot前后端分离项目部署_springboot+vue前后端分离打包部署

springboot+vue前后端分离打包部署

vue+springboot前后端分离项目部署

1.前端打包

yarn build
注意修改js中的baseUrl

2.购买腾讯云服务器,按量付费

3.服务器上安装jdk

4.服务器安装nginx

CentOS7操作系统安装nginx有三种方式:

4.1.使用yum安装nginx

官网提供的源地址:http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

4.1.1 [root@mufeng ~]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

4.1.2 yum install nginx

4.1.3

查看nginx版本
[root@mufeng ~]# nginx -v
nginx version: nginx/1.22.1

设置开机自启动
[root@mufeng ~]# systemctl enable nginx

启动nginx
[root@mufeng ~]# systemctl start nginx

访问测试,默认80端口
停止服务:
[root@mufeng ~]# systemctl restart nginx

#重新加载nginx
[root@mufeng ~]# systemctl reload nginx

打开80端口,云服务器要取配置 安全组
[root@mufeng ~]# firewall-cmd --zone=public --permanent --add-service=http
success
[root@mufeng ~]# firewall-cmd --reload
success

要注意的是:

安装完成的nginx 配置文件地址是:/etc/nginx/conf.d/default.conf

bin所在目录 /usr/share/nginx/sbin/

//重启nginx
service nginx restart

4.2 编译方式安装nginx

4.2.1 下载所需要的包

nginx 包下载地址: http://nginx.org/en/download.html
[root@mufeng ~]# wget http://nginx.org/download/nginx-1.22.1.tar.gz

4.2.2 创建目录并解压nginx包

[root@mufeng tools]# tar -zxvf nginx-1.22.1.tar.gz
[root@mufeng tools]# ls
nginx-1.22.1 nginx-1.22.1.tar.gz
[root@mufeng tools]# cd nginx-1.22.1/
[root@mufeng nginx-1.22.1]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src

4.2.3 安装编译需要的包

一般编译都需要gcc,如果没有会报错
yum -y install gcc
pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。
yum install -y pcre pcre-devel
zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip,所以需要安装
yum install -y zlib zlib-devel
openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔。。。。。。
yum install -y openssl openssl-devel

这里指定了 nginx 的安装路径为 /usr/local/nginx,同时启用了 SSL 和状态监控模块。
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre

在编译 Nginx 时,可以使用 ./configure --help 命令来查看可以使用的编译选项

4.2.4 安装并测试

[root@mufeng nginx-1.22.1]# make && make install

查看nginx服务是否启动成功
ps -ef | grep nginx

4.2.5 测试

默认的操作方式,比如查看配置文件是否正确:

[root@mufeng nginx-1.22.1]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

我们使用软链接或者alias的形式来简化,这里我们使用软链接:
[root@mufeng nginx-1.22.1]# ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

[root@mufeng nginx-1.22.1]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@mufeng nginx-1.22.1]#

启动方式:
[root@mufeng nginx-1.22.1]# nginx

重新加载方式:
[root@mufeng nginx-1.22.1]# nginx -s reload

关闭
[root@mufeng nginx-1.22.1]# nginx -s stop

4.2.6 编译安装完nginx的配置文件位置

conf: /usr/local/nginx , 存放 nginx 的配置文件,nginx.conf 是 nginx 服务最核心最主要的配置文件。

html:/usr/local/nginx,保存 ningx 服务器的 web 文件。也可以更改为其他目录保存 web 文件。

logs: /var/logs/nginx,保存 ningx 服务器的访问日志、错误日志等日志。

sbin: /usr/local/nginx,保存 nginx 二进制启动脚本。可以接受不同参数以实现不同的功能。

然后修改配置文件:
[root@mufeng nginx]# vim /usr/local/nginx/conf/nginx.conf

测试:
http:ip/status
可以看到: 当前的活动连接数为3个
5 5 4 表示: 已处理的连接数为5, 成功的TCP握手次数为5, 已处理的请求数为1

5 nginx 配置

5.1 配置一


#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
  
    #keepalive_timeout  0;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   D:/01文理java-在线教育/知识回顾/works/study-vue/dist;
            index  index.html index.htm;
			# 解决单页面应用中history模式不能刷新的bug
            try_files $uri $uri/ /index.html;
        }
			
		# 服务器代理实现跨域
        location /api/ {
		   # 将/api/开头的url转向该域名
           proxy_pass   http://127.0.0.1:9111/; 
           #如果报错则使用这一行代替上一行 proxy_pass   http://localhost:8000;  将/api/开头的url转向该域名
           rewrite "^/api/(.*)$" /$1 break ; # 最终url中去掉/api前缀
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

5.2 配置二

#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;
    #include       D:/aaa01/U盘20220823/nginx-1.22.0/conf/niudao-server.conf
    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       81;          #监听81端口
        server_name  localhost;   #web前端
        location / {
            #通过访问时添加后缀来隐藏URL中的后缀
            if (!-e $request_filename){
              rewrite ^(.*)$ /$1.html last;
              break;
            }
            root    D:/aaa01/U盘20220823/workers/ideaworkers/work20220707/static/web;

            index   index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;#错误页
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }


    server {
        listen       82;         #监听82端口
        server_name  localhost;  #后端管理
        location / {
            root    D:/aaa01/U盘20220823/workers/ideaworkers/work20220707/static/admin;

            index   index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;#错误页
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

server {
        listen       83;         #监听83端口
        server_name  localhost;  #资源服务器
        location / {
            root    D:/aaa01/U盘20220823/workers/ideaworkers/work20220707/static/resource;
            index   index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;#错误页
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
server {
        listen       84;         #监听84端口
        server_name  localhost;  #API访问地址
        #API转发地址
	  location / {
	      proxy_pass	http://127.0.0.1:8081;
	  }
        error_page   500 502 503 504  /50x.html;#错误页
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94

5.3 配置三

https://blog.csdn.net/weixin_43239880/article/details/130841067

#nginx进程数,建议设置为等于CPU总核心数。
worker_processes  1;

 事件区块开始
events {
    #单个进程最大连接数(最大连接数=连接数*进程数)
    #根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为。
    worker_connections  1024;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
    #include:导入外部文件mime.types,将所有types提取为文件,然后导入到nginx配置文件中
    include       mime.types;
     #默认文件类型
    default_type  application/octet-stream;
    #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
    #sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
    sendfile        on;
      #长连接超时时间,单位是秒
    keepalive_timeout  65;
    # 第一个Server区块开始,表示一个独立的虚拟主机站点
    server {
        # 提供服务的端口,默认80
        listen       80;
        # 提供服务的域名主机名
        server_name  localhost;
        #对 "/" 启用反向代理,第一个location区块开始
        location / {
            root   html;  #服务默认启动目录
            index  index.html index.htm; # 默认的首页文件,多个用空格分开
        }
         # 错误页面路由
        error_page   500 502 503 504  /50x.html; # 出现对应的http状态码时,使用50x.html回应客户
        location = /50x.html { # location区块开始,访问50x.html
            root   html;  # 指定对应的站点目录为html
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

第一部分:全局块
第二部分:events块
第三部分:http块

全局块:
作用: 从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
比如上面第一行配置的

worker_processes 1;

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。

events块:
作用: events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。

worker_connections 1024;

上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

http块:
作用: 这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http全局块、server 块。

http全局块
http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,
该技术的产生是为了 节省互联网服务器硬件成本。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。

location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),
对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,
对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能,
还有许多第三方模块的配置也在这里进行。

5.4 配置四

#user nobody;
worker_processes 1; #工作进程:数目。根据硬件调整,通常等于cpu数量或者2倍cpu数量。

#错误日志存放路径
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid; # nginx进程pid存放路径

events {
worker_connections 1024; # 工作进程的最大连接数量
}

http {
include mime.types; #指定mime类型,由mime.type来定义
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; #用log_format指令设置日志格式后,需要用access_log来指定日志文件存放路径
				
sendfile        on; #指定nginx是否调用sendfile函数来输出文件,对于普通应用,必须设置on。
		如果用来进行下载等应用磁盘io重负载应用,可设着off,以平衡磁盘与网络io处理速度,降低系统uptime。
#tcp_nopush     on; #此选项允许或禁止使用socket的TCP_CORK的选项,此选项仅在sendfile的时候使用

#keepalive_timeout  0;  #keepalive超时时间
keepalive_timeout  65;

#gzip  on; #开启gzip压缩服务

#虚拟主机
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$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
    #    root           html; #根目录
    #    fastcgi_pass   127.0.0.1:9000; #请求转向定义的服务器列表
    #    fastcgi_index  index.php; # 如果请求的Fastcgi_index URI是以 / 结束的, 该指令设置的文件会被附加到URI的后面并保存在变量$fastcig_script_name中
    #    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; # ssl_prefer_server_ciphers  on; #


#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99

}

6 springboot项目打包

6.1 项目pom中添加插件

org.springframework.boot spring-boot-maven-plugin true

6.2 package打包

6.3 上传服务器

6.4 启动

6.4.1 在ssh窗口直接运行jar包

java -jar boot-example-hello-0.0.1-SNAPSHOT.jar
这种直接运行的方式优点是快速运行,临时测试的时候可以用,但是在关闭ssh连接窗口或者ctrl+c后就会停掉或打断改方式,长时间运行是不行的。

6.4.2.在ssh窗口使用nohup方式运行jar包

nohup java -jar boot-example-hello-0.0.1-SNAPSHOT.jar &
nohup 指的是不挂断运行命令,当ssh窗口退出后,程序是可以运行的,但是这样会产生nohup.out文件,这个文件会越来越大,当然也可以指定文件,或者不要nohup等日志文件,直接扔进垃圾箱里

有控制台日志的方式
nohup java -jar boot-example-hello-0.0.1-SNAPSHOT.jar > run.log &
无控制台日志的方式
nohup java -jar boot-example-hello-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 &

6.4.3.使用.sh脚本方式启动jar包

新建脚本文件boot-example-hello.sh
(注意centos和windows的.sh文件末尾的换行符可能导致.sh文件启动失败)

#!/bin/sh
RESOURCE_NAME=boot-example-hello-0.0.1-SNAPSHOT.jar
 
 先kill -15 pid
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -15 $tpid
fi
sleep 5

#再kill -9 pid
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi

#启动app 
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'App is running.'
else
    echo 'App is NOT running.'
fi
 
rm -f tpid
nohup java -jar $RESOURCE_NAME > /dev/null 2>&1 &

#nohup java -jar $RESOURCE_NAME > boot-example-hello.log &
echo $! > tpid
echo Start Success!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

将脚本文件和jar包放在同一个目录下面

关键点儿
RESOURCE_NAME=boot-example-hello-0.0.1-SNAPSHOT.jar

脚本文件需要给执行权限
chmod u+x boot-example-hello.sh

[root@myw ~]# cd /home/boot-java
[root@myw boot-java]# ls
boot-example-hello-0.0.1-SNAPSHOT.jar  boot-example-hello.sh
[root@myw boot-java]# chmod u+x boot-example-hello.sh
[root@myw boot-java]# ./boot-example-hello.sh
Stop Success!
App is NOT running.
Start Success!
[root@myw boot-java]# netstat -lnp|grep java
tcp6       0      0 :::8116                 :::*                    LISTEN      11503/java          
[root@myw boot-java]# ./boot-example-hello.sh
Stop Process...
Stop Success!
App is NOT running.
Start Success!
[root@myw boot-java]# netstat -lnp|grep java
tcp6       0      0 :::8116                 :::*                    LISTEN      11616/java          
[root@myw boot-java]# kill -9 11616
[root@myw boot-java]# netstat -lnp|grep java
[root@myw boot-java]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

可是这么玩,万一云服务器掉电或者其他原因重启,那么也需要重新运行脚本

6.4.4.在.sh脚本里增加输入参数,使之能够start stop restart和建立服务启动方式,支持开机启动

新建脚本文件boot-example-hello-service.sh

我部署的java jdk路径在/usr/local/jdk18/bin下面

jar包路径在/home/boot-java

具体jar包boot-example-hello-0.0.1-SNAPSHOT.jar

因为开机启动需要,所以java的启动路径写全了的

#!/bin/bash
#java sdk 环境路径
JAVA_HOME_BIN="/usr/local/jdk18/bin"
#jar包路径
RESOURCE_PATH="/home/boot-java"
#jar包名字
RESOURCE_NAME="boot-example-hello-0.0.1-SNAPSHOT.jar"
#param start stop restart
param=$1
pid=`ps -ef|grep java|grep $RESOURCE_NAME|awk '{print $2}'`
 
startup(){
    nohup $JAVA_HOME_BIN/java $RESOURCE_PARAM -jar $RESOURCE_PATH/$RESOURCE_NAME > /dev/null 2>&1 &
    #nohup $JAVA_HOME_BIN/java -jar $RESOURCE_PATH/$RESOURCE_NAME > $RESOURCE_PATH/run.log &
    sleep 3
    echo "$RESOURCE_NAME to running pid="`ps -ef|grep java|grep $RESOURCE_NAME|awk '{print $2}'`
}
 
if [ ! $param ]; then
    echo "specify param 'start|restart|stop'"
    exit
fi
 
if [ $param == 'start' ]; then
    if [ ! $pid ]; then
        startup
    else
        echo "$RESOURCE_NAME is running pid=$pid"
      fi
fi
 
if [ $param == 'restart' ]; then
    if [ $pid ]; then
        kill -9 $pid
        sleep 1
        echo "$pid is killed"
      fi
      sleep 3
      startup
fi
 
if [ $param == 'stop' ]; then
    if [ $pid ]; then
        kill -9 $pid
          sleep 3
      fi
      echo "$RESOURCE_NAME is stopped"
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

运行指令

启动:./boot-example-hello-service.sh start

停止:./boot-example-hello-service.sh stop

重启:./boot-example-hello-service.sh restart

也是放在jar包的相同目录

先给脚本权限
chmod u+x boot-example-hello-service.sh

[root@myw boot-java]# chmod u+x boot-example-hello-service.sh
[root@myw boot-java]# ./boot-example-hello-service.sh start
boot-example-hello-0.0.1-SNAPSHOT.jar to running pid=11850
[root@myw boot-java]# ./boot-example-hello-service.sh start
boot-example-hello-0.0.1-SNAPSHOT.jar is running pid=11850
[root@myw boot-java]# netstat -lnp|grep java
tcp6       0      0 :::8116                 :::*                    LISTEN      11850/java          
[root@myw boot-java]# ./boot-example-hello-service.sh restart
11850 is killed
boot-example-hello-0.0.1-SNAPSHOT.jar to running pid=11921
[root@myw boot-java]# netstat -lnp|grep java
tcp6       0      0 :::8116                 :::*                    LISTEN      11921/java          
[root@myw boot-java]# ./boot-example-hello-service.sh stop
boot-example-hello-0.0.1-SNAPSHOT.jar is stopped
[root@myw boot-java]# netstat -lnp|grep java
[root@myw boot-java]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

新建一个服务boot-hello.service

[Unit]
Description=java boot
After=network.target
After=network-online.target
 
[Service]
Type=forking
ExecStart=/home/boot-java/boot-example-hello-service.sh start
ExecReload=/home/boot-java/boot-example-hello-service.sh restart
ExecStop=/home/boot-java/boot-example-hello-service.sh stop
 
[Install]
WantedBy=multi-user.target
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

放入/usr/lib/systemd/system/里面后刷新加载

/usr/lib/systemd/system/

[root@myw boot-java]# systemctl daemon-reload
[root@myw boot-java]# systemctl start boot-hello.service
[root@myw boot-java]# netstat -lnp|grep java
tcp6       0      0 :::8116                 :::*                    LISTEN      12216/java          
[root@myw boot-java]# systemctl restart boot-hello.service
[root@myw boot-java]# netstat -lnp|grep java
tcp6       0      0 :::8116                 :::*                    LISTEN      12284/java          
[root@myw boot-java]# systemctl stop boot-hello.service
[root@myw boot-java]# netstat -lnp|grep java
[root@myw boot-java]# systemctl enable boot-hello.service
Created symlink from /etc/systemd/system/multi-user.target.wants/boot-hello.service to /usr/lib/systemd/system/boot-hello.service.
[root@myw boot-java]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

开机启动配置后使用reboot重启就可以测试

// 重新加载
systemctl daemon-reload
 
// 启动
systemctl start boot-hello.service
 
// 重启
systemctl restart boot-hello.service
 
// 停止
systemctl stop boot-hello.service
 
// 加入开机启动
systemctl enable boot-hello.service
 
// 取消开机启动
systemctl disable boot-hello.service
 
// 查看所有的开机启动项
systemctl list-unit-files|grep enabled
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

有的时候我们要调优,就是设置jar包启动的堆栈参数

-Xms 是jvm启动时分配的内存,比如-Xms256m,表示分配256M

-Xmx 是jvm运行过程中分配的最大内存,比如-Xms512m,表示jvm进程最多只能够占用512M内存

-Xss 是jvm启动的每个线程分配的内存大小,比如-Xss=10m 表示分配了10M

那么启动jar包的运行指令
nohup java -Xms256m -Xmx512m -Xss10m -jar boot-example-hello-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 &

一般使用默认参数,有必要优化的可以在在启动脚本里设置

#!/bin/bash
#java sdk 环境路径
JAVA_HOME_BIN="/usr/local/jdk18/bin"
 
#jar调优参数 这里开头和结尾没有空格 运行指令里有空格的
RESOURCE_PARAM="-Xms256m -Xmx512m -Xss10m"
#jar包路径
RESOURCE_PATH="/home/boot-java"
#jar包名字
RESOURCE_NAME="boot-example-hello-0.0.1-SNAPSHOT.jar"
#param start stop restart
param=$1
pid=`ps -ef|grep java|grep $RESOURCE_NAME|awk '{print $2}'`
 
startup(){
    nohup $JAVA_HOME_BIN/java $RESOURCE_PARAM -jar $RESOURCE_PATH/$RESOURCE_NAME > /dev/null 2>&1 &
    sleep 3
    echo "$RESOURCE_NAME to running pid="`ps -ef|grep java|grep $RESOURCE_NAME|awk '{print $2}'`
}
 
if [ ! $param ]; then
    echo "specify param 'start|restart|stop'"
    exit
fi
 
if [ $param == 'start' ]; then
    if [ ! $pid ]; then
        startup
    else
        echo "$RESOURCE_NAME is running pid=$pid"
      fi
fi
 
if [ $param == 'restart' ]; then
    if [ $pid ]; then
        kill -9 $pid
        sleep 1
        echo "$pid is killed"
      fi
      sleep 3
      startup
fi
 
if [ $param == 'stop' ]; then
    if [ $pid ]; then
        kill -9 $pid
          sleep 3
      fi
      echo "$RESOURCE_NAME is stopped"
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/214360
推荐阅读
相关标签
  

闽ICP备14008679号