环境部署
::: hljs-center
# 环境部署
:::
## 准备工作
```
JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Redis >= 3.0
Maven >= 3.0
Node >= 10
```
> **提示**
前端安装完node后,最好设置下淘宝的镜像源,不建议使用cnpm(可能会出现奇怪的问题)
## 运行系统
前往git远程仓库下载解压到工作目录
### 后端运行
1、导入到开发法工具。
2、创建数据库`ry-vue`并导入数据脚本`ry_2021xxxx.sql`,`quartz.sql`
3、打开项目运行`com.ruoyi.RuoYiApplication.java`。
> **提示**
后端运行成功可以通过(http://localhost:8080 (opens new window))访问,但是不会出现静态页面,可以继续参考下面步骤部署ruoyi-ui前端,然后通过前端地址来访问。
### 前端运行
```
# 进入项目目录
cd ruoyi-ui
# 安装依赖
npm install
# 强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。
npm install --registry=https://registry.npm.taobao.org
# 本地开发 启动项目
npm run dev
```
4、打开浏览器,输入:(http://localhost:80 (opens new window)) 默认账户/密码 admin/admin123)
若能正确展示登录页面,并能成功登录,菜单及页面展示正常,则表明环境搭建成功
> **提示**
因为本项目是前后端完全分离的,所以需要前后端都单独启动好,才能进行访问。
前端安装完node后,最好设置下淘宝的镜像源,不建议使用cnpm(可能会出现奇怪的问题)
## 部署系统
> **提示**
因为本项目是前后端完全分离的,所以需要前后端都单独部署好,才能进行访问。
### 后端部署
- 打包工程文件
在使用mvn命令或者开发工具可视化界面提供的打包功能,生成`war/jar`包文件。
然后会在项目下生成`target`文件夹包含`war`或`jar`
> **提示**
> 多模块版本会生成在ruoyi/ruoyi-admin模块下target文件夹
- 部署工程文件
1、jar部署方式
使用命令行执行:`java –jar ruoyi.jar`
2、war部署方式
`ruoyi/pom.xml`中的`packaging`修改为`war`,放入`tomcat`服务器`webapps`
```shell
<packaging>war</packaging>
```
> **提示**
> 多模块版本在ruoyi/ruoyi-admin模块下修改pom.xml
- SpringBoot去除内嵌Tomcat(PS:此步骤不重要,因为不排除也能在容器中部署war)
```language
<!-- 多模块排除内置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>
<!-- 单应用排除内置tomcat -->
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
```
## 前端部署
当项目开发完毕,只需要运行一行命令就可以打包你的应用
```sh
# 打包正式环境
npm run build:prod
# 打包预发布环境
npm run build:stage
```
构建打包成功之后,会在根目录生成 `dist `文件夹,里面就是构建打包好的文件,通常是 `***.js 、***.css、index.html `等静态文件。
通常情况下 dist 文件夹的静态文件发布到你的` nginx `或者静态服务器即可,其中的 `index.html `是后台服务的入口页面。
> **outputDir 提示**
> 如果需要自定义构建,比如指定 dist 目录等,则需要通过 config (opens new window)的 outputDir 进行配置。
> **publicPath 提示**
> 部署时改变页面js 和 css 静态引入路径 ,只需修改 `vue.config.j`s 文件资源路径即可。
```js
publicPath: './' //请根据自己路径来配置更改
```
```js
export default new Router({
mode: 'hash', // hash模式
})
```
## 环境变量
所有测试环境或者正式环境变量的配置都在 .env.development (opens new window)等 `.env.xxxx`文件中。
它们都会通过 `webpack.DefinePlugin` 插件注入到全局。
环境变量必须以`VUE_APP_`为开头。如:`VUE_APP_API`、```VUE_APP_TITLE```
你在代码中可以通过如下方式获取:
```js
console.log(process.env.VUE_APP_xxxx)
```
扩展阅读:[《Vue CLI - 环境变量和模式》](https://cli.vuejs.org/zh/guide/mode-and-env.html)
> **注意**
> 环境配置修改后,需要重新运行才会生效
## Tomcat配置
修改`server.xml`,Host节点下添加
```
<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配置
```
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/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
```
**建议开启Gzip压缩**
在http配置中加入如下代码对全局的资源进行压缩,可以减少文件体积和加快网页访问速度。
```sh
# 开启gzip压缩
gzip on;
# 不压缩临界值,大于1K的才压缩,一般不用改
gzip_min_length 1k;
# 压缩缓冲区
gzip_buffers 16 64K;
# 压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_http_version 1.1;
# 压缩级别,1-10,数字越大压缩的越好,时间也越长
gzip_comp_level 5;
# 进行压缩的文件类型
gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
# 跟Squid等缓存服务有关,on的话会在Header里增加"Vary: Accept-Encoding"
gzip_vary on;
# IE6对Gzip不怎么友好,不给它Gzip了
gzip_disable "MSIE [1-6]\.";
```
## 常见问题
1. 如果使用`Mac`需要修改`application.yml`文件路径profile
2. 如果使用`Linux `提示表不存在,设置大小写敏感配置在`/etc/my.cnf`添加`lower_case_table_names=1`,重启MYSQL服务
3. 如果提示当前权限不足,无法写入文件请检查`application.yml`中的`profile`路径或`logback.xml`中的`log.path`路径是否有可读可写操作权限