Skip to content

说明

因为本项目是前后端完全分离的,所以需要前后端都单独启动好,才能进行访问。

后端部署

一、环境准备与项目获取

1.1 环境要求清单

组件要求验证命令作用
JavaJDK 1.8+java -version打包&部署时使用
Maven3.5+mvn -v打包时使用
Git最新版git --version下载源码时使用
MySQL5.7+mysql --version项目运行时使用
Redis5.0+redis-server --version项目运行时使用

提示

本项目依赖MySQL及Redis,如果采用JAR包或者WAR包的部署方式,需要手动部署MySQL及Redis,关于MySQL及Redis的部署流程请自行查阅网络上的教程,这里就不再赘述了。

1.2 获取项目代码

bash
# 克隆项目(Gitee镜像)
git clone https://gitee.com/panweilei/ruoyi-radius.git

# 进入项目目录
cd ruoyi-radius

1.3 初始化数据库

  • 创建数据库ruoyi_radius并导入数据脚本(项目根目录/sql/ruoyiradius-init.sql)

提示

如果提示表不存在,设置大小写敏感配置在/etc/my.cnf添加lower_case_table_names=1,重启MYSQL服务

二、JAR包部署

2.1 项目编译打包

bash
# 1. 清理并打包(跳过测试)
mvn clean package -DskipTests

# 2. 只打包后端管理模块
mvn clean package -DskipTests -pl ruoyi-admin -am

# 打包后的JAR位置:
# ruoyi-modules/ruoyi-admin/target/ruoyi-admin.jar

2.2 生产环境配置

  • 修改 application-prod.yml相关参数(服务器端口号、数据库连接信息、Redis缓存连接信息等)
yaml
# 生产环境配置
server:
  port: 8080
  servlet:
    context-path: /ruoyi-radius

spring:
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/ruoyi_radius?useUnicode=true&characterEncoding=utf8
      username: \${DB_USER:root}
      password: \${DB_PASS:123456}
      initial-size: 10
      max-active: 50
      
  redis:
    host: \${REDIS_HOST:localhost}
    port: \${REDIS_PORT:6379}
    database: 0

# 日志配置
logging:
  file:
    name: logs/ruoyi-radius.log
  level:
    com.ruoyi: info

2.3 启动脚本

  • 创建 `start.sh`(Linux/Mac):
bash
#!/bin/bash
APP_NAME="ruoyi-radius"
JAR_NAME="ruoyi-admin.jar"
JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC"

# 创建日志目录
mkdir -p logs

echo "启动 $APP_NAME ..."
nohup java $JAVA_OPTS -jar $JAR_NAME --spring.profiles.active=prod > logs/app.log 2>&1 &

echo "启动完成!PID: $!"
echo "查看日志: tail -f logs/app.log"
  • 创建 `start.bat`(Windows):
batch
@echo off
set APP_NAME=ruoyi-radius
set JAR_NAME=ruoyi-admin.jar
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:+UseG1GC

echo 启动 %APP_NAME% ...
java %JAVA_OPTS% -jar %JAR_NAME% --spring.profiles.active=prod

pause

2.4 部署验证

bash
# 1. 检查进程
ps aux | grep ruoyi-admin

# 2. 检查端口
netstat -tlnp | grep 8080

# 3. 健康检查
curl http://localhost:8080/ruoyi-radius/actuator/health

# 4. 查看日志
tail -f logs/ruoyi-radius.log

提示

后端运行成功可以通过(http://localhost:8080)访问,但是不会出现静态页面,可以继续参考下面步骤部署ruoyi-ui前端,然后通过前端地址来访问。

三、WAR包部署

3.1 修改打包方式

  • 修改 `ruoyi-admin/pom.xml`:
xml
<!-- 将打包方式改为war -->
<packaging>war</packaging>

<!-- 排除内置Tomcat(使用外部Tomcat) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

3.2 打包部署

bash
# 打包WAR文件
mvn clean package -DskipTests

# 将WAR包复制到Tomcat的webapps目录
cp ruoyi-admin/target/ruoyi-admin.war /opt/tomcat/webapps/

注意

WAR包部署的方式依赖于Tomcat,或者其它Webe服务器,需要额外部署Webe服务器才能正常使用。后端运行成功可以通过(http://localhost:8080)访问,但是不会出现静态页面,可以继续参考下面步骤部署ruoyi-ui前端,然后通过前端地址来访问。

四、Docker部署(推荐)

4.1 单容器部署

创建 Dockerfile:

dockerfile
# 构建阶段
FROM maven:3.8.4-openjdk-8 AS builder
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests

# 运行阶段
FROM openjdk:8-jre-alpine
WORKDIR /app

# 设置时区
RUN apk add --no-cache tzdata && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone

# 复制JAR包
COPY --from=builder /app/ruoyi-admin/target/ruoyi-admin.jar app.jar

# 暴露端口
EXPOSE 8080

# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=prod"]

4.2 Docker Compose完整部署

创建 docker-compose.yml:

yaml
version: '3.8'

services:
  mysql:
    image: mysql:5.7
    container_name: ruoyi-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ruoyi123
      MYSQL_DATABASE: ruoyi_radius
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
      - ./sql/init.sql:/docker-entrypoint-initdb.d/init.sql
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci

  redis:
    image: redis:6-alpine
    container_name: ruoyi-redis
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    command: redis-server --appendonly yes

  backend:
    build: .
    container_name: ruoyi-backend
    restart: always
    depends_on:
      - mysql
      - redis
    ports:
      - "8080:8080"
    environment:
      SPRING_PROFILES_ACTIVE: prod
      DB_HOST: mysql
      DB_PORT: 3306
      DB_NAME: ruoyi_radius
      DB_USER: root
      DB_PASS: ruoyi123
      REDIS_HOST: redis
      REDIS_PORT: 6379
    volumes:
      - ./logs:/app/logs
      - ./config:/app/config

volumes:
  mysql_data:
  redis_data:

4.3 使用说明

bash
# 1. 构建并启动所有服务
docker-compose up -d

# 2. 查看服务状态
docker-compose ps

# 3. 查看日志
docker-compose logs -f backend

# 4. 停止服务
docker-compose down

# 5. 停止并清理数据
docker-compose down -v

五、部署方式对比

部署方式优点缺点适用场景
JAR包部署简单,独立运行依赖JDK环境云服务器、虚拟机
WAR包兼容传统Web服务器需要安装Tomcat企业已有Tomcat环境
Docker环境隔离,易于扩展学习成本较高容器化、微服务架构

六、常见问题解决

6.1 数据库连接失败

bash
# 检查MySQL服务
systemctl status mysql

# 检查端口
netstat -tlnp | grep 3306

# 检查用户权限
mysql -u root -p -e "SHOW GRANTS FOR 'ruoyi'@'%';"

6.2 端口冲突

bash
# 查看端口占用
netstat -tlnp | grep 8080

# 停止占用进程
kill -9 <PID>

# 或修改应用端口
# 在application.yml中修改 server.port

6.3 内存不足

bash
# 调整JVM参数
JAVA_OPTS="-Xms1g -Xmx2g -XX:+UseG1GC"

# 查看内存使用
top -p $(pgrep -f ruoyi-admin)

七、最佳实践建议

7.1 安全建议

  1. 修改默认密码:生产环境务必修改数据库和Redis默认密码
  2. 配置防火墙:只开放必要的端口(80, 443, 8080)
  3. 启用HTTPS:使用Nginx反向代理并配置SSL证书

7.2 监控建议

  1. 启用Actuator端点:监控应用健康状态
  2. 配置日志轮转:避免日志文件过大
  3. 设置告警:监控关键指标(CPU、内存、响应时间)

7.3 备份策略

  1. 数据库备份:每日自动备份MySQL数据
  2. 配置文件备份:版本化管理所有配置文件
  3. 部署脚本备份:保存所有部署和运维脚本

总结

本指南提供了三种主流的RuoYi-Radius后端部署方式:

  1. JAR包部署:适合大多数云服务器场景,简单直接
  2. WAR包部署:适合已有Tomcat环境的传统部署
  3. Docker部署:适合现代化容器化部署,易于扩展和维护

建议根据实际环境和团队技术栈选择合适的部署方式。对于新项目,推荐使用Docker部署,便于环境统一和持续集成。

前端部署

一、前端打包

  • 当项目开发完毕,只需要运行一行命令就可以打包你的应用
bash
# 进入前端根目录
cd ruoyi-ui

# 打包正式环境
npm run build:prod

# 打包预发布环境
npm run build:stage
  • 构建打包成功之后,会在根目录生成 dist 文件夹,里面就是构建打包好的文件,通常是 .js 、.css、index.html 等静态文件。
  • 通常情况下 dist 文件夹的静态文件发布到你的 nginx 或者静态服务器即可,其中的 index.html 是后台服务的入口页面。
  • 如果需要自定义构建,比如指定 dist 目录等,则需要通过 config (opens new window)的 outputDir 进行配置。
  • 部署时改变页面js 和 css 静态引入路径 ,只需修改 vue.config.js 文件资源路径即可。
js

publicPath: './' //请根据自己路径来配置更改

export default new Router({
  mode: 'hash', // hash模式
})

二、Tomcat配置

  • 修改server.xml,Host节点下添加
xml
<Context docBase="" path="/" reloadable="true" source=""/>
  • dist目录的文件夹下新建WEB-INF文件夹,并在里面添加web.xml文件
xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
        http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1" metadata-complete="true">
    <display-name>Router for Tomcat</display-name>
    <error-page>
        <error-code>404</error-code>
        <location>/index.html</location>
    </error-page>
</web-app>

三、Nginx配置

  • 修改Nginx配置文件(Nginx安装目录/conf/nginx.conf)
config
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 / {
            root   /home/ruoyi/projects/ruoyi-ui;
			try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
		
		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-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass http://localhost:8080/;
		}

		# springdoc proxy
		location ~ ^/v3/api-docs/(.*) {
			proxy_pass http://localhost:8080/v3/api-docs/$1;
		}

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

总结

  • 前端部署相对简单,只需要把打包好的静态文件(dist目录下所有文件)放到Tomcat或者Nginx对应位置即可。
  • 可以通过(http://localhost:80)访问验证系统是否部署成功,注意部署时配置的端口号,能正常访问则说明部署成功。
  • 如遇到无法解决的问题请到Issues反馈,或者加入技术交流群,会不定时进行解答。

Released under the MIT License.