# 环境部署
## 准备工作
```
JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.5.0 (推荐5.7版本)
Redis >= 3.0
Maven >= 3.0
Node >= 10
```
## 运行系统
前往Gitee下载页面[https://gitee.com/anji-plus/appsp/java](https://gitee.com/anji-plus/appsp/tree/master/java)下载解压到工作目录
## 后端运行
1. 通过Idea或Eclipse导入加载appsp/java Maven依赖包
2. 创建数据库app_sp_service_platform并导入数据脚本app_sp.sql
3. 修改`spring.datasource.druid.xx`数据库连接
4. 修改`spring.redis.xx`redis连接
5. 修改`file.apk.url` apk 下载路径前缀
6. 修改`upload.filename`文件上传路径
7. 打开运行 sp-app moudle下的com.anji.sp.SpAppApplication
## 前端运行
```
# 进入项目目录
cd appsp/web
# 安装依赖
npm install
# 加载依赖项
npm install
# 本地开发 启动项目
npm run dev
```
打开浏览器,输入:http://localhost:80 (默认账户 `admin/ajplus`)
若能正确展示登录页面,并能成功登录,菜单及页面展示正常,则表明环境搭建成功
> 提示
因为本项目是前后端分离的,所以需要前后端都启动好,才能进行访问
## 必要配置
1. 修改数据库链接
`sp-app moudle 编辑resources目录下的application-xx.yml`
`spring.datasource.druid.url: 服务器地址`
`spring.datasource.druid.username: 账号`
`spring.datasource.druid.password: 密码`
2. 修改redis
`sp-app moudle 编辑resources目录下的application-xx.yml`
`spring.redis` redis账号及地址
如果要配置多节点模式请自行修改`RedissonConfig`配置
3. apk文件上传及下载
修改`file.apk.url` apk 下载路径前缀
修改`upload.filename`文件上传路径
## 部署系统
> 提示:
因为本项目是前后端分离的,所以需要前后端都部署好,才能进行访问
### 后端部署
`cd ./sp-app `
`mvn clean install -DskipTests`
`-DskipTests`,不执行测试用例,但编译测试用例类生成相应的class文件至`target/test-classes`下。
`-Dmaven.test.skip=true`,不执行测试用例,也不编译测试用例类。
使用命令行执行:
`java -jar target/sp-1.0.0.jar --spring.profiles.active=open`
#### 注意
上传文件的目录需要独自配置
例如:目录文件 properties中upload.filename配置/app/file-sp
服务器将创建文件目录/app/file-sp/apk 供方apk使用
file.apk.url为下载地址Nginx配置虚拟下载地址
#### Nginx配置
```
server {
listen 80;
server_name open-appsp.anji-plus.com;
# 前端Html目录
location / {
root /app/portal-appsp;
index index.html index.htm;
try_files $uri $uri/ /index.html 404;
}
# 接口地址统一加sp前缀
location /sp {
proxy_pass http://10.108.0.1:8081;
}
# 文件下载地址
location /download {
alias /app/file-sp/apk/;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
```
### 前端部署
当项目开发完毕,只需要运行一行命令就可以打包你的应用
`cd /appsp/web`
```
# 打包正式环境
npm run build:prod
# 打包预发布环境
npm run build:uat
```
构建打包成功之后,会在根目录生成 dist 文件夹,里面就是构建打包好的文件,通常是 ***.js 、***.css、index.html 等静态文件。
通常情况下 dist 文件夹的静态文件发布到你的 nginx 或者静态服务器即可,其中的 index.html 是后台服务的入口页面。
>注意:
config/xxx.env.js是对应环境的接口地址,如果要添加或替换xxx.env.js,需要修改webpack.prod.conf.js的及package.json的scripts
如下:
```
// webpack.prod.conf.js
//如果要修改xxx.env.js中的NODE_ENV和webpack.prod.conf.js是一一对应的
var env = require('../config/dev.env')
if (process.env.NODE_ENV === 'testing') {
env = require('../config/test.env')
}
if (process.env.NODE_ENV === 'production') {
env = require('../config/prod.env')
}
if (process.env.NODE_ENV === 'uat') {
env = require('../config/uat.env')
}
//package.json
//如果要修改xxx.env.js中的NODE_ENV也需要变动package.json的scripts
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"dev:test": "NODE_ENV=testing npm run dev",
"dev:uat": "NODE_ENV=uat npm run dev",
"dev:prod": "NODE_ENV=production npm run dev",
"start": "npm run dev",
"build": "cross-env NODE_ENV=production node build/build.js",
"build:dev": "cross-env NODE_ENV=development node build/build.js",
"build:test": "cross-env NODE_ENV=testing node build/build.js",
"build:uat": "cross-env NODE_ENV=uat node build/build.js",
"build:prod": "cross-env NODE_ENV=production node build/build.js"
}
```
## 常见问题
1. 后端服务部署 `ip2region.db` 需要放到`Nginx`上
然后将 sp-auth 模块下IPUntils.java 中 getCityInfo的dbPath替换成Nginx中ip2region.db的目录
2. 目录文件 `.properties`中`upload.filename`配置`/app/file-sp`
服务器将创建文件目录`/app/file-sp/apk` 用来放apk使用
`file.apk.url`为下载地址Nginx配置虚拟下载地址
3. 行为验证码右下角logo乱码
请参考:[AJ-Captcha Wiki](https://gitee.com/anji-plus/captcha/wikis/1.java后端接入-1.2.1版本后?sort_id=2308156) Wiki