睿阳知识库 睿阳知识库
首页
  • npm库配置
  • PC端

    • npm常用命令
    • vue问题记录
    • SEO基础知识及优化
    • 禁止别人调试我的前端页面代码
  • 移动端

    • 小程序
    • Risun.js使用说明
  • Java

    • Maven库配置
    • RSP开发框架
    • RSP框架插件
  • .NET

    • Nuget库配置
  • Python

    • Pypi库配置
  • 常见问题

    • Word转Pdf字体错乱
    • 使用Jacob进行Word导出PDF
  • 自动部署
  • 前端带路径
  • Linux

    • 应用部署
  • Windows

    • 应用部署
  • 视频监控
  • MySQL系列~
  • 应用高可用
  • 静态代码扫描
  • OpenSSH版本升级
  • 区块链~
  • 软件过程文档目录
  • 著作权申请须知及申报示例
  • 项目申报技巧
  • 项目竣工资料清单
  • 科技项目申报流程及注意事项
  • 初级职称申报
  • 产品需求文档基础知识
  • 产品经理需了解的技术知识
  • 墨刀原型设计指南
  • 文档规范
  • 文档规范
  • 投标工作总结(一)
  • 科技项目申报心得体会
  • 数字孪生
  • AI
  • RSP基础平台
  • RMCloud
  • 区块链
  • 网络态势感知
  • 国产化
  • 数据湖
  • 贡献度
  • 文档编写说明
  • Markdown教程
工作链接
首页
  • npm库配置
  • PC端

    • npm常用命令
    • vue问题记录
    • SEO基础知识及优化
    • 禁止别人调试我的前端页面代码
  • 移动端

    • 小程序
    • Risun.js使用说明
  • Java

    • Maven库配置
    • RSP开发框架
    • RSP框架插件
  • .NET

    • Nuget库配置
  • Python

    • Pypi库配置
  • 常见问题

    • Word转Pdf字体错乱
    • 使用Jacob进行Word导出PDF
  • 自动部署
  • 前端带路径
  • Linux

    • 应用部署
  • Windows

    • 应用部署
  • 视频监控
  • MySQL系列~
  • 应用高可用
  • 静态代码扫描
  • OpenSSH版本升级
  • 区块链~
  • 软件过程文档目录
  • 著作权申请须知及申报示例
  • 项目申报技巧
  • 项目竣工资料清单
  • 科技项目申报流程及注意事项
  • 初级职称申报
  • 产品需求文档基础知识
  • 产品经理需了解的技术知识
  • 墨刀原型设计指南
  • 文档规范
  • 文档规范
  • 投标工作总结(一)
  • 科技项目申报心得体会
  • 数字孪生
  • AI
  • RSP基础平台
  • RMCloud
  • 区块链
  • 网络态势感知
  • 国产化
  • 数据湖
  • 贡献度
  • 文档编写说明
  • Markdown教程
工作链接
  • Linux

    • Linux 应用部署
      • 一. 环境准备
      • 二. 初始化服务器
      • 三. 项目部署
        • 1. 提供健康检查Endpoint
        • 2. 部署脚本
        • 3. 配置自动化部署
  • Windows

  • 自动化部署
  • 前端带路径
  • 部署
  • Linux
孙超
2022-07-20
目录

Linux 应用部署

# 一. 环境准备

提示

  • 服务器必须是云主机,并且要和Jenkins Master服务器网络互通
  • 服务器挂载数据盘,挂载目录是 /data
  • 服务器要加入到Jenkins集群中
  • 服务器上要事先安装 JDK1.8、Maven3.6+、Node16+,并在 /bin 下设置软链接,例如
    • ln -s /usr/local/java/bin/java /bin/java
    • ln -s /usr/local/maven/bin/mvn /bin/mvn
    • ln -s /usr/local/nodejs/bin/node /bin/npde
    • ln -s /usr/local/nodejs/bin/npm /bin/npm
  • 若要部署前端页面,须事先安装nignx,并做好配置,其中 Location root 为 /deploy/<项目名>/html

# 二. 初始化服务器

(1) 登录服务器,创建init.sh,输入如下内容

点击查看
#! /bin/bash

## 修改<项目名>为实际的项目名称
project="<项目名>"

## 创建部署根目录
createAppDeploy() {
	if [ ! -d "/deploy/${project}" ]; then
  		mkdir -p /deploy/${project}
  		mkdir -p /deploy/${project}/html
	fi
}

## 创建应用程序产出目录(日志、上传文件...)
createAppRunOut() {
	if [ ! -d "/data/deploy/logs/${project}" ]; then
  		mkdir -p /data/deploy/logs/${project}
	fi
	if [ ! -d "/data/deploy/upload/${project}" ]; then
  		mkdir -p /data/deploy/upload/${project}
	fi
	if [ ! -d "/data/deploy/apikey/${project}" ]; then
  		mkdir -p /data/deploy/apikey/${project}
	fi
}

## 授权给用户 jenkins
assignAuth() {
	chown -R jenkins /deploy
	chown -R jenkins /data
}

init() {
	createAppDeploy
	createAppRunOut
	assignAuth
}

## 执行初始化函数
init

(2)执行脚本 init.sh

bash init.sh

# 三. 项目部署

# 1. 提供健康检查Endpoint

在项目中提供健康检查Endpoint,可匿名访问,例如

public class DemoController {
    @GetMapping("/health_check")
    public String healthCheck() {
      return "UP";
    }
}

// 在SecurityConfig.java中设置匿名访问
.antMatchers("/health_check").anonymous()

# 2. 部署脚本

(1)在项目的ruoyi-admin模块下,创建deploy.sh(和pom.xml同级)

(2)deploy.sh 内容如下,按注释进行修改

点击查看
#! /bin/bash

# 全局将testapp修改为自己项目的名字
# <项目名> 替换成自己的项目名,和init.sh中保持一致
APP_NAME=testapp*.jar
JAVA_OPTS="-Xms1024m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"
LOG_HOME=/data/deploy/logs/<项目名>
UPLOAD_PATH=/data/deploy/upload/<项目名>
APIKEY_PATH=/data/deploy/apikey/<项目名>
GREP_APP="testapp.*.jar"
## 启动端口号
SERVER_PORT=9001
## 健康检查的URI
HEALTH_CHECK="health_check"

# 使用说明,用来提示输入参数
usage() {
    echo "Usage: sh deploy.sh [start|stop|restart|status]"
    exit 1
}

# 检查程序是否在运行
is_exist() {
    pid=`ps -ef | grep $GREP_APP | grep -v grep | awk '{print $2}' `
    #如果不存在返回1,存在返回0
    if [ -z "${pid}" ]; then
      return 1
    else
      return 0
    fi
}

# 启动方法(根据实际项目调整运行时的环境变量)
start() {
   is_exist
   if [ $? -eq "0" ]; then
     echo "${APP_NAME} is already running. pid=${pid}."
   else
     echo "${APP_NAME} begin to start, listening to ${SERVER_PORT}"
     nohup java $JAVA_OPTS \
     	-Dfile.encoding=utf-8 \
     	-Djava.security.egd=file:/dev/./urandom \
     	-jar $APP_NAME \
     	--server.port=${SERVER_PORT} \
     	--spring.redis.database=0 \
     	--ruoyi.profile=$UPLOAD_PATH \
     	--ruoyi.apiKey=$APIKEY_PATH \
     	> /dev/null 2>&1 &
   fi
}

#停止方法
stop() {
   is_exist
   if [ $? -eq "0" ]; then
     kill -9 $pid
   else
     echo "${APP_NAME} is not running"
   fi
}

#输出运行状态
status() {
   is_exist
   if [ $? -eq "0" ]; then
     echo "${APP_NAME} is running. Pid is ${pid}"
   else
     echo "${APP_NAME} is not running."
   fi
}

#重启
restart() {
   stop
   start
}

#健康检查
healthCheck() {
    sleep 2
    SIGNAL=0
    while [ $SIGNAL != 1 ]; do
        RESULT=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://localhost:${SERVER_PORT}/${HEALTH_CHECK}`
        if [ $RESULT = 200 ]; then
            SIGNAL=1
            tail -n 10 ${LOG_HOME}/sys-error.log
        else
            tail -n 20 ${LOG_HOME}/sys-error.log
            sleep 5
        fi
    done
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
   "start")
     start
     ;;
   "stop")
     stop
     ;;
   "status")
     status
     ;;
   "restart")
     restart
     ;;
   "healthCheck")
     healthCheck
     ;;
   *)
     usage
     ;;
esac

# 3. 配置自动化部署

联系孙超,进行自动化部署配置

Windows 应用部署

Windows 应用部署→

最近更新
01
vue问题记录
10-11
02
RSP进度
10-09
03
贡献度
09-28
更多文章>
Copyright © 2014-2025 甘肃睿阳科技有限公司 陇ICP备15001783-1号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式