|
|
@@ -11,7 +11,7 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
|
|
|
* 基础系统子系统(core)
|
|
|
|
|
|
- 由数据库、litemall-cre模块、litemall-db模块、litemall-os-api模块和litemall-all模块组成;
|
|
|
+ 由数据库、litemall-cre模块、litemall-db模块和litemall-all模块组成;
|
|
|
|
|
|
* 小商场子系统(wxmall)
|
|
|
|
|
|
@@ -30,7 +30,7 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
* Spring Boot技术栈
|
|
|
|
|
|
采用IDEA开发工具,开发litemall-core、litemall-db、litemall-all、
|
|
|
- litemall-os-api、litemall-admin-api和litemall-wx-api共六个个模块;
|
|
|
+ litemall-admin-api和litemall-wx-api共六个个模块;
|
|
|
|
|
|
* miniprogram(微信小程序)技术栈
|
|
|
|
|
|
@@ -53,28 +53,19 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
### 1.2.1 小程序端功能
|
|
|
|
|
|
* 首页
|
|
|
-* 专题列表
|
|
|
-* 专题详情
|
|
|
-* 分类列表
|
|
|
-* 分类详情
|
|
|
-* 品牌列表
|
|
|
-* 品牌详情
|
|
|
-* 新品首发
|
|
|
-* 人气推荐
|
|
|
-* 商品搜索
|
|
|
+* 专题列表、专题详情
|
|
|
+* 分类列表、分类详情
|
|
|
+* 品牌列表、品牌详情
|
|
|
+* 新品首发、人气推荐
|
|
|
+* 搜索
|
|
|
* 商品详情
|
|
|
-* 商品评价列表
|
|
|
-* 商品评价
|
|
|
+* 商品评价列表、商品评价
|
|
|
* 购物车
|
|
|
* 下单
|
|
|
-* 我的主页
|
|
|
-* 订单列表
|
|
|
-* 订单详情
|
|
|
-* 地址列表
|
|
|
-* 地址添加
|
|
|
-* 我的收藏
|
|
|
-* 我的足迹
|
|
|
-* 支付页面
|
|
|
+* 个人
|
|
|
+* 订单列表、订单详情
|
|
|
+* 地址列表、地址添加、地址删除
|
|
|
+* 收藏、足迹
|
|
|
|
|
|
### 1.2.2 管理平台功能
|
|
|
|
|
|
@@ -85,7 +76,7 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
* 会员足迹
|
|
|
* 搜索历史
|
|
|
* 商城管理
|
|
|
- * 区域配置
|
|
|
+ * 行政区域
|
|
|
* 品牌制造商
|
|
|
* 订单管理
|
|
|
* 商品类目
|
|
|
@@ -107,6 +98,10 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
* 定时任务(待定)
|
|
|
* 参数管理(待定)
|
|
|
* 系统日志(待定)
|
|
|
+* 统计管理
|
|
|
+ * 用户统计
|
|
|
+ * 订单统计
|
|
|
+ * 商品统计
|
|
|
|
|
|
## 1.3 项目特点
|
|
|
|
|
|
@@ -115,12 +110,13 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
* 数据库方面,只是简单的表,表和表之间的依赖关系没有采用外键设计,而是依赖Java代码在service层面或者业务层面保证。这样做的好处是数据库频繁改动很方便,不会因为外键而导致数据库难以修改;
|
|
|
* 涉及三种技术栈,但是每种技术栈仅涉及最基础的技术;
|
|
|
* 后端技术栈,仅涉及 Spring,Spring Boot, Spring MVC和Mybatis技术,其他后端技术暂时不采用;
|
|
|
- * 小程序技术栈,仅涉及miniprogram官方文档和nideshop-mini-program项目;
|
|
|
- * 前端技术栈,仅涉及vue, vuex, vue-route,element-ui技术和vue-element-admin项目;
|
|
|
+ * 小程序技术栈,仅涉及miniprogram官方文档;
|
|
|
+ * 前端技术栈,仅涉及vue, vuex, vue-route和element技术;
|
|
|
* 安全方面,仅采用最基本的代码,提供简单基本的安全服务;
|
|
|
* 性能方面,没有涉及内存数据库缓存功能,而是完全依赖MySQL;
|
|
|
-* 对象存储服务(图片上传和下载)方面,没有采用云存储方案,而是实现自有的简单文件上传下载功能。对象只是简单存储在后台主机的一个文件夹中,从而解耦当前项目对对象存储云平台的依赖,同时加强对对象存储概念的理解。
|
|
|
-* 部署方便,支持多服务部署和一键部署脚本,也支持war项目安装包部署。
|
|
|
+* 对象存储服务方面,支持本地存储和第三方云存储方案。
|
|
|
+* 消息提醒方面,支持邮件提醒、第三方云短信提醒和微信模板提醒;
|
|
|
+* 部署方便,支持多服务部署和一键部署脚本;
|
|
|
* 文档全面,虽然还在开发中,但是规划中文档和代码注释一定会完成,帮助开发者理解项目。
|
|
|
|
|
|
总之,目前的系统只是为了学习技术和业务而开发的一个简单商场原型系统。虽然缺失很多企业级功能,但是是完整和合理的原型系统。
|
|
|
@@ -158,27 +154,6 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
其次,需要明确的是,这里划分三种阶段不是简单的文档说明,还直接影响项目本身的行为
|
|
|
和代码编译结果,因此开发者需要清晰的了解:
|
|
|
|
|
|
-* dev
|
|
|
- 项目的各个模块采用dev来编译配置代码行为。
|
|
|
- * vue技术栈的模块采用dev配置文件编译,见litemall-admin/config/dev.env.js
|
|
|
- * 小程序技术栈的模块采用dev配置,见litemall-wx/config/api.js
|
|
|
- * spring boot技术栈的模块采用dev配置,例如见litemall-wx-api/src/main/resources/application-dev.properties,
|
|
|
- 此外,在代码中也可以采用`Profile(dev)`来直接定义代码在dev阶段的行为。
|
|
|
-
|
|
|
-* dep
|
|
|
- 项目的各个模块采用dep来编译配置代码行为。
|
|
|
- * vue技术栈的模块采用dep配置文件编译,见litemall-admin/config/dep.env.js
|
|
|
- * 小程序技术栈的模块采用dep配置,见litemall-wx/config/api.js
|
|
|
- * spring boot技术栈的模块采用dep配置,例如见litemall-wx-api/src/main/resources/application-dep.properties,
|
|
|
- 此外,在代码中也可以采用`Profile(dep)`来直接定义代码在dev阶段的行为。
|
|
|
-
|
|
|
-* prod
|
|
|
- 项目的各个模块采用prod来编译配置代码行为。
|
|
|
- * vue技术栈的模块采用prod配置文件编译,见litemall-admin/config/prod.env.js
|
|
|
- * 小程序技术栈的模块采用prod配置,见litemall-wx/config/api.js
|
|
|
- * spring boot技术栈的模块采用prod配置,例如见litemall-wx-api/src/main/resources/application-prod.properties,
|
|
|
- 此外,在代码中也可以采用`Profile(prod)`来直接定义代码在dev阶段的行为。
|
|
|
-
|
|
|
最后,其实dep和prod不存在先后关系。例如,如果开发者已经存在域名和生产环境,可以直接
|
|
|
跳过dep阶段,而直接部署在线上环境中。因此有些时候,这里部署和上线是一个阶段。
|
|
|
|
|
|
@@ -189,11 +164,7 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
运行的功能,此时会有一个好的基础。
|
|
|
|
|
|
注意:
|
|
|
-> 以上三种阶段是基于个人理解,有可能有误或不当的地方。
|
|
|
-> 此外,可能有人会认为需要存在测试阶段置于dev和dep之间。
|
|
|
-> 但是,本人认为测试过程存在于三个不同阶段内部可能更为适宜,
|
|
|
-> 即项目测试过程这里不会作为独立的一个阶段。
|
|
|
-> 当然,这里也可以把dep阶段理解成是一种测试阶段。
|
|
|
+> 以上三种阶段基于个人理解,有可能有误或不当的地方。
|
|
|
|
|
|
讨论:
|
|
|
> 对于内网IP,例如"192.168.0.1",是应该认为属于开发阶段的配置,还是应该认为属于部署阶段的配置?
|
|
|
@@ -213,25 +184,26 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
如图所示,当前开发阶段的方案:
|
|
|
|
|
|
* MySQL数据访问地址`jdbc:mysql://localhost:3306/litemall`
|
|
|
-* litemall-os-api对象存储服务地址`http://localhost:8081`
|
|
|
* litemall-wx-api后台服务地址`http://localhost:8082`,数据则来自MySQL
|
|
|
* litemall-admin-api后台服务地址`http://localhost:8083`,数据则来自MySQL
|
|
|
* litemall-admin前端访问地址`http://localhost:9527`, 数据来自litemall-admin-api
|
|
|
* litemall-wx没有前端访问地址,而是直接在微信小程序工具上编译测试开发,最终会部署到微信官方平台(即不需要自己部署web服务器),而数据则来自litemall-wx-api
|
|
|
|
|
|
|
|
|
-### 1.4.0 数据库
|
|
|
+### 1.4.1 数据库
|
|
|
|
|
|
按照开发环境前,需要先在本地配置好数据库:
|
|
|
|
|
|
-1. 本项目目前采用MySQL
|
|
|
+1. 安装MySQL
|
|
|
|
|
|
- 注意:建议采用命令行或者MySQL Workbench。如果采用navicat可能导入失败。
|
|
|
+2. 创建数据库、用户权限、数据库表和测试数据
|
|
|
|
|
|
-2. 数据库文件存放在litemall-db/sql文件夹中,其中litemall_schema.sql创建数据库和用户权限,
|
|
|
+ 数据库文件存放在litemall-db/sql文件夹中,其中litemall_schema.sql创建数据库和用户权限,
|
|
|
litemall_table.sql则创建表,litemall_data.sql则是测试数据。
|
|
|
|
|
|
-### 1.4.1 Spring Boot开发环境
|
|
|
+ 注意:建议采用命令行或者MySQL Workbench。如果采用navicat可能导入失败。
|
|
|
+
|
|
|
+### 1.4.2 Spring Boot开发环境
|
|
|
|
|
|
1. 安装JDK8
|
|
|
2. 安装Maven
|
|
|
@@ -248,7 +220,7 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
|
|
|
或者采用IDEA的Maven插件安装本项目依赖库,点击`install`
|
|
|
|
|
|
- 
|
|
|
+ 
|
|
|
|
|
|
7. 采用Maven命令编译本项目
|
|
|
|
|
|
@@ -258,33 +230,13 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
mvn compile
|
|
|
```
|
|
|
|
|
|
- 此时可以看到,litemall-os-api等模块多了target文件夹,里面是编译出的文件。
|
|
|
+ 此时可以看到,litemall-wx-api等模块多了target文件夹,里面是编译出的文件。
|
|
|
|
|
|
或者采用IDEA的Maven插件编译本项目,点击`compile`
|
|
|
|
|
|
如果采用IDEA也可以跳过当前步骤,直接步骤8(因为运行时会自动编译再运行)。
|
|
|
|
|
|
-8. 采用Maven命令运行本项目的litemall-os-api模块。
|
|
|
-
|
|
|
- 例如:
|
|
|
- ```
|
|
|
- cd litemall/litemall-os-api
|
|
|
- mvn spring-boot:run
|
|
|
- ```
|
|
|
-
|
|
|
-
|
|
|
- 或者采用IDEA,打开litemall-os-api模块的Application类
|
|
|
- 右键` Run Application.main()`方式运行该模块
|
|
|
-
|
|
|
- 
|
|
|
-
|
|
|
- 打开浏览器,输入
|
|
|
- ```
|
|
|
- http://localhost:8081/os/index/index
|
|
|
- ```
|
|
|
- 如果出现JSON数据,则Spring Boot开发环境部署成功,litemall-os-api模块运行正常。
|
|
|
-
|
|
|
-9. 采用Maven命令运行本项目的litemall-wx-api模块。
|
|
|
+8. 采用Maven命令运行本项目的litemall-wx-api模块。
|
|
|
|
|
|
例如:
|
|
|
```
|
|
|
@@ -295,13 +247,15 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
如果采用IDEA,则litemall-wx-api模块的Application类
|
|
|
右键` Run Application.main()`方式运行该模块,
|
|
|
|
|
|
+ 
|
|
|
+
|
|
|
打开浏览器,输入
|
|
|
```
|
|
|
http://localhost:8082/wx/index/index
|
|
|
```
|
|
|
如果出现JSON数据,则litemall-wx-api模块运行正常。
|
|
|
|
|
|
-8. 采用Maven命令运行本项目的litemall-admin-api模块。
|
|
|
+9. 采用Maven命令运行本项目的litemall-admin-api模块。
|
|
|
|
|
|
例如:
|
|
|
```
|
|
|
@@ -319,21 +273,20 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
如果出现JSON数据,则litemall-admin-api模块运行正常。
|
|
|
|
|
|
注意:
|
|
|
-> 1. 由于设置了三个不同的端口,因此开发时,IDEA可以同时运行
|
|
|
-> litemall-os-api、litemall-wx-api和litemall-admin-api三个Spring Boot程序。
|
|
|
-> 2. 有些熟悉IDE配置tomcat运行项目的开发者可能会运行litemall-all模块来运行整个项目,
|
|
|
-> 这里是不建议的,甚至可能会出现错误的:
|
|
|
-> * 实际上litemall-all模块的作用仅仅是打包war项目包,然后用于部署阶段。
|
|
|
-> 此外,目前本人也没有尝试过在IDEA中配置tomcat运行项目。
|
|
|
-> * Spring Boot开发通常也是采用直接运行Application的main方法,
|
|
|
-> 因此熟悉IDE配置tomcat的开发者也应该切换思路。
|
|
|
-> * 当前文档的开发和测试都是基于三个服务同时运行存在三个端口的情况,
|
|
|
-> 因此如果开发时采用IDE配置tomcat的方式,实践过程中可能会和文档不一致。
|
|
|
+> 1. 由于设置不同的端口,因此开发时,IDEA可以同时运行litemall-wx-api和litemall-admin-api两个Spring Boot程序。
|
|
|
+> 2. 有些开发者可能会运行litemall-all模块来运行整个项目,这里并不反对,但是开发者需要
|
|
|
+> 清楚地明白当前小程序前端依赖后台服务litemall-wx-api的默认端口是8082,管理后台前端
|
|
|
+> 依赖后台服务litemall-admin-api的默认端口是8083;而包裹两个后台服务的litemall-all模块
|
|
|
+> 的端口则是8080,因此这里开发者需要对前端进行调整才能对接成功。
|
|
|
> 3. 在上述开发步骤中,既介绍了Maven命令方式,也介绍了IDEA方式,但是仍然建议
|
|
|
> 开发时采用IDEA即可。
|
|
|
> 4. 以上是本人开发过程中采用的一些步骤,开发者可不拘泥于这些步骤。
|
|
|
|
|
|
-### 1.4.2 微信小程序开发环境
|
|
|
+有的时候,开发者使用IDEA导入项目或者运行项目的时候会出现软件卡顿的现象,这通常是litemall-admin的
|
|
|
+node_modules文件夹内自动下载了大量的litemall-admin的依赖库,当IDEA尝试索引该文件夹内的大量文件时
|
|
|
+则出现IDEA卡顿的现象,具体解决方式可以参见[FAQ](./7.md)
|
|
|
+
|
|
|
+### 1.4.3 微信小程序开发环境
|
|
|
|
|
|
1. 安装微信小程序开发工具
|
|
|
2. 导入本项目的litemall-wx模块文件夹
|
|
|
@@ -350,14 +303,15 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
> 相关内容请阅读章节3。或者,开发者可以采用账号登录方式登录,然后体验商品购买下单的方式。
|
|
|
> 4. 由于没有设置商户支付信息,因此开发者在付款时会失败。相关内容阅读章节3。
|
|
|
|
|
|
-### 1.4.3 Vue开发环境
|
|
|
+### 1.4.4 Vue开发环境
|
|
|
|
|
|
-1. 安装npm(或者cnpm)
|
|
|
+1. 安装[nodejs](https://nodejs.org/en/)
|
|
|
2. 安装VSC(Visual Studio Code)
|
|
|
3. 导入本项目的litemall-admin模块文件夹
|
|
|
4. 安装依赖库
|
|
|
|
|
|
```
|
|
|
+ npm install -g cnpm --registry=https://registry.npm.taobao.org
|
|
|
cnpm install
|
|
|
```
|
|
|
|
|
|
@@ -379,35 +333,26 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
|
|
|
其次,需要明确的是各模块之间的关系:
|
|
|
|
|
|
- * litemall-os-api模块会包含litemall-core模块和litemall-db模块,部署在服务器中
|
|
|
* litemall-wx-api模块会包含litemall-core模块和litemall-db模块,部署在服务器中
|
|
|
* litemall-admin-api模块会包含litemall-core模块和litemall-db模块,部署在服务器中
|
|
|
* litemall-wx模块部署在微信开发者工具中,此外数据API地址指向litemall-wx-api所在服务qi地址
|
|
|
* litemall-admin编译出的静态文件放在web服务器或者tomcat服务器,此外服务器地址设置指向3中litemall-admin-api所在地址
|
|
|
|
|
|
-最后,**如果项目部署,则根据开发者的部署环境在以下文件中或代码中修改相应的配置。**
|
|
|
-
|
|
|
-1. MySQL数据库设置合适的用户名和密码等信息,同时在litemall-os-api、litemall-wx-api和litemall-admin-api模块
|
|
|
- 的`resources/application-dep.properties` 中设置正确的数据库配置信息。
|
|
|
-2. litemall-wx模块`config/api.js`设置正确的`WxApiRoot`和`StorageApi`。
|
|
|
- 如果采用第三方对象存储服务,`StorageApi`指向第三方即可。
|
|
|
-3. litemall-wx-api模块的`resources/application-dep.properties` 中设置所申请的微信小程序APPID和微信支付等信息。
|
|
|
-4. litemall-os-api模块`resources/application-dep.properties` 中设置litemall-os-api服务所在的IP和端口地址
|
|
|
- ```
|
|
|
- org.linlinjava.litemall.os.address=http://xxx.xxx.xxx.xxx
|
|
|
- org.linlinjava.litemall.os.port=8081
|
|
|
- ```
|
|
|
- 如果采用第三方对象存储服务,那么litemall-os-api可以不部署,这里的配置开忽略。
|
|
|
-5. litemall-admin模块`config/dep.env.js`中设置正确的`BASE_API`和`OS_API`。
|
|
|
- 如果采用第三方对象存储服务,`OS_API`指向第三方即可。
|
|
|
+最后,**如果项目部署云主机,则根据开发者的部署环境在以下文件中或代码中修改相应的配置。**
|
|
|
+
|
|
|
+1. MySQL数据库设置合适的用户名和密码信息;
|
|
|
+2. 后台服务模块设置合适的配置信息,建议开发者参考deploy/litemall-api/config方式,即在后台服务模块外部设置部署配置文件,
|
|
|
+ 这样可以避免开发者对模块内部的开发配置文件造成修改;
|
|
|
+3. 小商场前端litemall-wx模块`config/api.js`的`WxApiRoot`设置小商场后台服务的服务地址;
|
|
|
+4. 管理后台前端litemall-admin模块`config/dep.env.js`中的`BASE_API`设置管理后台后台服务的服务地址。
|
|
|
|
|
|
实际上,最终的部署方案是灵活的:
|
|
|
|
|
|
-* 可以单一云主机中仅安装一个tomcat服务器并配置一个端口,然后同时部署四个项目的模块,从而提供四种服务
|
|
|
-(即litemall-admin静态页面,litemall-os-api存储服务、litemall-amdin-api后台服务和litemall-wx-api后台服务)。
|
|
|
-* 也可以是同一云主机中安装四个服务器分别配置四个端口,分别提供四种服务
|
|
|
-* 也可以是四个云主机各自安装服务器配置端口,分别提供四种服务
|
|
|
-* 当然,甚至多个服务器,并发提供服务。
|
|
|
+* 可以单一云主机中仅安装一个tomcat/nginx服务器部署litemall-admin静态页面分发服务,
|
|
|
+ 然后部署两个Spring Boot的后台服务;
|
|
|
+* 也可以是同一云主机中安装一个Spring Boot服务,同时提供litemall-admin、litemall-admin-api和litemall-wx-api三种服务
|
|
|
+* 也可以把litemall-admin静态页面托管第三方cdn,然后开发者部署两个后台服务
|
|
|
+* 当然,甚至多个服务器,采用集群式并发提供服务。
|
|
|
|
|
|
注意
|
|
|
> 1. `本机`指的是是当前的开发机
|
|
|
@@ -415,17 +360,17 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
|
|
|
以下简单列举几种方案。
|
|
|
|
|
|
-### 1.5.3 单机云部署方案
|
|
|
+### 1.5.1 单机云部署方案
|
|
|
|
|
|
本节介绍基于腾讯云的单机云部署方案,面向的是服务器数据和应用部署在云主机单机中用于演示的场景。
|
|
|
其他云应该也是可行的。
|
|
|
|
|
|
-主要流程是:创建云主机,安装ubuntu操作系统,按照JDK和MySQL应用运行环境,部署三个Spring Boot微服务后台应用,
|
|
|
+主要流程是:创建云主机,安装ubuntu操作系统,按照JDK和MySQL应用运行环境,部署两个Spring Boot微服务后台应用,
|
|
|
以及部署管理后台静态文件到tomcat。
|
|
|
|
|
|

|
|
|
|
|
|
-#### 1.5.3.1 主机
|
|
|
+#### 1.5.1.1 主机
|
|
|
|
|
|
请参考腾讯云官方文档进行相关操作。
|
|
|
|
|
|
@@ -449,7 +394,7 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
|
|
|
|
|
如果开发者设置SSH密钥,可以采用免密码登录;否则采用账号和密码登录。
|
|
|
|
|
|
-#### 1.5.3.2 JDK8
|
|
|
+#### 1.5.1.2 JDK8
|
|
|
|
|
|
https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04
|
|
|
|
|
|
@@ -465,7 +410,7 @@ sudo apt-get install oracle-java8-set-default
|
|
|
警告
|
|
|
> "ppa:webupd8team/java" 不是Oracle官方PPA,可能存在安全隐患。
|
|
|
|
|
|
-#### 1.5.3.3 MySQL
|
|
|
+#### 1.5.1.3 MySQL
|
|
|
|
|
|
https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-16-04
|
|
|
|
|
|
@@ -501,7 +446,7 @@ sudo apt-get install mysql-client
|
|
|
> 2. MySQL应该部署在专门的服务器中,
|
|
|
> 这里仅仅用于演示远程部署MySQL。
|
|
|
|
|
|
-#### 1.5.3.4 litemall数据
|
|
|
+#### 1.5.1.4 litemall数据
|
|
|
|
|
|
这里可以采用命令行式,也可以采用MySQL自带的Workbench导入。
|
|
|
|
|
|
@@ -529,14 +474,15 @@ sudo apt-get install mysql-client
|
|
|
```bash
|
|
|
cd deploy
|
|
|
mysql -h localhost -u root -p123456
|
|
|
- source ./litemall-db/litemall_schema.sql
|
|
|
- source ./litemall-db/litemall_table.sql
|
|
|
- source ./litemall-db/litemall_data.sql
|
|
|
+ source ./litemall-db/litemall_schema.sql
|
|
|
+ use litemall;
|
|
|
+ source ./litemall-db/litemall_table.sql
|
|
|
+ source ./litemall-db/litemall_data.sql
|
|
|
```
|
|
|
|
|
|
其中123456是开发者所设置的MySQL的管理员密码。
|
|
|
|
|
|
-#### 1.5.3.5 Tomcat/Nginx
|
|
|
+#### 1.5.1.5 Tomcat/Nginx
|
|
|
|
|
|
本项目中采用二进制jar包方式来部署Spring Boot后端应用,因此可以不需要部署在tomcat中。
|
|
|
但是,litemall-admin前端项目最终会编译出静态文件,需要部署在服务器中,
|
|
|
@@ -573,6 +519,8 @@ sudo apt-get install mysql-client
|
|
|
</Host>
|
|
|
```
|
|
|
|
|
|
+ 注意:这里假定litemall-admin静态文件是上传在`/home/ubuntu/deploy/litemall-admin/dist`文件夹中,开发者可以自行调整。
|
|
|
+
|
|
|
3. 运行/重启tomcat
|
|
|
|
|
|
```
|
|
|
@@ -593,7 +541,8 @@ sudo apt-get install mysql-client
|
|
|
```
|
|
|
|
|
|
2. 配置nginx指向`delpoy/litemall-admin/dist`目录
|
|
|
-
|
|
|
+ 注意:这里假定litemall-admin静态文件是上传在`/home/ubuntu/deploy/litemall-admin/dist`文件夹中,开发者可以自行调整。
|
|
|
+
|
|
|
3. 运行/重启nginx
|
|
|
```
|
|
|
sudo service nginx stop
|
|
|
@@ -601,9 +550,9 @@ sudo apt-get install mysql-client
|
|
|
sudo service nginx restart
|
|
|
```
|
|
|
|
|
|
-#### 1.5.3.6 项目打包
|
|
|
+#### 1.5.1.6 项目打包
|
|
|
|
|
|
-这里项目打包括两种:
|
|
|
+这里项目打两个Spring Boot模块的打包和Vue项目的编译打包两种:
|
|
|
|
|
|
1. Spring Boot打包
|
|
|
|
|
|
@@ -615,9 +564,8 @@ sudo apt-get install mysql-client
|
|
|
mvn package
|
|
|
```
|
|
|
|
|
|
- 此时,在litemall-os-api项目的target文件夹中看到litemall-os-xxx.jar;
|
|
|
- 在litemall-wx-api项目的target文件夹中看到litemall-wx-xxx.jar;
|
|
|
- 在litemall-admin-api项目的target文件夹中看到litemall-admin-xxx.jar。
|
|
|
+ 此时,在litemall-wx-api项目的target文件夹中看到litemall-wx-xxx-exec.jar;
|
|
|
+ 在litemall-admin-api项目的target文件夹中看到litemall-admin-xxx-exec.jar。
|
|
|
|
|
|
2. Vue项目打包
|
|
|
|
|
|
@@ -630,16 +578,16 @@ sudo apt-get install mysql-client
|
|
|
|
|
|
此时,litemall-admin模块的dist文件夹中就是最终部署时的代码,可以先压缩,上传到云主机,再解压缩。
|
|
|
|
|
|
-#### 1.5.3.7 项目部署运行
|
|
|
+#### 1.5.1.7 项目部署运行
|
|
|
|
|
|
https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#deployment-service
|
|
|
|
|
|
1. 项目进一步打包到deploy文件夹中:
|
|
|
- * litemall-os-api模块编译得到的litemall-os-api-xxx-exec.jar 保存到deploy的litemall-os-api文件夹中,同时重命名成litemall-os-api.jar
|
|
|
* litemall-wx-api模块编译得到的litemall-wx-api-xxx-exec.jar 保存到deploy的litemall-wx-api文件夹中,同时重命名成litemall-wx-api.jar
|
|
|
* litemall-admin-api模块编译得到的litemall-admin-api-xxx-exec.jar 保存到deploy的litemall-admin-api文件夹中,同时重命名成litemall-admin-api.jar
|
|
|
* litemall-admin模块编译以后,把dist文件夹压缩,然后放到deploy的litemall-admin文件夹中。
|
|
|
-
|
|
|
+ * litemall-db模块的sql文件拷贝到deploy的litemall-db文件夹中。
|
|
|
+
|
|
|
2. 使用FileZilla把deploy整个文件夹上传到云主机的/home/ubuntu文件夹中
|
|
|
|
|
|
3. 使用PuTTY登录云主机
|
|
|
@@ -649,13 +597,14 @@ https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#dep
|
|
|
```bash
|
|
|
cd deploy
|
|
|
mysql -h localhost -u root -p123456
|
|
|
- source ./litemall-db/litemall_schema.sql
|
|
|
+ source ./litemall-db/litemall_schema.sql
|
|
|
+ use litemall;
|
|
|
source ./litemall-db/litemall_table.sql
|
|
|
source ./litemall-db/litemall_data.sql
|
|
|
```
|
|
|
注意,123456是开发者所设置的MySQL管理员密码
|
|
|
警告:
|
|
|
- > litemall_schema.sql会尝试删除litemall数据库然后重建一个新的数据。
|
|
|
+ > litemall_schema.sql会尝试删除litemall数据库然后重建新的数据库。
|
|
|
|
|
|
5. 运行脚本部署运行
|
|
|
|
|
|
@@ -671,41 +620,33 @@ https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#dep
|
|
|
然后测试是否部署成功(xxx.xxx.xxx.xxx是云主机IP):
|
|
|
|
|
|
```
|
|
|
- http://xxx.xxx.xxx.xxx:8081/os/index/index
|
|
|
http://xxx.xxx.xxx.xxx:8082/wx/index/index
|
|
|
http://xxx.xxx.xxx.xxx:8083/admin/index/index
|
|
|
http://xxx.xxx.xxx.xxx:8080/#/login
|
|
|
```
|
|
|
|
|
|
-#### 1.5.3.8 部署脚本
|
|
|
+#### 1.5.1.8 部署脚本
|
|
|
|
|
|
-为了简化步骤1和步骤2,完成了deploy/util/upload.sh上传脚本和deploy/util/lazy.sh部署脚本,
|
|
|
+为了简化步骤1和步骤2,完成了deploy/util/lazy.sh上传脚本和deploy/util/package.sh部署脚本,
|
|
|
|
|
|
注意:
|
|
|
-> 1. 开发者需要在deploy/util/upload.sh和deploy/util/lazy.sh中设置相应的云主机登录账号和密钥文件路径。
|
|
|
-> 2. 开发者需要在deploy/util/reset.sh设置云主机的MySQL的root登录账户。
|
|
|
-> 3. 请先执行1.5.3中上述步骤,确保部署环境成功。
|
|
|
+> 1. 开发者需要在deploy/util/package.sh和deploy/util/lazy.sh中设置相应的云主机登录账号和密钥文件路径。
|
|
|
+> 2. 开发者需要在deploy/bin/reset.sh设置云主机的MySQL的root登录账户。
|
|
|
+> 3. 请先执行1.5.1中上述步骤,确保部署环境成功。
|
|
|
|
|
|
-* 上传脚本
|
|
|
+* package.sh
|
|
|
|
|
|
-该脚本会自动把当前项目不同模块下的最终部署文件复制到deploy文件夹中,然后上传到云主机。
|
|
|
-该上传脚本没有自动做Spring Boot项目打包和Vue项目打包工作
|
|
|
+该脚本会自动把当前项目Spring Boot项目打包和Vue项目打包工作,然后复制到deploy文件夹中。
|
|
|
|
|
|
-* 部署脚本
|
|
|
+* lazy.sh
|
|
|
|
|
|
-该脚本会编译项目,再上传deploy文件,最后ssh登录远程主机执行bin下面的deploy.sh脚本。
|
|
|
+该脚本会调用package.sh打包项目,然后上传deploy文件夹到云主机,最后ssh登录远程主机执行bin下面的deploy.sh脚本。
|
|
|
|
|
|
-注意,运行命令必须在项目主目录中,类似如下命令:
|
|
|
-```bash
|
|
|
-cd litemall
|
|
|
-./deploy/util/lazy.sh
|
|
|
-```
|
|
|
-
|
|
|
注意:
|
|
|
> 本项目的deploy文件夹以及其中的部署相关脚本只能适用于本节部署方式。
|
|
|
> 目前灵活性较差,开发者可以参考实现自己的相关脚本,简化开发工作。
|
|
|
|
|
|
-### 1.5.4 集群式云部署方案
|
|
|
+### 1.5.2 集群式云部署方案
|
|
|
|
|
|
由于本项目是面向微小型企业的小商城系统,因此预期的分布式部署方案是
|
|
|
|
|
|
@@ -716,23 +657,23 @@ cd litemall
|
|
|
5. 一台或多台云主机部署小商场的后台服务
|
|
|
|
|
|
虽然由于环境原因没有正式测试过,但是这种简单的集群式场景应该是可行的。
|
|
|
-在1.5.3节中所演示的四个服务是独立的,因此延伸到这里分布式是非常容易的。
|
|
|
+在1.5.1节中所演示的三个服务是独立的,因此延伸到这里分布式是非常容易的。
|
|
|
|
|
|
但是,如果需要实现互联网式分布式云部署,目前的项目架构和方案不支持。
|
|
|
至少每个功能模块应该是独立服务系统。此外,需要引入单点登录系统、集群、缓存
|
|
|
和消息队列等多种技术。因此如果开发者需要这种形式的分布式方案,请参考其他项目。
|
|
|
|
|
|
-### 1.5.5 war部署方案
|
|
|
+### 1.5.3 war部署方案
|
|
|
|
|
|
-这里介绍另外一种单主机单服务的war部署方案,即四个服务打包成一个war格式的项目部署包。
|
|
|
+这里介绍另外一种单主机单服务的war部署方案,即三个服务打包成一个war格式的项目部署包。
|
|
|
|
|
|

|
|
|
|
|
|
-和1.5.3节相比,采用这样方案的原因是:
|
|
|
+和1.5.1节相比,采用这样方案的原因是:
|
|
|
|
|
|
1. 安装方便,是传统的web项目安装方式,在tomcat里面部署一个war项目包,即可完成安装;
|
|
|
-2. 内存消耗少。在1.5.3节中四个独立的java环境消耗的内存大概1.2G多,而这里部署以后
|
|
|
-只需要一个java环境,因此消耗内存只有1.5.3节方案的四分之一,适合1G云主机部署。
|
|
|
+2. 内存消耗少。在1.5.1节中三个独立的java环境消耗的内存大概900M多,而这里部署以后
|
|
|
+只需要一个java环境,因此消耗内存只有1.5.3节方案的三分之一,适合1G云主机部署。
|
|
|
3. 只存在一个域名和端口,没有多个服务之间依赖关系。
|
|
|
|
|
|
具体的打包部署方案是;
|
|
|
@@ -745,9 +686,8 @@ cd litemall
|
|
|
更多细节阅读2.5节litemall-all模块。
|
|
|
|
|
|
注意:
|
|
|
-> 虽然这里介绍了这种方案,但是本项目的开发、测试和部署是基于1.5.3方案,
|
|
|
-> 因此开发者可能需要做一些配置方面的调整,例如三个后台服务地址调整。
|
|
|
-
|
|
|
+> 虽然这里介绍了这种方案,但是本项目的开发、测试和部署是基于1.5.1方案,
|
|
|
+> 因此开发者可能需要做一些配置方面的调整,例如后台服务地址调整。
|
|
|
|
|
|
## 1.6 上线方案
|
|
|
|
|
|
@@ -860,18 +800,11 @@ https://www.example.com
|
|
|
|
|
|
此时,可以看到管理后台的页面。
|
|
|
|
|
|
-#### 1.6.2.3 反向代理三个后台服务
|
|
|
+#### 1.6.2.3 反向代理两个个后台服务
|
|
|
|
|
|
继续修改`/etc/nginx/nginx.conf`文件,配置nginx静态web文件目录
|
|
|
```
|
|
|
server {
|
|
|
- location ^~ /os {
|
|
|
- proxy_pass http://localhost:8081;
|
|
|
- proxy_set_header Host $host;
|
|
|
- proxy_set_header X-Real-IP $remote_addr;
|
|
|
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
|
- }
|
|
|
-
|
|
|
location ^~ /wx {
|
|
|
proxy_pass http://localhost:8082;
|
|
|
proxy_set_header Host $host;
|
|
|
@@ -890,7 +823,6 @@ server {
|
|
|
|
|
|
打开浏览器,输入以下地址:
|
|
|
```
|
|
|
-https://www.example.com/os/index/index
|
|
|
https://www.example.com/wx/index/index
|
|
|
https://www.example.com/admin/index/index
|
|
|
```
|
|
|
@@ -935,46 +867,39 @@ http://www.example.com
|
|
|
> 换成什么地址都可以,但是这里不应该暴露出来。也就是说这个地址是微信支付平台
|
|
|
> 和这里的小商场后台服务之间的交互API,对外公开会存在安全隐患。
|
|
|
|
|
|
-2. litemall-wx-api模块需要配置prod.properties
|
|
|
+2. litemall-core模块需要配置application-core.yml
|
|
|
|
|
|
```
|
|
|
- wx.app-id=
|
|
|
- wx.app-secret=
|
|
|
- wx.mch-id=
|
|
|
- wx.mch-key=
|
|
|
- wx.notify-url=
|
|
|
+ litemall:
|
|
|
+ wx:
|
|
|
+ app-id: wxa5b486c6b918ecfb
|
|
|
+ app-secret: e04004829d4c383b4db7769d88dfbca1
|
|
|
+ mch-id: 111111
|
|
|
+ mch-key: xxxxxx
|
|
|
+ notify-url: http://www.example.com/wx/order/pay-notify
|
|
|
```
|
|
|
|
|
|
- 这里的`wx.notify-url`就是前面开发者自定义的地址。
|
|
|
+ 这里的`litemall.wx.notify-url`就是前面开发者自定义的地址。
|
|
|
|
|
|
3. litemall-wx模块的`project.config.json`文件调整相应的值,
|
|
|
特别是`appid`要设置成开发者申请的appid。
|
|
|
|
|
|
+### 1.6.4 管理后台服务上线
|
|
|
|
|
|
-### 1.6.4 后台服务上线
|
|
|
-
|
|
|
-后台服务上线,则开发者需要自己的线上环境在以下文件中或代码中修改相应的配置。
|
|
|
+管理后台服务上线,则开发者需要自己的线上环境在以下文件中或代码中修改相应的配置。
|
|
|
|
|
|
-1. MySQL数据库设置合适的用户名和密码等信息,同时在litemall-os-api、litemall-wx-api和litemall-admin-api模块
|
|
|
- 的`resources/application-prod.properties` 中设置正确的数据库配置信息。
|
|
|
-2. litemall-wx模块`config/api.js`设置正确的`WxApiRoot`和`StorageApi`。
|
|
|
- 如果采用第三方对象存储服务,`StorageApi`指向第三方即可。
|
|
|
-3. litemall-wx-api模块的`resources/application-prod.properties` 中设置所申请的微信小程序APPID和微信支付等信息。
|
|
|
-4. litemall-os-api模块`resources/application-prod.properties` 中设置litemall-os-api服务所在的IP和端口地址
|
|
|
- ```
|
|
|
- org.linlinjava.litemall.os.address=https://www.example.com
|
|
|
- org.linlinjava.litemall.os.port=80
|
|
|
- ```
|
|
|
- 如果采用第三方对象存储服务,那么litemall-os-api可以不部署,这里的配置开忽略。
|
|
|
-5. litemall-admin模块`config/prod.env.js`中设置正确的`BASE_API`和`OS_API`。
|
|
|
- 如果采用第三方对象存储服务,`OS_API`指向第三方即可。
|
|
|
+1. MySQL数据库设置合适的用户名和密码信息;
|
|
|
+2. 后台服务模块设置合适的配置信息,建议开发者参考deploy/litemall-api/config方式,即在后台服务模块外部设置部署配置文件,
|
|
|
+ 这样可以避免开发者对模块内部的开发配置文件造成修改;
|
|
|
+3. 小商场前端litemall-wx模块`config/api.js`的`WxApiRoot`设置小商场后台服务的服务地址;
|
|
|
+4. 管理后台前端litemall-admin模块`config/prod.env.js`中的`BASE_API`设置管理后台后台服务的服务地址。
|
|
|
|
|
|
|
|
|
### 1.6.5 上线脚本
|
|
|
|
|
|
-本项目目前没有上线脚本,不过可以参考1.5.3节中的部署脚本。
|
|
|
+本项目目前没有上线脚本,不过可以参考1.5.1节中的部署脚本。
|
|
|
|
|
|
-### 1.6.6 优化
|
|
|
+### 1.6.6 项目优化
|
|
|
|
|
|
以下是部署方案中出现而在上线方案中可以优化的一些步骤。
|
|
|
|
|
|
@@ -1010,4 +935,54 @@ litemall-admin编译得到的前端文件在第一次加载时相当耗时,这
|
|
|
#### 1.6.6.4 nginx优化
|
|
|
|
|
|
本人对nginx不是很熟悉,而nginx还存在很多可以调整优化的部分,这里建议开发者
|
|
|
-根据自己业务或架构情况优化。
|
|
|
+根据自己业务或架构情况优化。
|
|
|
+
|
|
|
+## 1.7 项目管理
|
|
|
+
|
|
|
+这里简述一些当前项目开发的要点。
|
|
|
+
|
|
|
+### 1.7.1 项目.gitignore
|
|
|
+
|
|
|
+当前项目的.gitignore不是单一文件,而是多个模块都存在:
|
|
|
+* deploy/.gitignore
|
|
|
+* litemall-admin/.gitignore
|
|
|
+* litemall-admin-api/.gitignore
|
|
|
+* litemall-core/.gitignore
|
|
|
+* litemall-db/.gitignore
|
|
|
+* litemall-wx-api/.gitignore
|
|
|
+* litemall-all/.gitignore
|
|
|
+* .gitignore
|
|
|
+
|
|
|
+### 1.7.2 项目自动部署
|
|
|
+
|
|
|
+#### 1.7.2.1 deploy部署
|
|
|
+
|
|
|
+当前项目存在deploy部署文件夹,这个是上述1.5.1节部署腾讯云主机所采取的一些脚本。
|
|
|
+
|
|
|
+流程如下:
|
|
|
+1. util脚本是当前开发主机运行,用来打包项目和上传腾讯云主机;
|
|
|
+2. 打包项目时,会编译打包项目相关模块到litemall-admin、litemall-api和litemall-db文件夹中;
|
|
|
+3. bin脚本是云主机运行,用来安装数据库、导入数据、启动静态文件服务和Spring Boot后台服务。
|
|
|
+
|
|
|
+这里deploy部署方式比较简单不灵活,开发者可以参考开发自己的项目脚本。
|
|
|
+
|
|
|
+#### 1.7.2.2 .gitlab-ci.yml部署
|
|
|
+
|
|
|
+如果项目源代码托管在gitlab中,可以采用这个配置文件自动部署。
|
|
|
+
|
|
|
+#### 1.7.2.3 docker部署
|
|
|
+
|
|
|
+目前未支持
|
|
|
+
|
|
|
+### 1.7.3 Spring Boot配置方案
|
|
|
+
|
|
|
+当前两个后台服务是采用Spring Boot开发,但是在参数配置方面可能需要这里说明一下,
|
|
|
+帮助开发者更好地理解这里作为多模块Spring Boot的配置方式。
|
|
|
+
|
|
|
+#### 1.7.3.1 profile
|
|
|
+
|
|
|
+#### 1.7.3.2 stage
|
|
|
+
|
|
|
+### 1.7.4 项目配置
|
|
|
+
|
|
|
+这里列出一些项目相关的基本配置信息:
|