1. 进一步完善文档。
2. util/upload.sh自动上传脚本
14
README.md
@@ -109,11 +109,19 @@ litemall
|
||||
==
|
||||
|
||||
本项目基于或参考以下项目:
|
||||
> 1. nideshop-mini-program
|
||||
> 1. [nideshop-mini-program](https://github.com/tumobi/nideshop-mini-program)
|
||||
> 如果后端希望采用nodejs,用户可以访问nideshop项目
|
||||
> 2. platform
|
||||
> 2. [platform](https://gitee.com/fuyang_lipengjun/platform)
|
||||
> 如果后端希望采用非spring boot版的普通spring版或者更多功能,
|
||||
> 用户可以访问platform项目
|
||||
> 3. vue-element-admin
|
||||
> 3. [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
|
||||
> 一个基于Vue和Element的后台集成方案
|
||||
|
||||
本项目所依赖的其他开源项目见相关章节
|
||||
|
||||
问题
|
||||
==
|
||||
|
||||
用户有问题或者好的建议可以用Issues反馈交流,请给出详细信息,本人会尽可能解决。
|
||||
* 如果问题是共性问题(如代码bug或文档不全),本人会及时解决。
|
||||
* 如果问题是个人问题(如用户了解不深入或者没有相关技术),请见谅(本人也是百度和谷歌)。
|
||||
@@ -16,9 +16,17 @@
|
||||
```
|
||||
|
||||
5. 测试部署是否成功
|
||||
请确保litemall的Spring Boot应用模块所对应的端口已经打开;
|
||||
然后测试是否能够访问(xxx.xxx.xxx.xxx是云主机IP):
|
||||
|
||||
请确保云主机的安全组已经允许相应的端口(见1.5.3.1);
|
||||
然后测试是否部署成功(xxx.xxx.xxx.xxx是云主机IP):
|
||||
|
||||
> http://xxx.xxx.xxx.xxx:8081/storage/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:8081/storage/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
|
||||
```
|
||||
|
||||
6. 自动上传脚本
|
||||
|
||||
为了简化步骤1和步骤2,完成了util/upload.sh脚本,用户需要设置相应的云主机IP和密钥文件路径
|
||||
@@ -1,5 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 请注意
|
||||
# 1. 本脚本的作用是停止当前Spring Boot应用,然后再次部署,此外解压缩litemall-admin的静态文件
|
||||
# 2. litemall-admin解压目录是 /home/ubuntu/deploy/litemall-admin/dist,
|
||||
# 而这个目录也正是tomcat配置静态文件目录的路径(见1.5.3.5节)
|
||||
|
||||
|
||||
#部署litemall-admin静态文件应用
|
||||
cd /home/ubuntu/deploy/litemall-admin
|
||||
rm -rf dist
|
||||
|
||||
23
deploy/util/upload.sh
Normal file
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 请注意
|
||||
# 1. 本脚本的作用是把本项目编译的结果保存到deploy文件夹中,然后上传到云主机
|
||||
# 2. 运行本脚本前,请确认Spring Boot模块已经编译,同时litemall-admin模块也已经便宜
|
||||
# 3. util/upload.sh脚本是运行在开发机中,bin/deploy.sh脚本是运行在云主机中
|
||||
# 4. 这是一个简单的脚本,用户可以按照自己需求修改
|
||||
|
||||
# 请设置云主机的IP地址
|
||||
CVM=XXX.XXX.XXX.XXX
|
||||
# 请设置本地SSH私钥文件id_rsa
|
||||
ID_RSA=/XXX/id_rsa
|
||||
|
||||
# 复制三个Spring Boot应用
|
||||
cp -f ./litemall-os-api/target/litemall-os-api-*.jar ./deploy/litemall-os-api/litemall-os-api.jar
|
||||
cp -f ./litemall-wx-api/target/litemall-wx-api-*.jar ./deploy/litemall-wx-api/litemall-wx-api.jar
|
||||
cp -f ./litemall-admin-api/target/litemall-admin-api-*.jar ./deploy/litemall-admin-api/litemall-admin-api.jar
|
||||
|
||||
# 压缩litemall-admin应用
|
||||
tar -zcvf ./deploy/litemall-admin/dist.tar -C ./litemall-admin/dist .
|
||||
|
||||
# 上传云主机
|
||||
scp -i $ID_RSA -r ./deploy ubuntu@$CVM:/home/ubuntu/
|
||||
162
doc/1.md
@@ -127,9 +127,9 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
||||
|
||||
* 数据库方面,只是简单的表,表和表之间的依赖关系没有采用外键设计,而是依赖Java代码在service层面或者业务层面保证。这样做的好处是数据库频繁改动很方便,不会因为外键而导致数据库难以修改;
|
||||
* 涉及三种技术栈,但是每种技术栈仅涉及最基础的技术;
|
||||
* 后端技术栈,仅涉及 Spring,Spring Boot, Spring MVC和Mybatis技术,其他后端技术暂时不采用;
|
||||
* 小程序技术栈,仅涉及miniprogram官方文档和nideshop-mini-program项目;
|
||||
* 前端技术栈,仅涉及vue, vuex, vue-route,element-ui技术和vue-element-admin项目;
|
||||
* 后端技术栈,仅涉及 Spring,Spring Boot, Spring MVC和Mybatis技术,其他后端技术暂时不采用;
|
||||
* 小程序技术栈,仅涉及miniprogram官方文档和nideshop-mini-program项目;
|
||||
* 前端技术栈,仅涉及vue, vuex, vue-route,element-ui技术和vue-element-admin项目;
|
||||
* 安全方面,仅采用最基本的代码,提供简单基本的安全服务;
|
||||
* 性能方面,没有涉及内存数据库缓存功能,而是完全依赖MySQL;
|
||||
* 对象存储服务(图片上传和下载)方面,没有采用云存储方案,而是实现自有的简单文件上传下载功能。对象只是简单存储在后台主机的一个文件夹中,从而解耦当前项目对对象存储云平台的依赖,同时加强对对象存储概念的理解。
|
||||
@@ -156,27 +156,28 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
|
||||
### 1.4.1 Spring Boot开发环境
|
||||
|
||||
1. 安装JDK8
|
||||
2. 安装IDEA Community
|
||||
3. 安装maven
|
||||
4. 安装Git(可选)
|
||||
2. 安装maven
|
||||
3. 安装Git(可选)
|
||||
4. 安装IDEA Community
|
||||
建议安装maven插件和Git插件
|
||||
5. IDEA导入本项目
|
||||
6. 采用maven插件安装依赖库
|
||||
6. 采用maven命令行或者IDEA的maven插件安装本项目依赖库
|
||||
7. 编译本项目
|
||||
8. 运行litemall-os-api, 打开浏览器,输入
|
||||
```
|
||||
http://localhost:8081/storage/index/index
|
||||
```
|
||||
如果出现JSON数据,则Spring Boot开发环境部署成功,litemall-os-api模块运行正常。
|
||||
```
|
||||
http://localhost:8081/storage/index/index
|
||||
```
|
||||
如果出现JSON数据,则Spring Boot开发环境部署成功,litemall-os-api模块运行正常。
|
||||
9. 同上,运行litemall-wx-api, 打开浏览器,输入
|
||||
```
|
||||
http://localhost:8082/wx/index/index
|
||||
```
|
||||
如果出现JSON数据,则litemall-wx-api模块运行正常。
|
||||
```
|
||||
http://localhost:8082/wx/index/index
|
||||
```
|
||||
如果出现JSON数据,则litemall-wx-api模块运行正常。
|
||||
10. 同上,运行litemall-admin-api, 打开浏览器,输入
|
||||
```
|
||||
http://localhost:8083/admin/index/index
|
||||
```
|
||||
如果出现JSON数据,则litemall-admin-api模块运行正常。
|
||||
```
|
||||
http://localhost:8083/admin/index/index
|
||||
```
|
||||
如果出现JSON数据,则litemall-admin-api模块运行正常。
|
||||
|
||||
注意:
|
||||
> 由于设置了三个不同的端口,因此开发时,IDEA可以同时运行litemall-os-api、litemall-wx-api和litemall-admin-api三个Spring Boot程序。
|
||||
@@ -185,7 +186,7 @@ http://localhost:8083/admin/index/index
|
||||
|
||||
1. 安装微信小程序开发工具
|
||||
2. 导入本项目的litemall-wx模块文件夹
|
||||
3. 编译前,请确定litemall-wx-api模块已经运行,而litemall-wx模块的config文件夹中的api.js已经设置正确对应的后台数据服务地址;
|
||||
3. 编译前,请确定litemall-wx-api模块已经运行,而litemall-wx模块的config文件夹中的api.js已经设置正确的后台数据服务地址;
|
||||
4. 点击`编译`,如果出现数据和图片,则运行正常
|
||||
|
||||
### 1.4.3 Vue开发环境
|
||||
@@ -203,8 +204,8 @@ http://localhost:8083/admin/index/index
|
||||
```
|
||||
cnpm run dev
|
||||
```
|
||||
然后,打开浏览器,输入`http://localhost:9527`。
|
||||
如果出现管理后台登陆页面,则表明管理后台的前端运行正常;
|
||||
然后,打开浏览器,输入`http://localhost:9527`。
|
||||
如果出现管理后台登陆页面,则表明管理后台的前端运行正常;
|
||||
6. 请确定litemall-admin-api模块已经运行,然后点击`登陆`,如果能够成功登陆,则表明管理后台的前端和后端对接成功,运行正常。
|
||||
|
||||
## 1.5 部署方案
|
||||
@@ -212,6 +213,7 @@ http://localhost:8083/admin/index/index
|
||||
在1.4节中介绍的是开发阶段时一些关键性开发流程。本节将介绍代码开发成功以后开始部署项目时一些关键性流程。
|
||||
|
||||
首先,需要明确的是开发时项目使用的服务地址是本地地址,即localhost;而部署时则应该根据具体情况设置合理的服务器地址和端口。
|
||||
|
||||
其次,需要明确的是各模块之间的关系:
|
||||
|
||||
* litemall-os-api模块会包含litemall-db模块,部署在服务器中
|
||||
@@ -219,7 +221,7 @@ http://localhost:8083/admin/index/index
|
||||
* litemall-admin-api模块会包含litemall-db模块,部署在服务器中
|
||||
* litemall-wx模块部署在腾讯官方平台中,此外数据API地址指向litemall-wx-api所在服务qi地址
|
||||
* litemall-admin编译出的静态文件放在web服务器或者tomcat服务器,此外服务器地址设置指向3中litemall-admin-api所在地址
|
||||
|
||||
|
||||
注意
|
||||
> * 这里litemall-os-api、litemall-admin-api和litemall-wx-api也可以选择编译成jar模式的可执行文件(因为内嵌tomcat服务器),然后直接运行。
|
||||
> * litemall-wx正式部署时需要设置https开头的合法域名,因此litemall-wx-api所在的服务器需要配置合适的域名和SSL证书,具体参见官方文档。
|
||||
@@ -244,13 +246,14 @@ http://localhost:8083/admin/index/index
|
||||
而项目开发完毕以后,在正式部署之前,可以先进行一个简单的本机测试部署方案。
|
||||
|
||||
首先,需要确保本地MySQL已经安装并且导入了litemall.sql数据;
|
||||
|
||||
其次,项目打包
|
||||
```
|
||||
cd litemall
|
||||
mvn clean
|
||||
mvn package
|
||||
```
|
||||
最后,本机测试性部署三个应用
|
||||
最后,本机测试性部署三个Spring Boot应用
|
||||
```
|
||||
cd litemall
|
||||
java -jar ./litemall-os-api/target/litemall-os-api-0.1.0.jar &
|
||||
@@ -272,22 +275,37 @@ http://localhost:8083/admin/index/index
|
||||
局域网方案,面向的是最终服务器数据和部分应用程序部署在局域网内的场景。
|
||||
|
||||
### 1.5.3 基于ubuntu腾讯云的单机云部署方案
|
||||
单机云部署方案,面向的是云主机单机同时部署演示型场景
|
||||
创建云主机,安装ubuntu操作系统,按照JDK和MySQL应用运行环境,部署三个Spring Boot微服务后台应用。
|
||||
单机云部署方案,面向的是服务器数据和应用部署在云主机单机中用于演示的场景。
|
||||
|
||||
主要流程是:创建云主机,安装ubuntu操作系统,按照JDK和MySQL应用运行环境,部署三个Spring Boot微服务后台应用,
|
||||
以及部署后台静态文件。
|
||||
|
||||

|
||||
|
||||
#### 1.5.3.1 主机
|
||||
|
||||
腾讯云 ubuntu 16.04.1
|
||||
请参考腾讯云官方文档进行相关操作。
|
||||
|
||||
1. 创建云主机虚拟机
|
||||
|
||||
2. 安装操作系统
|
||||
|
||||
本项目采用ubuntu 16.04.1,但是并不限制其他操作系统。
|
||||
|
||||
3. 创建安全组
|
||||

|
||||
4. 安装SSH密钥(可选)
|
||||
|
||||

|
||||
|
||||
目前允许的端口:8081,8082,8083,8080,80,443,22,3306
|
||||
|
||||
4. 设置SSH密钥(可选)
|
||||
|
||||
建议用户设置SSH密钥,可以免密码登陆云主机,以及用于脚本自动上传应用。
|
||||
|
||||
5. 使用PuTTY远程登陆云主机
|
||||
|
||||
如果用户设置SSH密钥,可以采用免密码登陆;否则采用账号和密码登陆。
|
||||
|
||||
#### 1.5.3.2 JDK8
|
||||
|
||||
https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04
|
||||
@@ -316,24 +334,23 @@ sudo apt-get install mysql-client
|
||||
|
||||
下面是可选地设置root账号远程访问MySQL
|
||||
|
||||
首先,MySQL默认不支持远程访问,因此需要修改配置文件
|
||||
```
|
||||
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
|
||||
```
|
||||
添加'#'注释掉其中的`bind-address`,
|
||||
```
|
||||
#bind-address= 127.0.0.1`;
|
||||
```
|
||||
1. MySQL默认不支持远程访问,因此需要修改配置文件
|
||||
```
|
||||
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
|
||||
```
|
||||
添加'#'注释掉其中的`bind-address`,
|
||||
```
|
||||
#bind-address= 127.0.0.1`;
|
||||
```
|
||||
|
||||
其次,设置root账号远程访问权限
|
||||
```
|
||||
mysql -u root -p
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
|
||||
FLUSH PRIVILEGES;
|
||||
quit;
|
||||
```
|
||||
|
||||
最后,登陆腾讯云,设置云主机的`安全组`,允许`3306`端口访问,然后重启云主机,使得这些配置生效。
|
||||
2. 设置root账号远程访问权限
|
||||
```
|
||||
mysql -u root -p
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
|
||||
FLUSH PRIVILEGES;
|
||||
quit;
|
||||
```
|
||||
3. 登陆腾讯云,设置云主机的`安全组`,允许`3306`端口访问,然后重启云主机,使得这些配置生效。
|
||||
|
||||
警告
|
||||
> 1. 因为安全的原因,MySQL不应该设置远程访问,
|
||||
@@ -358,7 +375,7 @@ quit;
|
||||
|
||||
1. 先确认已经在1.4.3节中设置了root可以远程访问;
|
||||
2. 创建一个新的连接,设置`Hostname` 、`Username` 和`Password`,
|
||||
然后点击``Test Connection`测试是否能够连接到云主机;
|
||||
然后点击`Test Connection`测试是否能够连接到云主机;
|
||||
如果测试成功,则进入;
|
||||

|
||||
3. 用户自行学习文档,完成`创建数据库`、`创建用户`和`分配权限`三个操作;
|
||||
@@ -367,20 +384,27 @@ quit;
|
||||
#### 1.5.3.5 Tomcat
|
||||
|
||||
1. 本项目中采用二进制jar包方式来部署Spring Boot后端应用,因此可以不需要部署在tomcat中。
|
||||
但是,litemall-admin前端项目最终会编译出静态文件,需要部署在服务器中,因此这里仍需安装tomcat。
|
||||
但是,litemall-admin前端项目最终会编译出静态文件,需要部署在服务器中,因此这里仍需安装tomcat(或者其他服务器)。
|
||||
|
||||
```bash
|
||||
sudo apt-get install tomcat8
|
||||
```
|
||||
|
||||
2. 为了配置tomcat支持外部文件夹中,修改tomcat的server文件
|
||||
2. 为了配置tomcat支持外部文件夹中,修改tomcat的server文件的`Host`标签
|
||||
|
||||
```bash
|
||||
sudo vi /var/lib/tomcat8/conf/server.xml
|
||||
```
|
||||
在其中添加一行新的内容`<Context path="/" docBase="/home/ubuntu/deploy/litemall-admin/dist" reloadable="true" />`
|
||||
|
||||
3. 然后,重启tomcat
|
||||
在其中添加一行新的内容
|
||||
```
|
||||
<Host>
|
||||
...
|
||||
<Context path="/" docBase="/home/ubuntu/deploy/litemall-admin/dist" reloadable="true" />
|
||||
...
|
||||
</Host>
|
||||
```
|
||||
|
||||
3. 重启tomcat
|
||||
|
||||
```
|
||||
sudo service tomcat8 restart
|
||||
@@ -405,25 +429,29 @@ cd litemall
|
||||
mvn clean
|
||||
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。
|
||||
|
||||
2. Vue项目打包
|
||||
|
||||
采用如下命令进行项目打包
|
||||
|
||||
````bash
|
||||
cd litemall/litemall-admin
|
||||
cnpm run build:prod
|
||||
````
|
||||
|
||||
此时,litemall-admin模块的dist文件夹中就是最终部署时的代码。
|
||||
此时,litemall-admin模块的dist文件夹中就是最终部署时的代码,可以先压缩,上传到云主机,再解压缩。
|
||||
|
||||
#### 1.5.3.6 项目部署运行
|
||||
|
||||
https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#deployment-service
|
||||
|
||||
1. 项目进一步打包到deploy文件夹中:
|
||||
* litemall-os-api模块编译得到的litemall-os-api-0.1.0.jar 保存到deploy的litemall-os-api文件夹中,同时重命名成litemall-os-api.jar
|
||||
* litemall-wx-api模块编译得到的litemall-wx-api-0.1.0.jar 保存到deploy的litemall-wx-api文件夹中,同时重命名成litemall-wx-api.jar
|
||||
* litemall-admin-api模块编译得到的litemall-admin-api-0.1.0.jar 保存到deploy的litemall-admin-api文件夹中,同时重命名成litemall-admin-api.jar
|
||||
* litemall-os-api模块编译得到的litemall-os-api-xxx.jar 保存到deploy的litemall-os-api文件夹中,同时重命名成litemall-os-api.jar
|
||||
* litemall-wx-api模块编译得到的litemall-wx-api-xxx.jar 保存到deploy的litemall-wx-api文件夹中,同时重命名成litemall-wx-api.jar
|
||||
* litemall-admin-api模块编译得到的litemall-admin-api-xxx.jar 保存到deploy的litemall-admin-api文件夹中,同时重命名成litemall-admin-api.jar
|
||||
* litemall-admin模块编译以后,把dist文件夹压缩,然后放到deploy的litemall-admin文件夹中。
|
||||
|
||||
2. 使用FileZilla把deploy整个文件夹上传到云主机的/home/ubuntu文件夹中
|
||||
@@ -435,12 +463,20 @@ https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#dep
|
||||
```bash
|
||||
sudo ./deploy/bin/deploy.sh
|
||||
```
|
||||

|
||||

|
||||
|
||||
5. 测试部署是否成功
|
||||
请确保litemall的Spring Boot应用模块所对应的端口已经打开;
|
||||
然后测试是否能够访问(xxx.xxx.xxx.xxx是云主机IP):
|
||||
|
||||
> http://xxx.xxx.xxx.xxx:8081/storage/index/index
|
||||
> http://xxx.xxx.xxx.xxx:8082/wx/index/index
|
||||
> http://xxx.xxx.xxx.xxx:8083/admin/index/index
|
||||
|
||||
请确保云主机的安全组已经允许相应的端口(见1.5.3.1);
|
||||
然后测试是否部署成功(xxx.xxx.xxx.xxx是云主机IP):
|
||||
|
||||
```
|
||||
http://xxx.xxx.xxx.xxx:8081/storage/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
|
||||
```
|
||||
|
||||
6. 自动上传脚本
|
||||
|
||||
为了简化步骤1和步骤2,完成了util/upload.sh脚本,用户需要设置相应的云主机IP和密钥文件路径
|
||||
BIN
doc/pic/2.png
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
BIN
doc/pic1/1-1.png
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 72 KiB |
BIN
doc/pic1/1-2.png
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 115 KiB |
BIN
doc/pic1/1-4.png
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 68 KiB |