文章目录
1-1 本章概述与服务器购买建议
- 云服务器配置与购买建议
- 安装JDK
- 安装tomcat
- 安装MariaDB
使用起来和Mysql一样
性能要比MySQL好一点 - 打包SpringBoot
- 部署第二台tomcat发布前端项目
前置必备
- 云服务器 或 本地虚拟机
- Linux系统基础
- 内网互通
1-3 CentOS7安装JDK
1.新建jdk安装目录
mkdir /usr/java
2.使用FTP工具(fileZilla)上传jdk到某目录,如下:
cd /home/software
3.解压jdk压缩包
tar -zxvf jdk-8u191-linux-x64.tar.gz
解压后的文件夹如下图:
4.把解压后的jdk文件夹移动到/usr/java
下,这个目录专门用于存放jdk
mv jdk1.8.0_191/ /usr/java/
5.配置环境变量
- 修改profile文件
vim /etc/profile
- 配置jdk环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_191
export CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
注:环境变量配置在profile文件的最末尾即可
6.刷新profile,使其生效
source /etc/profile
再次检查jdk
至此,JDK安装成功
1-4 JDK安装 - 安装前自检
购买云服务器后,厂商会提供一个公网IP和内网IP,需要使用SSH工具(SecureCrt、Xshell、Putty)连接到云服务器,随后就能在命令行中操作linux系统。
若在本地虚拟机中操作linux,只需要配置静态IP即可,比如:192.168.168.11
服务器安装JDK之前,先确保有没有默认安装JDK,执行以下命令进行检查:java -version
如果是自己在虚拟机上安装的centos7.x或者centos6.x,则会默认安装好OpenJDK,如下截图
需要卸载,卸载步骤如下:
1.检查系统安装的OpenJDK:
rpm -qa|grep openjdk -i
2.删除以上四项openjdk的安装包并且检查后显示删除完毕
rpm -e --nodeps 需要删除的软件
如果是在阿里云或者腾讯云上的centos系统,一般不会自带jdk,但是以上步骤还是建议检查下,如若发现自带jdk,建议删除后重新安装。
1-6 安装Tomcat - 部署第一台Tomcat
部署方案
安装步骤
1…使用FTP工具(fileZilla)上传tomcat到某目录,如下:
cd /home/software
2.解压tomcat压缩包
tar -zxvf apache-tomcat-9.0.24.tar.gz
解压后的文件夹如下图:
3.重命名tomcat
mv apache-tomcat-9.0.24 tomcat-frontend
4.把重命名后的tomcat文件夹移动到/usr/local
下
mv tomcat-frontend/ /usr/local/
5.进入/tomcat-frontend/bin
目录下,启动tomcat
# 进入bin目录
cd usr/local/tomcat-frontend/bin
# 启动tomcat
./startup.sh
6.验证tomcat是否安装成功(默认端口号8080)
至此,tomcat安装成功
1-7 安装Tomcat - 部署第二台Tomcat与域名配置方案
部署域名方案
- api.z.mukewang.com --后端服务,restful接口
- shop.z.mukewang.com --天天吃货门户
- center.z.mukewang.com --天天吃货用户中心
部署方案
tomcat-1 部署前端项目(后期用nginx代替,nginx可以作为发布前端发布容器)
tomcat-2 部署后端项目
MariaDB 部署数据库
安装步骤
1.解压tomcat压缩包,重命名tomcat,移动tomcat文件夹至/usr/local
目录下
# 解压
tar -zxvf apache-tomcat-9.0.24.tar.gz
# 重命名
mv apache-tomcat-9.0.24 tomcat-api
# 重命名
mv tomcat-api/ /usr/local/
注:
/usr/local
目录下有2个tomcat,tomcat-frontend是成功启动的,tomcat-api目前还没未启动,但是现在不可以启动tomcat-api,因为tomcat-api的默认端口号也是8080,启动会报端口号重复错误,所以需修改tomcat-api的端口号
2.进入tomcat-api/conf/
目录,修改tomcat配置文件
# 进入配置文件目录
cd /usr/local/tomcat-api/conf/
# 修改server.xml: 修改3个端口(访问端口、关闭端口、重定向端口)
vim server.xml
3.进入tomcat-api/bin/
目录,启动tomcat
# 进入bin目录
cd /usr/local/tomcat-api/bin/
# 启动tomcat
./startup.sh
4.验证tomcat是否安装成功(配置的端口号8088)
至此,tomcat安装成功
1-8 安全组端口开放
1-9 MariaDB - 跟着官方文档下载rpms
MariaDB主要有三种安装方式
- 源码安装,有点繁琐,不推荐
- yum在线安装,由于镜像在国外,下载速度十分缓慢,本地安装花了将近2个小时,而云服务完全就是下载不了直接报错
- rpm离线安装,这个方式比较方便,推荐,不论是mariaDB还是mysql都可以用这样的方式进行安装
注: window系统本地已安装mysql,再安装mariadb时会自动替换本地的mysql
下载rpm包
2.下载如下7个rpm包,如下所示
依赖:
- jemalloc-3.6.0-1.el7.x86_64.rpm
- jemalloc-devel-3.6.0-1.el7.x86_64.rpm
- galera-4-26.4.4-1.rhel7.el7.centos.x86_64.rpm
核心包:
- MariaDB-client-10.4.24-1.el7.centos.x86_64.rpm
- MariaDB-compat-10.4.24-1.el7.centos.x86_64.rpm
- MariaDB-common-10.4.24-1.el7.centos.x86_64.rpm
- MariaDB-server-10.4.24-1.el7.centos.x86_64.rpm
参考:
MariaDB官网https://mariadb.org
MariaDB官方安装文档
rpm包下载地址-阿里云镜像
腾讯云服务器 离线安装最新稳定版MariaDB 10.2.6
1-11 MariaDB - 离线安装
1.使用FTP工具上传安装包至/home/software
目录下
2.按顺序安装依赖环境包
yum install rsync nmap lsof perl-DBI nc
rpm -ivh jemalloc-3.6.0-1.el7.x86_64.rpm
rpm -ivh jemalloc-devel-3.6.0-1.el7.x86_64.rpm
3.卸载冲突的mariadb-libs
# 先搜索
rpm -qa | grep mariadb-libs
# 后删除
rpm -ev --nodeps mariadb-libs-5.5.35-3.el7.x86_64
原因:安装MaridDB核心包时报错
4.安装galera
环境
rpm -ivh galera-4-26.4.4-1.rhel7.el7.centos.x86_64.rpm
原因:安装MaridDB核心包时报错
5.安装boost-devel
依赖环境(此步骤在安装 galera报错时需要)
yum install boost-devel.x86_64
6.安装RPM-GPG-KEY - 导入MariaDB的key
rpm --import http://yum.mariadb.org/RPM-GPG-KEY-MariaDB
7.安装libaio
(此步骤在安装10.4.8时需要)
wget http://mirror.centos.org/centos/6/os/x86_64/Packages/libaio-0.3.107-10.el6.x86_64.rpm
rpm -ivh libaio-0.3.107-10.el6.x86_64.rpm
8.安装MaridDB的4个核心包
rpm -ivh MariaDB-common-10.4.24-1.el7.centos.x86_64.rpm MariaDB-compat-10.4.24-1.el7.centos.x86_64.rpm MariaDB-client-10.4.24-1.el7.centos.x86_64.rpm MariaDB-server-10.4.24-1.el7.centos.x86_64.rpm
1-12 MariaDB - 配置
安全配置
安装完毕MariaDB后还没完,还需要配置数据库,在命令行中执行如下代码用以启动mysql服务(MariaDB就是mysql的分支,所以服务名是一样的,如果本地有mysql可以无缝切换或安装)
service mysql start
# MariaDB代替了mysql数据库
service mariadb start
启动成功后运行如下命令进行安全配置:
mysql_secure_installation
1.输入当前密码,初次安装后是没有密码的,直接回车
2.询问是否使用unix_socket
进行身份验证:n
3.为root设置密码:y
4.输入root的新密码:root
5.确认输入root的新密码:root
6.是否移除匿名用户,这个随意,建议删除:y
7.拒绝用户远程登录,这个建议开启:n
8.删除test库,可以保留:n
9.重新加载权限表:y
当你看到Thanks for using MariaDB!
这句话,表明配置成功!
远程连接配置
客户端不能远程连接,原因是我们没有赋予权限,执行以下命令:
# 输入密码登录MariaDB控制台
mysql -u root -p
# 赋予root用户远程连接权限
grant all privileges on *.* to 'root'@'%' identified by 'root密码';
# 刷新
flush privileges;
配置权限后,可以使用远程客户端连接数据库服务了!
至此,MariaDB安装配置完毕!
注: 建议生产环境上的3306端口改为其他的,比如3307 3308都行,另外只有再远程使用的时候才开放安全组的数据库端口,如果项目和数据库在同一个服务器上,或者在同一个地域可用内网访问的话,关闭端口即可,否则需要开启。
1-13 SpringBoot多环节部署profile
多环境部署
- 开发环境 – dev
- 测试环境 – test
- 生产环境 – prod
profile 提供多环境支持
- application.yml -> 主配置文件
- application-{name}.yml -> 环境配置(挂件)
- 激活多环境 -> spring.profiles.active:{name}
具体配置
1.修改application.yml
2.新增application-dev.yml、application-prod.yml配置文件
3.启动
dev环境:
prod环境:
1-14 梳理不同环境的配置
部署域名方案
profiles 多环境配置梳理:
1. 数据源配置
1.1 url 根据自身情况去修改为 localhost 或者 内网IP(集群或者分布式系统,一定要使用内网IP)
1.2 密码 root 改为 你自己的密码
2. mybatis 日志打印
dev 可以打印
test 可以打印
prod 无需打印
3. 图片保存目录 和 图片服务请求路径配置
/workspaces/images/foodie/faces
http://api.z.mukewang.com:8088/foodie-dev-api/foodie/faces
4. 从支付中心回调天天吃货后端服务的回调地址
http://api.z.mukewang.com:8088/foodie-dev-api/orders/notifyMerchantOrderPaid
打包方式:
1. jar
服务化的概念,后续接触springcloud,所有的服务打包都是以jar的形式存在
2. war
应用程序的概念,也可以向外提供服务和接口
1-15 SpringBoot打包war
1.修改打包形式
在foodie-dev-api模块的pom.xml设置
<!-- 打包war [1] -->
<packaging>war</packaging>
2.移除嵌入式tomcat插件
在foodie-dev模块的pom.xml找到spring-boot-starter-web
依赖节点,修改如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 打包war [2] 移除自带内置tomcat-->
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
3.添加servlet-api的依赖
在foodie-dev模块的pom.xml添加依赖,下面两种方式都可以,任选其一:
<!-- 打包war [3] 添加依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>8.0.36</version>
<scope>provided</scope>
</dependency>
4.修改启动类,并重写初始化方法
我们平常用main方法启动的方式,都有一个App的启动类,代码如下:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
我们需要类似于web.xml的配置方式来启动spring上下文了,在Application类的同级添加一个SpringBootStartApplication类,其代码如下:
// 打包war [4] 增加war的启动类
// 启动类 继承 SpringBootServletInitializer 并重写 configure 方法
public class SpringBootStartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(Application.class);
}
}
5.打包部署
在项目根目录下(即包含pom.xml的目录),在命令行里输入:
mvn clean package -Dmaven.test.skip=true即可, 等待打包完成,出现[INFO] BUILD SUCCESS即为打包成功。
然后把target目录下的war包放到tomcat的webapps目录下,启动tomcat,即可自动解压部署。
最后在浏览器中输入http://[ip]:[端口号]/[打包项目名]/
参考:
SpringBoot打war包
1-16 上传发布war
1.使用ftp工具上传war包至/usr/local/tomcat-api/webapps
目录
2.启动tomcat,即可自动解压部署.
3.浏览器中输入http://[ip]:[端口号]/[打包项目名]/
1-17 发布前端项目
1.修改foodie-shop和foodie-center的api.js
serverUrl: "http://192.168.168.11:8088/foodie-dev-api", // 接口服务接口地址
paymentServerUrl: "http://payment.t.mukewang.com/foodie-payment", // 支付中心服务地址
shopServerUrl: "http://192.168.168.11:8080/foodie-shop/", // 门户网站地址
centerServerUrl: "http:///192.168.168.11:8080/foodie-center/", // 用户中心地址
cookieDomain: "", // cookie 域
2.上传前端项目至Linux服务器/usr/local/tomcat-frontend/webapps
目录下
3.启动tomcat-frontend
4.解决跨域问题
修改foodie-dev的CorsConfig,重新打包更新部署
5.浏览器中输入http://[ip]:[端口号]/[打包项目名]/
1-18 解决Cookie异常,测试支付订单流程
问题
注册新用户发现如下问题: 注册成功,但是首页没有显示"欢迎,用户名",说明没有该用户的cookie信息
F12发现Cookies里确实没有用户的cookie信息
排查问题
1.打开FTP工具,找到后端项目tomcat-api的日志目录,下载catalina.out查看日志异常。
前端项目中设置了cookieDomain,需要把信息放到这个域里面,前端才能拿到这个信息,但是现在后端是设置不了的,前端可设置
cookieDomain: ".z.mukewang.com;", // cookie 域
报错原因是:在tomcat 8.5版本之后, CookieProcessor 做了一次更新, 对 .xxx.xx 这种形式的域无法识别
解决
解决方案一:后端修改 " .xxx.xxx " -> " xxx.xxx"
会导致前后端cookie域不一致,前端还是 “.xxx.xxx”,会让新接触项目的人很迷惑,不知道为什么会出现这种"前后端cookie域不一致" ,当然,实际上是没问题的。推荐方案二
解决方案二:替换CookieProcessor
1.修改usr/local/tomcat-api/conf/
目录下的contxet.xml:
标签中添加额外数据
使用老版的LegacyCookieProcessor
替代新版的Rfc6265CookieProcessor
# 新版org.apache.tomcat.util.http.Rfc6265CookieProcessor
# 替换为老版处理器org.apache.tomcat.util.http.LegacyCookieProcessor
<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor"/>
2.重启tomcat
注意:我在cookieDomain设置的是IP地址,是没有这个问题的