商业Java版 ThinkInShop

  1. 主页
  2. 文档
  3. 商业Java版 ThinkInShop
  4. 部署文档
  5. 后台核心服务部署-thinkinshop

后台核心服务部署-thinkinshop

来客推java部署文档-tomcat版

1. 准备

1.1. 本文档使用对象

产品、研发、运维人员,请仔细阅读。

1.2. 相关说明

1、当前文档介绍的是在同一台云服务器上的部署:

部分模块统一部署:网关模块、移动后台模块、管理后台模块、用户模块、订单模块、店铺模块、优惠券、商品模块

部分模块单独部署:支付模块

说明:
1、如果有模块laike-seckill 秒杀、laike-plugin-integral 积分商城、laike-plugin-presell商品预售、laike-plugin-aution竞拍、laike-memeber会员制、laike-diy插件的需要单独部署到apache-tomcat-plugins中后台核心服务部署-thinkinshop
2、laike-plugin-distribution 分销插件、laike-coupon 优惠券插件模块、laike-store-pc pc商城接口、laike-admin-mch pc店铺接口 可以和其他模块一起部署到 apache-tomcat-9.0.55

后台核心服务部署-thinkinshop

3、系统架构支持分布式部署:即可将系统的各个模块单独分别部署到不同的服务器上,目前需要修改代码的配置文件。数据库可使用集群部署,目前需要修改数据库配置信息。

1.3 需要启动的服务

1、laike-gateway 必须启动
2、laike-admin-store 管理后台必须启动的服务
3、laike-app 移动端必须启动的服务

2. 环境配置信息

名称 配置值 是否必须
Linux Centos7 推荐
Cpu/内存 4核/16G
硬盘 100g 推荐
网络 3m 推荐
Mysql 5.5-5.6
Jdk 1.8.121
Tomcat 9+
Zookeeper 3.5.9[dubbo2] 、3.7.1[dubbo3]
Redis 6.2.5 推荐
OSS 阿里云oss服务
短信服务 阿里云国内短信服务
支付配置 微信手机支付(v2)、jsapi支付(v2)、支付宝wap支付 推荐
Nginx 最新版本

3. 环境安装

3.1. jdk安装

3.1.1. 首先去官网下载jdk

jdk1.8下载

3.1.2.检查当前系统是否已经安装openJDK,如果已经安装进行卸载

3.1.3.检查openJDK是否安装命令:

$ rpm -qa|grep jdk

(如果有安装openJDK 那么除了copy-jdk-configs-3.3-2.el7.noarch文件可以不用删除。其他的openJdk全部要卸载)

$ yum -y remove  xxxx

3.1.4.进入目录

$ cd /usr/local

3.1.5.创建java安装目录:

$ mkdir /usr/local/java

3.1.6.解压安装包到 /usr/local/java目录:

$ tar -zxvf  jdk-8u162-linux-x64.tar.gz   /usr/local/java

3.1.7.配置jdk环境变量:

编辑/etc/下的profile文件: vi /etc/profile在文件末尾添加如下配置:

#jdk解压路径,根据实际情况配置
export JAVA_HOME=/usr/local/java/jdk1.8.0_121

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

保存配置文件退出(vi编辑器使用自备)

3.1.8.使/etc/profile生效 :source /etc/profile

$ source /etc/profile

3.1.9.测试jdk安装是否成功

$ java -version

3.2.zookeeper安装 [注意版本] dubbo3的请安装 zookeeper 3.7.1

3.2.1. 预备

安装java环境,并配置好java相关的环境变量$JAVA_HOME

3.2.2.下载最新的稳定版并解压—若无法下载请移步官网下载

$ wget https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz

$ tar -zxvf zookeeper-3.5.9.tar.gz

可执行文件都在bin/目录下,配置都在conf/目录下

3.2.3.配置

conf/目录下有个zoo_sample.cfg,是样板配置文件

复制一份成zoo.cfg

里面有两个比较重要的配置:

# 数据存放位置,可根据需要修改
dataDir=/var/lib/zookeeper 
# 服务监听端口,可根据需要修改
clientPort=2181

3.2.4.启动服务

$ bin/zkServer.sh start

如果未启动成功,一个检查JAVA_HOME是否正确设置,二个看端口是否冲突

【注】

1、可能需要新增一个配置项 避免和tomcat 的8080端口冲突起不动zk服务

admin.serverPort=18100【配置一个未使用的端口】

2、电脑重启后zk启动需要删掉这两个文件夹下面的version-2

dataDir=/tmp/zookeeper/data
dataLogDir=/tmp/zookeeper/log

3.3.宝塔安装(方便运维,非必须安装,建议安装)需开放端口:888、8888、80、443 部署后可以关闭

3.3.1.注册宝塔账户

注册地址:https://www.bt.cn/register.html 且需要实名认证,已经有则忽略

3.3.2.安装宝塔

登录linux 服务器系统:

Ip: 47.xxx.x.32

用户名/密码:root/laiketui.com建议使用root权限的用户

登录成功后在控制台输入:

$ yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh

后台核心服务部署-thinkinshop

出现以下信息表示安装成功宝塔。

后台核心服务部署-thinkinshop

云服务器安全组和宝塔开通以下端口

 $ iptables -I INPUT -p tcp --dport 8888 -j ACCEPT
 $ iptables -I INPUT -p tcp --dport 888 -j ACCEPT
 $ iptables -I INPUT -p tcp --dport 80 -j ACCEPT
 $ iptables -I INPUT -p tcp --dport 443 -j ACCEPT
$ iptables -I INPUT -p tcp --dport 3366 -j ACCEPT
# tomcat1用的端口
$ iptables -I INPUT -p tcp --dport 18001 -j ACCEPT
# tomcat2用的端口 laike-seckill laike-intergral
$ iptables -I INPUT -p tcp --dport 18080 -j ACCEPT

3.4.tomcat安装

部署文档会安装两个tomcat 步骤相同。启动的时候需要修改下第二个tomcat的conf/server.xml 文件中的端口。8080/8005/443这几个需要修改,两个tomcat在同一台服务器上面的端口不能使用相同的。

3.4.1.下载tomcat—若无法下载请移步官网

切换到 /usr/local/ 目录,执行wget命令:

$ wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.54/bin/apache-tomcat-9.0.54.tar.gz

3.4.2.解压tomcat

执行命令:

# -C 可以自定义解压后文件夹名,如:tomcat1、tomcat2 
tar -zxvf apache-tomcat-9.0.10.tar.gz

⚠️第二次和第一次安装的时候文件夹名不要相同。

3.4.3. 启动tomcat

进入apache-tomcat-9.0.1文件夹下的bin目录执行命令:

./start.sh

3.4.4. 修改tomcat/conf/server.xml

<Service name="Catalina">

    <Connector port="端口1" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="16443" />

3.4.5. 修改tomcat/conf/catalina.properties

 # Default list of JAR files that should not be scanned using the JarScanner
# functionality. This is typically used to scan JARs for configuration
# information. JARs that do not contain such information may be excluded from
# the scan to speed up the scanning process. This is the default list. JARs on
# this list are excluded from all scans. The list must be a comma separated list
# of JAR file names.
# The list of JARs to skip may be over-ridden at a Context level for individual
# scan types by configuring a JarScanner with a nested JarScanFilter.
# The JARs listed below include:
# - Tomcat Bootstrap JARs
# - Tomcat API JARs
# - Catalina JARs
# - Jasper JARs
# - Tomcat JARs
# - Common non-Tomcat JARs
# - Test JARs (JUnit, Cobertura and dependencies)
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar

启动后访问 http://ip:8080 出现tomcat初始化页面说明 tomcat安装成功。

重复3.4.1、3.4.2、3.4.3 、3.4.4、3.4.5 再安装一个tomcat文件。

3.5.安装mysql数据库

lkt.sql 是主库数据库脚本

xxl_job.sql 是分布式数据库脚本

3.5.1.方式一:宝塔安装mysql【推荐】

直接在宝塔的软件商店中搜索mysql 安装5.6版本,界面操作方便快捷。

后台核心服务部署-thinkinshop

3.5.2.方式二:手动安装MySQL 8.0/5.7 需要修改配置兼容 ,修改后需要重启mysql服务 (建议使用MySQL 5.5-5.6)。

# 修改my.ini 或者my.conf 修改保存 然后重启mysql 服务 
# 需要试一下其中之一只有一个可以
sql_mode  = NO_ZERO_IN_DATE,NO_ZERO_DATE
# 或
sql_mode = NO_AUTO_VALUE_ON_ZERO

3.5.2.1. 查看CentOS是否自带的MySQL,如果已经安装需要卸载。如果没有找到,则表示没有安装

$ rpm -qa | grep mysql

3.5.2.2. 在线获取CentOS7的mysql的rpm的安装文件,直接执行如下命

$ wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm

3.5.2.3. 执行安装命令

$ rpm -ivh mysql80-community-release-el7-1.noarch.rpm

3.5.2.4. 得到两个配置文件,在/etc/yum.repos.d目录下

mysql-community.repo用于指定下载哪个版本的安装包

mysql-community-source.repo用于指定下载哪个版本的源码

3.5.2.5. 修改MySQL的下载配置文件

1、进入目录命令:

$ cd  /etc/yum.repos.d

2、编辑配置文件命令:

后台核心服务部署-thinkinshop

3、把MySQL8的下载关闭,将enabled设置为0

后台核心服务部署-thinkinshop

保存修改退出。

3.5.2.6. 在当前目录/etc/yum.repos.d下执行下面的命令,开始在线下载:客户端,服务器端,开发的工具包。

在线下载安装命令介绍:yum(全称为 Yellow dog Updater, Modified)作用:用于自动从服务器上下载相应的软件包,自动安装,并且自动下载它的依赖包。

1、进行在线下载安装mysql命令

$ yum -y install mysql-community-client mysql-community-server mysql-community-devel

后台核心服务部署-thinkinshop

2、使用rpm命令,可以查询到mysql已经安装好的包

$ rpm -qa |grep mysql

后台核心服务部署-thinkinshop

3.5.2.7. 启动MySQL服务并登录

1、启动mysql的服务

$ systemctl start mysqld

2、将mysql加到系统服务中并设置开机启动

$ systemctl enable mysqld

3、登录mysql,root用户默认没有密码

$ mysql -uroot

后台核心服务部署-thinkinshop

4、在mysql中修改自己的密码

后台核心服务部署-thinkinshop

3.5.2.8. 设置远程访问权限、开放端口号

1、开启mysql的远程登录权限,默认情况下mysql为安全起见,不支持远程登录mysql,所以需要设置开启,并且刷新权限缓存。远程登录mysql的权限登录mysql后输入如下命令:

grant all privileges on . to ‘root’@’%’ identified by ‘root’;
flush privileges;

后台核心服务部署-thinkinshop2、开放Linux的对外访问的端口3306

#开放的端口永久保存到防火墙

$ firewall-cmd --zone=public --add-port=3306/tcp --permanent

#重启防火墙

$ systemctl restart firewalld

后台核心服务部署-thinkinshop

3.6.安装redis

3.6.1.方式一:宝塔安装redis【推荐】

在宝塔软件商店搜索redis 点击列表操作项的安装进行安装,等待安装结束。下图是已经安装的出现更新、设置、卸载

后台核心服务部署-thinkinshop

3.6.2.方式二:手动安装redis

准备:https://redis.io/download 下载redis稳定版本

后台核心服务部署-thinkinshop一、安装redis-6.2.5.tar.gz:

1、上传附件redis资源

redis-6.2.5.tar.gz

2、解压

$ tar xzvf redis-6.2.5.tar.gz

3、安装

$ cd redis-6.2.5

$ make

$ cd src

$ make install PREFIX=/usr/local/redis

4、移动配置文件到安装目录下

$ cd ../

$ mkdir /usr/local/redis/etc

$ mv redis.conf /usr/local/redis/etc

5、配置redis为后台运行

# 将daemonize no 改成daemonize yes
$ vi /usr/local/redis/etc/redis.conf

6、将redis加入到开机启动

# 在里面添加内容:/usr/local/redis/bin/redis-server                     /usr/local/redis/etc/redis.conf (意思就是开机调用这段开启redis的命令)
$     vi /etc/rc.local

7、开启redis 服务

# 启动redis
$ ./redis-server /usr/local/redis/etc/redis.conf

3.7.配置信息

3.7.1.配置端口信息

后台核心服务部署-thinkinshop后台核心服务部署-thinkinshop

整体配置信息修改示意图 没有购买的模块请忽略【需要启动的模块也在图里】

后台核心服务部署-thinkinshop后台核心服务部署-thinkinshop

后台核心服务部署-thinkinshop

laike-xxxx    #模块名
├── laike-xxxx.iml 
├── mvnw
├── mvnw.cmd
├── pom.xml    #maven构建文件
├── src    #源码文件
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── laiketui
│   │   │           └── xxxx    #模块名
│   │   │               ├── LaikeXxxxApplication.java    #模块启动类
│   │   │               ├── common    #模块内通用文件夹
│   │   │               │   ├── consts    #模块内常量文件夹
│   │   │               │   └── uitls    #模块帮助类文件夹
│   │   │               ├── controller    #控制层代码
│   │   │               └── service    #服务层代码 
│   │   └── resources
│   │       ├── application.yml    #模块配置文件
│   │       ├── logback-spring.xml    #日志配置文件
│   │       ├── static    #静态资源
│   │       └── templates    #静态模版
│   └── test    #测试代码
└── target    #模块编译后文件存放文件夹

3.7.2.通用配置-数据库配置

开发环境:laike-core: ../resource/application-dev.yml
生产环境:laike-core: ../resource/application-prod.yml

druid:
 allow:
  ip: 127.0.0.1
 login:
  user_name: root
  password: laiketui18

spring:
 devtools:
  restart:
   enabled: false
 jmx:
  enabled: false
 http:
  encoding:
   force: true
   charset: UTF-8
   enabled: true
   #数据库配置开始
 datasource:
  driver-class-name: com.mysql.cj.jdbc.Driver
  url: jdbc:mysql://localhost:3306/db_name?useUnicode=true&autoReconnect=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false
   username: root
   password: xxxxx
    #数据库配置结束
  type: com.alibaba.druid.pool.DruidDataSource
  initialSize: 1
  minIdle: 1
  maxIdle: 5
  maxActive: 20
  maxWait: 60000
  timeBetweenEvictionRunsMillis: 60000
  minEvictableIdleTimeMillis: 300000
  validationQuery: SELECT 1 FROM DUAL
  testWhileIdle: true
  testOnBorrow: false
  testOnReturn: false
  poolPreparedStatements: true
  filters: stat,wall
  maxPoolPreparedStatementPerConnectionSize: 20
  connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
#redis配置开始
redis:
  database: 0
    host: 127.0.0.1
    port: 6379
    password: 123456
# 数据库配置结束
lettuce:
   pool:
    #连接池中的最大空闲连接 默认8
        max-idle: 100
        # 连接池中的最小空闲连接 默认0
        min-idle: 0
    # 连接池最大连接数 默认8 ,负数表示没有限制
        max-active: 20
    # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1
        max-wait: -1
      timeout: 30000
logging:
 level:
  com:
   laiketui: debug

3.7.3.网关配置

laike-gateway:网关配置
../resources/application.yml
../resources/application-dev.yml #开发环境
../resources/application-pord.yml #生产环境

laike-gateway    #模块名
├── src    #源码文件
│   ├── main
│   │   ├── java
│   │   └── resources
│   │       ├── application.yml    #模块配置文件
│   │       ├── application-dev.yml    #模块配置文件
│   │       ├── application-prod.yml    #模块配置文件

修改:

server:
    # 【修改】http服务注册端口;若独立部署时需要与tomcat的配置server.xml中的对外访问端口一致;如果被占用则需要    修改成其他端口!!
  port: 18001
        # 【修改】
  tomcat:
    uri-encoding: UTF-8
  ssl:
    enabled: false
druid:
  allow:
    ip: 127.0.0.1
  login:
    user_name: root
    password: 1234321
dubbo:
  application:
    name: laike-gateway
  registry:
    id: zookeeper-registry
    protocol: zookeeper
    address: 127.0.0.1:2181
  protocol:
    name: dubbo
        # 【修改】dubbo服务端口,如果被占用则需要修改成其他端口!!
    port: 20888
        # 【修改】
    accesslog: dubbo-access.log
  provider:
    retries: 2
    timeout: 3000
  monitor:
    protocol: registry

spring:
  jmx:
    enabled: false
  application:
    name: laike-gateway
  resources:
    static-locations: classpath:/static/
  devtools:
    restart:
      enabled: false
  mvc:
    static-path-pattern: /gw/images/**
  multipart:
    max-file-size: 10MB
    max-request-size: 30MB
    file-size-threshold: 1
    # 上传文件的临时目录
    location: /upload
  http:
    encoding:
      force: true
      charset: UTF-8
      enabled: true
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
# 【修改】网关链接的数据配置信息开始!!
    url: jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&zeroDateTimeBehavior=convertToNull
    username: root
password: xxxxxxxxxx
# 【修改】网关链接的数据配置信息结束!!
    type: com.alibaba.druid.pool.DruidDataSource
    initialSize: 1
    minIdle: 1
    maxIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: true
    testOnReturn: false
    poolPreparedStatements: false
    filters: stat,wall
    maxPoolPreparedStatementPerConnectionSize: 20
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
  redis:
    database: 0
        # 【修改】网关redis配置开始!! 
    host: 127.0.0.1 
    port: 6379 
    password: 1234567
        # 【修改】网关redis配置结束!!
    connTimeout: 10000
    CachingTime: 900
    # 每次释放连接的最大数目,默认3
    numTestsPerEvictionRun: 1024
    lettuce:
      pool:
        # 连接池中的最大空闲连接 默认8
        max-idle: 1000
        # 连接池中的最小空闲连接 默认0
        min-idle: 10
        # 连接池最大连接数 默认8 ,负数表示没有限制
        max-active: 100
        # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1
        max-wait: -1
    messages:
      fallbackToSystemLocale: false
      basename: i18n/tips
      encoding: utf-8
  messages:
    basenames: i18n/tips
    encoding: UTF-8
logging:
  config: classpath:logback-spring.xml
  level:
    com:
      laike: debug

日志配置:

laike-xxxx    #模块名
├── src    #源码文件
│   ├── main
│   │   ├── java
│   │   └── resources
│   │       ├── logback-spring.xml    #日志配置文件
修改:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
        <!--  【修改】日志文件记录位置  --> 
    <property name="logBase" value="/var/log/laike/gateway/logs/" />
    <!-- 定义日志存储的路径,不要配置相对路径 -->
    <property name="FILE_PATH" value="${logBase}gw.%d{yyyy-MM-dd}.%i.log" /> 
    <!-- 控制台输出日志 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 按照上面配置的LOG_PATTERN来打印日志 -->
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender> 
    <!--每天生成一个日志文件,保存10天的日志文件。rollingFile是用来切分文件的 -->
    <appender name="FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${FILE_PATH}</fileNamePattern> 
                        <!--  修改 配置保留最近多少天的日志  --> 
            <maxHistory>10</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
              <!-- 日志文件的最大大小 -->
                         <!--  【修改】配置日志文件大小  -->     
                        <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <!-- project default level -->
    <logger name="src" level="INFO" />

    <!-- 日志输出级别 常用的日志级别按照从高到低依次为:ERROR、WARN、INFO、DEBUG。 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

3.7.4. 其他模块配置

其他模块包括:用户、商品、订单、店铺、优惠券、支付、移动端、管理后台、分销、秒杀

签到等

配置文件位置如下:


laike-xxxx    #模块名
├── src    #源码文件
│   ├── main
│   │   ├── java
│   │   └── resources
│   │       ├── application.yml    #模块配置文件
│   │       ├── application-dev.yml         #开发环境配置文件
│   │       ├── application-prod.yml    #生产环境配置文件
server:
  #配置成和tomcat端口一致(war部署)
    #【修改】http服务注册端口需要和所在tomcat的server.xml 对外端口配置一致!!
    # port: 18002
  port: 18001
  ssl:
    enabled: false
  tomcat:
    uri-encoding: UTF-8
  servlet:
    # 当部署到同一个tomcat中的webapp 里面的时候 context-path 需要修改成跟webapp中的文件名同名;
    # 如果没有修改则默认取tomcat中的文件夹名称 作为contextpath的默认值
    context-path: /user

#http服务所在的内网/或外网节点ip
node:
    #【修改】http服务所在IP地址,默认本机!!
  ip: 127.0.0.1

dubbo:
  application:
    name: laike-user
  registry:
    id: zookeeper-registryapplication.yml
    protocol: zookeeper
    address: 127.0.0.1:2181
  protocol:
    name: dubbo
        #【修改】dubbo服务服务的端口,若被占用需要更换!!
    port: 20889
    accesslog: dubbo-access.log
  provider:
    retries: 0 # 远程服务调用重试次数, 不包括第一次调用, 不需要重试请设为0
    timeout: 600000 # 远程服务调用超时时间(毫秒)
    delay: -1 # 延迟注册服务时间(毫秒)- , 设为-1时, 表示延迟到Spring容器初始化完成时暴露服务
    filter: -exception,dubboExceptionFilter # 服务提供方远程调用过程拦截器名称, 多个名称用逗号分隔
  monitor:
    protocol: registry

spring:
  profiles:
    active: common
  jmx:
    enabled: false
  redis:
        # 【修改】redis配置!!
    database: 0
    host: 127.0.0.1
    port: 6379
    password: 123456
        # 【修改】redis配置结束!!
    lettuce:
      pool:
        # 连接池中的最大空闲连接 默认8
        max-idle: 8
        # 连接池中的最小空闲连接 默认0
        min-idle: 0
        # 连接池最大连接数 默认8 ,负数表示没有限制
        max-active: 8
        # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1
        max-wait: -1
    timeout: 30000 
logging:
  config: classpath:logback-spring.xml
  level:
    com:
      laiketui: info

日志配置:

位置


laike-xxxx    #模块名
├── src    #源码文件
│   ├── main
│   │   ├── java
│   │   └── resources
│   │       ├── logback-spring.xml    #日志配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
        <!--  【修改】日志文件记录位置,必须要存在否则启动tomcat会报错   --> 
    <property name="logBase" value="/var/log/laike/user/logs/" />
    <!-- 定义日志存储的路径,不要配置相对路径 -->
    <property name="FILE_PATH" value="${logBase}user.%d{yyyy-MM-dd}.%i.log" /> 
    <!-- 控制台输出日志 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 按照上面配置的LOG_PATTERN来打印日志 -->
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender> 
    <!--每天生成一个日志文件,保存10天的日志文件。rollingFile是用来切分文件的 -->
    <appender name="FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${FILE_PATH}</fileNamePattern>
            <!-- keep 10 days' worth of history -->
            <maxHistory>10</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 日志文件的最大大小 -->
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <!-- project default level -->
    <logger name="src" level="INFO" /> 
    <!-- 日志输出级别 常用的日志级别按照从高到低依次为:ERROR、WARN、INFO、DEBUG。 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

3.8. 上传war包

修改完代码中的配置信息后,使用开发工具将java代码打包成war包,【推荐】使用宝塔直接上传war包到tomcat1和tomcat2的webapps目录下面;或者使用其他ssh工具上传war包。然后分别启动tomcat1、2;

注意***tomcat的启动需要等待一段时间****关闭后如果发现有java进程需要手动 kill -9 java 进程ID****请区分好进程别kill错了***

3.9. nginx设置

tomcat内网IP访问;nginx代理映射请求:

3.9.1. 网关接口映射

#网关映射 不要用127.0.0.1
location /gw {
  # 网关实际访问地址
  proxy_pass http://ip:端口/gateway/gw;
  proxy_set_header host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

3.9.2.H5图片访问映射

#图片映射
location /pic {
  # 移动端图片都放在laike-app模块里面
  proxy_pass http://ip:端口/app;
  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 /app {
    proxy_pass http://ip:port/app;
    proxy_set_header host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}


#静态资源库 - 没有购买pc商城的可以不用配这个
    location /pc_images {
        alias /usr/local/imgs/;
    }

3.9.3.微信回调v2

location /wx_notify {
  proxy_pass http://ip:端口2/payment/v2/weChatNotify;
  proxy_set_header host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

3.9.4. 支付宝回调

location /zfb_notify {
  proxy_pass http://ip:端口2/payment/alipayNotify;
  proxy_set_header host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

3.9.5 若图片无法访问则注释掉以下配置


# location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
# {
#     # root "/usr/local/apache-tomcat-9.0.50/webapps/gateway/WEB-INF/classes/static";
#     # alias /usr/local/apache-tomcat-9.0.50/webapps/gateway/WEB-INF/classes/static;  
#     expires      30d;
#     error_log /dev/null;
#     access_log /dev/null;
# }

3.9.6. tomcat启动报错处理

修改:conf/catanila.properties 108行

后台核心服务部署-thinkinshop

tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar

3.9.7. tomcat的关闭需要注意:shutdown.sh 不会关闭进程 需要kill一下进程ID

3.9.8. 若启动后访问有linkageError错误则注释掉 ,删掉项目中的所有devtools

3.9.9. 访问网关出现以下提示说明网关部署成功!

http://domain|IP:port/gw、 https://domain|IP:port/gw


{"code":"5003","message":"异常请求","data":null}