Browse Source

首次导入

lincl 2 years ago
parent
commit
dff5891ccd

+ 3 - 0
deploy/.gitignore

@ -0,0 +1,3 @@
/db/litemall.sql
/litemall/litemall.jar

+ 104 - 0
deploy/README.md

@ -0,0 +1,104 @@
## deploy
### 项目打包
1. 在服务器或者开发机打包项目到deploy;
    ```
    cd litemall
    cat ./litemall-db/sql/litemall_schema.sql > ./deploy/db/litemall.sql
    cat ./litemall-db/sql/litemall_table.sql >> ./deploy/db/litemall.sql
    cat ./litemall-db/sql/litemall_data.sql >> ./deploy/db/litemall.sql
    
    cd ./litemall-admin
    cnpm install
    cnpm run build:dep
    
    cd ..
    mvn clean package
    cp -f ./litemall-all/target/litemall-all-*-exec.jar ./deploy/litemall/litemall.jar
    ```
    这里的工作是:
    1. 把数据库文件拷贝到deploy/db文件夹
    2. 编译litemall-admin项目
    3. 编译litemall-all模块,同时把litemall-admin编译得到的静态文件拷贝到
       litemall-all模块的static目录
       
2. 修改litemall文件夹下面的*.yml外部配置文件,当litemall-all模块启动时会
    加载外部配置文件,而覆盖默认jar包内部的配置文件。
    例如,配置文件中一些地方需要设置成远程服务器的IP地址
    
此时deploy部署包结构如下:
* bin
存放远程服务器运行的脚本,包括deploy.sh脚本和reset.sh脚本
* db
存放litemall数据库文件
* litemall
存放远程服务器运行的代码,包括litemall-all二进制可执行包和litemall外部配置文件
* util
存放开发服务器运行的脚本,包括package.sh脚本和lazy.sh脚本。
由于是本地开发服务器运行,因此开发者可以不用上传到远程服务器。
### 项目部署
1. 远程服务器环境(MySQL和JDK1.8)已经安装好,请确保云服务器的安全组已经允许相应的端口。
2. 导入db/litemall.sql
    ```bash
    cd /home/ubuntu/deploy/db
    mysql -h localhost -u $ROOT -p$PASSWORD < litemall.sql
    ```
3. 启动服务
    ```bash
    sudo service litemall stop
    sudo ln -f -s /home/ubuntu/deploy/litemall/litemall.jar /etc/init.d/litemall
    sudo service litemall start
    ```
4. 测试是否部署成功(xxx.xxx.xxx.xxx是云服务器IP):
    ```
    http://xxx.xxx.xxx.xxx:8080/wx/index/index
    http://xxx.xxx.xxx.xxx:8080/admin/index/index
    http://xxx.xxx.xxx.xxx:8080/#/login
    ```
### 项目辅助脚本
在前面的项目打包和项目部署中都是采用手动命令来部署。
这里可以写一些脚本简化:
* util/packet.sh
在开发服务器运行可以自动项目打包
* util/lazy.sh
在开发服务器运行可以自动项目打包、项目上传远程服务器、自动登录系统执行项目部署脚本。
    
注意:
> 1. 开发者需要在util/lazy.sh中设置相应的远程服务器登录账号和密钥文件路径。
> 2. 开发者需要在bin/reset.sh设置远程服务器的MySQL的root登录账户。
    
* bin/deploy.sh
在远程服务器运行可以自动部署服务
* bin/reset.sh
在远程服务器运行可以自动项目导入数据、删除本地上传图片、再执行bin/deploy.sh部署服务。
注意:
> 开发者需要在bin/reset.sh设置远程服务器的MySQL的root登录账户。
总结,当开发者设置好配置信息以后,可以在本地运行lazy.sh脚本自动一键部署:
```bash
cd litemall
./deploy/util/lazy.sh
```
不过由于需要设置的信息会包含敏感安全信息,强烈建议开发者参考这里的deploy文件夹,
然后实现自己的deploy文件夹,妥善处置外部配置文件和脚本中的敏感安全信息!!!

+ 12 - 0
deploy/bin/deploy.sh

@ -0,0 +1,12 @@
#!/bin/bash
# 本脚本的作用是停止当前Spring Boot应用,然后再次部署
PID=$(ps -ef | grep litemall.jar | grep -v grep | awk '{ print $2 }')
if [ ! -z "$PID" ]
then
    kill $PID
fi
cd /home/ubuntu/deploy/litemall || exit 2
nohup java -jar litemall.jar > log.log 2>&1 &

+ 32 - 0
deploy/bin/reset.sh

@ -0,0 +1,32 @@
#!/bin/bash
# 本脚本的作用是重置部署环境
# 1.重置数据库
# 2.删除storage文件夹内文件
# 3.调用deploy.sh启动服务
# 注意:由于1和2的原因,请仅在开发测试阶段使用本脚本!
# 重置数据库
# i. 请在`XXXXXX`处设置相应的root密码
# ii. 同时请注意root密码放在脚本是非常危险的,因此这里仅仅是用于开发测试阶段。
ROOT=root
PASSWORD=
if test -z "$PASSWORD"
then
  echo "请设置云服务器MySQL的root账号密码"
  exit 1
fi
# 导入数据
cd /home/ubuntu/deploy/db || exit 2
mysql -h localhost -u $ROOT -p$PASSWORD < litemall.sql
# 删除storage文件夹内文件
cd /home/ubuntu/deploy/litemall/storage || exit 2
rm -f ./**
# 重新部署服务
cd /home/ubuntu/deploy/bin || exit 2
sudo ./stop.sh
sudo ./deploy.sh

+ 8 - 0
deploy/bin/stop.sh

@ -0,0 +1,8 @@
#!/bin/bash
PID=$(ps -ef | grep litemall.jar | grep -v grep | awk '{ print $2 }')
if [ ! -z "$PID" ]
then
    kill $PID
fi

+ 0 - 0
deploy/db/.gitkeep


+ 148 - 0
deploy/litemall/application.yml

@ -0,0 +1,148 @@
spring:
  profiles:
    active: none
  message:
    encoding: UTF-8
  datasource:
    druid:
      url:  jdbc:mysql://localhost:3306/litemall?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowPublicKeyRetrieval=true&verifyServerCertificate=false&useSSL=false
      driver-class-name:  com.mysql.cj.jdbc.Driver
      username:  litemall
      password:  litemall123456
      initial-size:  10
      max-active:  50
      min-idle:  10
      max-wait:  60000
      pool-prepared-statements:  true
      max-pool-prepared-statement-per-connection-size:  20
      validation-query:  SELECT 1 FROM DUAL
      test-on-borrow:  false
      test-on-return:  false
      test-while-idle:  true
      time-between-eviction-runs-millis:  60000
      filters:  stat,wall
server:
  port: 8080
logging:
  config: classpath:logback-spring.xml
pagehelper:
  helperDialect:  mysql
  reasonable: true
  supportMethodsArguments:  true
  params: count=countSql
litemall:
  # 开发者应该设置成自己的wx相关信息
  wx:
    app-id: wxa5b486c6b918ecfb
    app-secret: e04004829d4c383b4db7769d88dfbca1
    mch-id: 111111
    mch-key: xxxxxx
    notify-url: http://122.51.199.160:8080/wx/order/pay-notify
    # 商户证书文件路径
    # 请参考“商户证书”一节 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3
    key-path: xxxxx
  #通知相关配置
  notify:
    mail:
      # 邮件通知配置,邮箱一般用于接收业务通知例如收到新的订单,sendto 定义邮件接收者,通常为商城运营人员
      enable: false
      host: smtp.exmail.qq.com
      username: ex@ex.com.cn
      password: XXXXXXXXXXXXX
      sendfrom: ex@ex.com.cn
      sendto: ex@qq.com
      port: 465
    # 短消息模版通知配置
    # 短信息用于通知客户,例如发货短信通知,注意配置格式;template-name,template-templateId 请参考 NotifyType 枚举值
    sms:
      enable: false
      # 如果是腾讯云短信,则设置active的值tencent
      # 如果是阿里云短信,则设置active的值aliyun
      active: tencent
      sign: litemall
      template:
        - name: paySucceed
          templateId: 156349
        - name: captcha
          templateId: 156433
        - name: ship
          templateId: 158002
        - name: refund
          templateId: 159447
      tencent:
        appid: 111111111
        appkey: xxxxxxxxxxxxxx
      aliyun:
        regionId: xxx
        accessKeyId: xxx
        accessKeySecret: xxx
  # 快鸟物流查询配置
  express:
    enable: false
    appId: "XXXXXXXXX"
    appKey: "XXXXXXXXXXXXXXXXXXXXXXXXX"
    vendors:
      - code: "ZTO"
        name: "中通快递"
      - code: "YTO"
        name: "圆通速递"
      - code: "YD"
        name: "韵达速递"
      - code: "YZPY"
        name: "邮政快递包裹"
      - code: "EMS"
        name: "EMS"
      - code: "DBL"
        name: "德邦快递"
      - code: "FAST"
        name: "快捷快递"
      - code: "ZJS"
        name: "宅急送"
      - code: "TNT"
        name: "TNT快递"
      - code: "UPS"
        name: "UPS"
      - code: "DHL"
        name: "DHL"
      - code: "FEDEX"
        name: "FEDEX联邦(国内件)"
      - code: "FEDEX_GJ"
        name: "FEDEX联邦(国际件)"
  # 对象存储配置
  storage:
    # 当前工作的对象存储模式,分别是local、aliyun、tencent
    active: local
    # 本地对象存储配置信息
    local:
      storagePath: storage
      address: http://122.51.199.160:8080/wx/storage/fetch/
    # 阿里云对象存储配置信息
    aliyun:
      endpoint: oss-cn-shenzhen.aliyuncs.com
      accessKeyId: 111111
      accessKeySecret: xxxxxx
      bucketName: xxxxxx
    # 腾讯对象存储配置信息
    # 请参考 https://cloud.tencent.com/document/product/436/6249
    tencent:
      secretId: 111111
      secretKey: xxxxxx
      region: xxxxxx
      bucketName: xxxxxx
    # 七牛云对象存储配置信息
    qiniu:
      endpoint: http://pd5cb6ulu.bkt.clouddn.com
      accessKey: 111111
      secretKey: xxxxxx
      bucketName: litemall
swagger:
  production: true

+ 52 - 0
deploy/util/lazy.sh

@ -0,0 +1,52 @@
#!/bin/bash
# 本脚本的作用是
# 1. 项目打包
# 2. 上传云服务器
# 3. 远程登录云服务器并执行reset脚本
# 请设置云服务器的IP地址和账户
# 例如 ubuntu@122.51.199.160
REMOTE=
# 请设置本地SSH私钥文件id_rsa路径
# 例如 /home/litemall/id_rsa
ID_RSA=
if test -z "$REMOTE"
then
  echo "请设置云服务器登录IP地址和账户"
  exit 1
fi
if test -z "$ID_RSA"
then
  echo "请设置云服务器登录IP地址和账户"
  exit 1
fi
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
cd $DIR/../.. || exit 2
LITEMALL_HOME=$PWD
echo "LITEMALL_HOME $LITEMALL_HOME"
# 项目打包
cd $LITEMALL_HOME || exit 2
./deploy/util/package.sh
# 上传云服务器
cd $LITEMALL_HOME || exit 2
scp -i $ID_RSA -r  ./deploy $REMOTE:/home/ubuntu/
# 远程登录云服务器并执行reset脚本
# 这里使用tr命令,因为有可能deploy.sh和reset.sh的换行格式是CRLF,而LINUX环境应该是LF
ssh $REMOTE -i $ID_RSA << eeooff
cd /home/ubuntu/deploy/bin
cat deploy.sh | tr -d '\r' > deploy2.sh
mv deploy2.sh deploy.sh
chmod +x deploy.sh
cat reset.sh | tr -d '\r' > reset2.sh
mv reset2.sh reset.sh
chmod +x reset.sh
sudo ./reset.sh
exit
eeooff

+ 34 - 0
deploy/util/package.sh

@ -0,0 +1,34 @@
#!/bin/bash
# 请注意
# 本脚本的作用是把本项目编译的结果保存到deploy文件夹中
# 1. 把项目数据库文件拷贝到deploy/db
# 2. 编译litemall-admin
# 3. 编译litemall-all模块,然后拷贝到deploy/litemall
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
cd $DIR/../..
LITEMALL_HOME=$PWD
echo "LITEMALL_HOME $LITEMALL_HOME"
# 复制数据库
cat $LITEMALL_HOME/litemall-db/sql/litemall_schema.sql > $LITEMALL_HOME/deploy/db/litemall.sql
cat $LITEMALL_HOME/litemall-db/sql/litemall_table.sql >> $LITEMALL_HOME/deploy/db/litemall.sql
cat $LITEMALL_HOME/litemall-db/sql/litemall_data.sql >> $LITEMALL_HOME/deploy/db/litemall.sql
# 安装阿里node镜像工具
npm install -g cnpm --registry=https://registry.npm.taobao.org
# 打包litemall-admin
cd $LITEMALL_HOME/litemall-admin
cnpm install
cnpm run build:dep
# 打包litemall-vue
cd $LITEMALL_HOME/litemall-vue
cnpm install
cnpm run build:dep
cd $LITEMALL_HOME
mvn clean package
cp -f $LITEMALL_HOME/litemall-all/target/litemall-all-*-exec.jar $LITEMALL_HOME/deploy/litemall/litemall.jar