【超详细】RuoYi 前后端分离版部署流程

RuoYi 前后端分离版部署流程

📔 千寻简笔记介绍

千寻简笔记已开源,Gitee与GitHub搜索chihiro-notes,包含笔记源文件.md,以及PDF版本方便阅读,且是用了精美主题,阅读体验更佳,如果文章对你有帮助请帮我点一个Star

特邀嘉宾:仲琪

一 前端准备

1.修改router

export default new Router({
  base: '/xxxx-admin', // 去掉url中的#
  mode: 'history',
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes
})

2. 修改vue.config.js

publicPath: process.env.NODE_ENV === "production" ? "/xxxx-admin/" : "/xxxx-admin/",

3.修改后端访问地址:.env.production

# 管理系统/生产环境
VUE_APP_BASE_API = 'http://ip:端口/别名-api/'

4.修改配置:

request.js

# 搜索:store.dispatch('LogOut')
        store.dispatch('LogOut').then(() => {
        // 修改xxxx
          location.href = '/xxxx-admin/index';
        })

Navbar.vue

# 搜索:this.$store.dispatch('LogOut')
        this.$store.dispatch('LogOut').then(() => {
        // 修改xxxx
          location.href = '/xxxx-admin/index';
        })

5.构建项目

npm run build:prod

二 Nginx配置

worker_processes  1;

events {
    worker_connections  1024;
}

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

    server {
        listen       80;
        server_name  localhost;
		charset utf-8;

	location /xxx-admin {
     		# 修改路径
            alias   /home/deploy/test/java-xxx/fe/admin/dist;
            # 修前端访问路径
            try_files $uri $uri/ /xxx-admin/index.html;
            index  index.html index.htm;
        }
     location /xxx-h5 {
     		# 修改路径
            alias   /home/deploy/test/java-xxx/fe/h5/dist;
            # 修前端访问路径
            try_files $uri $uri/ /xxx-h5/index.html;
            index  index.html index.htm;
        }
		location /xxx-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-Forwarded-For $proxy_add_x_forwarded_for;
            # 后端访问地址,加前缀
            proxy_pass http://localhost:端口号/xxx-api/;
     	 }
      # 文件上传路径
      location /test/xxx/profile/{
      		 # 服务器文件上传路径
              alias /home/deploy/test/java-xxx/be/uploadPath;
      }
    }
}

三 后端准备

1.修改application-prod.yml

# 改动1
ruoyi:
    # 服务器文件上传路径
    profile: /home/deploy/test/java-xxx/be/uploadPath
    
# 改动2
# 开发环境配置
server:
    # 服务器的HTTP端口,默认为8080
    port: 端口号
    servlet:
        # 应用的访问路径
        context-path: /xxx-api/
# 改动3 修改数据源

# 改动4 修改redis

2.修改日志存放路径:logback.xml

    <!-- 日志存放路径 -->
	<property name="log.path" value="./logs" />

3.Maven 打包

# 清理环境,清除target文件夹
maven clean

# 打包
maven packag

# 打包到的地址
项目路径下的 xx-admin/target/xxx-admin.jar

四 上传部署服务器

  • 前端上传路径:/home/deploy/test/java-xxx/fe/admin/dist
  • 后端上传Jar包路径:/home/deploy/test/java-xxx/be/

1. 后端启动

# 去到指定目录
cd /home/deploy/test/java-xxx/be/
# 创建文件夹
mkdir uploadPath
# 新建脚本:ry.sh
touch ry.sh

2.复制下面内容到ry.sh

#!/bin/sh
# ./ry.sh start 启动 stop 停止 restart 重启 status 状态
# xxx-admin.jar 上传的jar包名称
AppName=xxx-admin.jar

# JVM参数
# -Dspring.profiles.active=prod 指定启动环境
# -Druoyi.profile=/home/deploy/test/java-xxx/be/uploadPath 指定文件上传路径
JVM_OPTS="-Dname=$AppName  -Dspring.profiles.active=prod -Druoyi.profile=/home/deploy/test/java-xxx/be/uploadPath  -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
APP_HOME=`pwd`
LOG_PATH=$APP_HOME/logs/$AppName.log

if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
    exit 1
fi

if [ "$AppName" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi

function start()
{
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`

	if [ x"$PID" != x"" ]; then
	    echo "$AppName is running..."
	else
		nohup java $JVM_OPTS -jar $AppName > /dev/null 2>&1 &
		echo "Start $AppName success..."
	fi
}

function stop()
{
    echo "Stop $AppName"

	PID=""
	query(){
		PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
	}

	query
	if [ x"$PID" != x"" ]; then
		kill -TERM $PID
		echo "$AppName (pid:$PID) exiting..."
		while [ x"$PID" != x"" ]
		do
			sleep 1
			query
		done
		echo "$AppName exited."
	else
		echo "$AppName already stopped."
	fi
}

function restart()
{
    stop
    sleep 2
    start
}

function status()
{
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
    if [ $PID != 0 ];then
        echo "$AppName is running..."
    else
        echo "$AppName is not running..."
    fi
}

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    *)

esac

3.部署

# 给脚本添加执行的权限
chmode +x ry.sh
# 启动jar
./ry.sh start
# 重启
./ry.sh restart
# 停止
./ry.sh stop
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RuoYi是一个基于Spring Boot和Vue.js的开源框架,它采用前后端分离的架构设计,实现了数据前后端分离开发。在RuoYi中,通过前后端分离的方式,可以实现导出功能。 首先,前端负责显示数据的页面布局和交互操作。在前端页面中,可以通过调用后端接口获取需要导出的数据,并将其展示在页面上。在需要导出的地方,可以添加一个导出按钮或其他触发事件的组件,通过点击按钮或触发事件的方式,调用后端接口进行导出操作。 其次,后端负责处理导出的相关逻辑。在RuoYi的后端代码中,通常会有一个导出的控制层,负责接收前端的导出请求,并进行相应的数据处理和导出操作。后端可以通过调用某些工具类或第三方库来生成导出文件,如使用Apache POI库生成Excel文件、使用iText或PDFBox库生成PDF文件等。 最后,导出的结果可以返回给前端进行下载或其他操作。后端处理完导出逻辑后,可以将生成的导出文件保存到服务器的某个位置,然后将文件的路径返回给前端。前端根据返回的文件路径,可以通过下载链接或其他方式提供给用户进行文件下载。 总结来说,RuoYi采用前后端分离的架构,通过前端调用后端接口来实现数据的导出。在前端页面中,添加导出按钮或触发事件的组件,通过点击或触发事件的方式调用后端接口。后端处理导出逻辑后,生成导出文件并保存,然后将文件路径返回给前端进行下载或其他操作。这样可以实现RuoYi前后端分离导出功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千寻简

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值