启动
环境部署
JDK >= 17 (推荐17版本)
Mysql >= 8.0+
Redis >= 3.0
Maven >= 3.0
Node >= 18
nacos >= 2.0.0
sentinel >= 1.6.0
代码下载
提示
本项目前后端均在同一仓库内,前端为其中multi-ui
。
地址: XueYi-MultiSaas
项目启动
后端运行
1、将XueYi-MultiSaas
(后端)以Maven
项目形式导入到idea
2、创建数据库xy-cloud
、xy-cloud1
、xy-config
、xy-seata
共计四个库(必须)
3、对各个库执行指定sql
:(必须)
quartz.sql
、xueyi_1.sql
两个sql
导入至数据库xy-cloud
xueyi_2.sql
导入至数据库xy-cloud1
xy-config.sql
导入至数据库xy-config
xy-seata.sql
导入至数据库xy-seata
提示
xueyi_3.sql
的表结构与xueyi_2.sql
一模一样,唯一区别是其无初始数据;
启动阶段无需使用,主要为后续增加新租户数据库时,初始化新租户数据库所用。
4、配置nacos
持久化,修改conf/application.properties
文件,增加支持mysql
数据源配置,并设置为数据库xy-config
内数据方式,并启动nacos
(必须)
# db mysql
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/xy-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=password
提示
nacos
版本需>=2.0.0
,且需要自己下载(群内文件有),同时如何修改配置文件(conf
文件下配置文件)切换至读取指定数据库请自行度娘;
5、修改主库和初始策略库信息:
- 主库修改:启动
nacos
后,进入nacos
控制台,进入配置管理 -> 配置列表 -> application-secret-dev.yml
,修改主数据库连接信息(redis连接信息等也在此处修改) - 初始策略库修改:进入主库对应的数据库(默认为
xy-cloud
),找到te_source
表,修改对应的数据源参数
提示
主库默认为xy-cloud
库,初始策略库默认为xy-cloud1
库,默认地址localhost:3306
,默认账号为root
,默认密码为password
;
如与初始设置不一致,即按照第五点自行修改即可。
4、修改xueyi_1.sql
中数据源表te_source
中的数据源连接记录(修改成自己用的),其中,master
库为主库,导入数据脚本xueyi_1.sql
;slave
库对应为默认从库,导入数据脚本xueyi_2.sql
(当master库
和slave库
可为同一个库)(必须)
5、master
库导入数据脚本quartz.sql
(可选)
6、配置nacos
持久化,修改conf/application.properties
文件,增加支持mysql
数据源配置
7、启动nacos
,登录nacos管理页面
8、打开运行基础模块(启动没有先后顺序)
- (必须 网关模块)XueYiGatewayApplication
- (必须 认证模块)XueYiAuthApplication
- (必须 系统模块)XueYiSystemApplication
- (必须 租管模块)XueYiTenantApplication
- (可选 监控中心)XueYiMonitorApplication
- (可选 代码生成)XueYiGenApplication
- (可选 定时任务)XueYiJobApplication
- (可选 文件服务)XueYiFileApplication
9、集成seata
分布式事务(可选配置,默认不启用)
- 进入
nacos
控制台,进入配置管理 -> 配置列表 -> application-datasource-dev.yml
,解除# seata: true # 开启seata代理,开启后默认每个数据源都代理,如果某个不需要代理可单独关闭
的注释,同时将seata
配置的enabled
调整为true
- 引入
seata
的配置文件至nacos
(自行度娘)
前端运行
# 进入项目目录
cd multi-ui
# 安装依赖
pnpm install
# 启动项目
pnpm vite
# 浏览器访问
http://localhost:3000
普通账户
企业账号:xueYi
员工账号:admin
密码:admin123租管账户
企业账号:administrator
员工账号:admin
密码:admin123
提示
前后端运行前,请注意相应的环境已安装好。
项目部署
后端部署
- 打包工程文件
在xueyi
项目的bin目录下执行package.bat
打包Web工程,生成war/jar包文件。
然后会在项目下生成target
文件夹包含war或jar
提示
打包时建议通过idea | Eclipse
的Maven
进行打包,package.bat
偶尔会出现莫名bug 不同模块版本会生成在xueyi/xueyi-xxxx
模块下target
文件夹
- 部署工程文件
1、jar部署方式
使用命令行执行:java –jar xxxx.jar
或者执行脚本:bin/run.bat
2、war部署方式xueyi/pom.xml
中的packaging
修改为war
,放入tomcat
服务器webapps
<packaging>war</packaging>
提示
不同模块版本在xueyi/xueyi-xxxx
模块下修改pom.xml
SpringBoot
去除内嵌Tomcat
(PS:此步骤不重要,因为不排除也能在容器中部署war
)
<!-- 排除内置tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
前端部署
当项目开发完毕,只需要运行一行命令就可以打包你的应用
# 打包生产环境
pnpm build
构建打包成功之后,会在对应模块的根目录生成 dist
文件夹,里面就是构建打包好的文件,通常是 ***.js
、***.css
、index.html
等静态文件。
通常情况下 dist
文件夹的静态文件发布到你的 nginx 或者静态服务器即可,其中的 index.html
是后台服务的入口页面。
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 / {
root /home/xueyi/projects/xueyi-ui;
try_files $uri $uri/ /index.html;
index index.html;
# Enable CORS
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
location /dev-api/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://xueyi-gateway:8080/;
proxy_redirect default;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
}
# 避免actuator暴露
if ($request_uri ~ "/actuator") {
return 403;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
常见问题
- 如果使用
Mac
需要修改application.yml
文件路径profile
- 如果使用
Linux
提示表不存在,设置大小写敏感配置在/etc/my.cnf
添加lower_case_table_names=1
,重启MYSQL
服务 - 如果提示当前权限不足,无法写入文件请检查
application.yml
中的profile
路径或logback.xml
中的log.path
路径是否有可读可写操作权限
如遇到无法解决的问题请到 Issues 反馈,会不定时进行解答。