总结-19 项目部署和总结

部署

之前我们都是在本机上跑整个项目,接下来我们要将这个项目部署到服务器上然后再通过路径来访问,当然这里我们使用虚拟机CentOS进行代替。
下图是我们项目的结构,可以看到我们是使用nginx服务器来分发请求到Tomcat的,这就是所谓的反向代理,通常情况下我们会有多个Tomcat服务器,但是我们虚拟机分配的资源很少所以只有一个Tomcat服务器,Tomcat服务器就是我们项目部署的位置,我们只要将项目放到Tomcat的webapp之下即可访问到,同时为了让项目可以跑起来,我们也必须要装上JRE,即Java运行环境,Maven用于将打包的WAR包解压出来,并下载相关依赖,以及项目用到的MySQL、Redis、Kafka、Elasticsearch和Wkhtmltopdf。
项目部署结构
接下来我们就在虚拟机上安装这些必要的软件包,通常情况下我们可以使用yum安装,因为yun安装十分方便,不用我们自己配置环境变量,但是有些yun上的包有些旧,我们还是需要自己去下载较新的版本引入yun中,然后再用yun安装,当然也有些需要自己去官网下载tar.gz或者zip压缩包然后自己解压并配置环境变量。
需要下载压缩包
其中tomcat、maven、elasticsearch、elasticsearch-analysis-ik和kakfa需要我们自己下载压缩包,我们可以直接下载到/root目录下。
下载的压缩包
我们可以使用tar -zvxf xxx -C /opt 命令将文件解压到opt目录下
然后修改/etc/profile,添加PATH=$PATH:xxx/bin来配置环境变量。
yum安装
Nginx、JRE、Redis、MySQL和Wkhtmltopdf我们都可以使用yum安装,其中MySQL我们先要去官网下载8.0的rpm包,然后使用yum install xxx.rpm 的命令将rpm包安装到yum的资源库中,然后再用yum安装。
yum安装我们只要yum list xxx来查看yum资源库中的相关内容,然后使用yum install -y xxx 即可完成安装。
安装过程中的一些配置
mysql:我们使用mysql -u root -p来登录mysql并进入,然后我们需要将生成sql的语句运行来建表,其顺序是init_schema.sql -> init_data.sql -> tables_mysql_innodb.sql,其中第三个是创建quartz所需的数据表
maven:maven我们需要添加阿里云的镜像
kafka:zookeeper的后台启动命令bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
kafka的后台启动命令nohup bin/kafka-server-start.sh config/server.properties 1>/dev/null 2>&1 &
elasticsearch:elasticsearch的分词是解压到elasticsearch/plugins/ik,对于elasticsearch的配置我们需要修改cluster.name,path.data和path.logs,然后jvm.options也要修改,让elasticsearch的启动内存为256M,最大内存为512M,防止服务器奔溃。
同时elasticsearch不能用root用户启动,因此我们需要创建一个用户,并且该用户拥有tmp和opt的权限。对此我们创建了nowcoder组下名为nowcoder1的用户,然后在tmp和opt路径下使用命令chown -R nowcoder1:nowcoder *来分配权限,然后使用su - nowcoder1切换至nowcoder1用户,然后使用elasticsearch bin/elasticsearch -d命令后台启动elasticsearch。
wkhtmltopdf:使用wkhtmltopdf我们需要安装一个虚拟的GUI程序,命令如下yum install -y xorg-x11-server-Xvfb.x86_64;然后我们可以这样来生成长图xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltoimage https://www.baidu.com 1.png,由于xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltoimage这部分是不变的,因此我们可以写成一个脚本然后使用"$@"来传参,具体我们写好之后可以这样使用/opt/wkhtmltoimage.sh https:www.baidu.com 2.png
tomcat:我们首先将webapp下的其他项目全部删除,然后进入/root/community,使用命令mvn package -Dmaven.test.skip=true来得到target目录,然后进入target目录,使用mv ROOT.war /opt/apache-tomcat-9.0.30/webapps/命令将ROOT.war移动到webapps之下,然后使用命令startup.sh启动使用tomcat即可。
nginx:nginx我们主要对/etc/nginx/conf进行配置,使得请求发送给tomcat处理,主要是对conf文件的server进行配置,具体如下。
配置之后我们访问192.168.16.100(默认80端口),nginx就会监听80端口,然后将请求交给myserver函数处理,而myserver中定义了server的路径即端口8080,即tomcat来处理。

// 真实服务器
upstream myserver {
	server 127.0.0.1:8080 max_fails=3
}
// 虚拟服务器 反向代理到真实服务器
server {
        listen 80;
        server_name 192.168.16.100;
        location / {
                proxy_pass http://myserver;
        }
}

我们使用systemctl start nginx命令来启动nginx。
当然我们将项目移动到服务器之后需要对配置文件进行修改,我们可以有两份配置文件,分别对应开发阶段和服务器上线阶段,而项目本身我们只要只要修改引用的是develop配置文件还是produce配置文件即可

# profile
spring.profiles.active=produce

# logback
logging.config=classpath:logback-spring-${spring.profiles.active}.xml

具体配置
由于我们是对/进行请求处理,因此我们要将对/index的访问重定向到/上,同时我们现在只对192.168.16.100:80进行监听,因此我们需要去掉/community这一部分,所以在application.properties和js中都需要做修改,除此之外,我们还要对路径进行修改,原先存放在d:\work\data之下的都要改成\tmp之下了。
最后由于我们不再使用SpringBoot自带的Tomcat来启动项目,而tomcat有自带的main函数,因此我们项目的main函数不会被执行,我们需要通过配置来让我们项目的main函数启动,具体如下(不是很懂!!):

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class CommunityServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(CommunityApplication.class);
    }
}

同时,我们服务器使用的是mysql8.0因此对于jdbc的配置我们也需要修改,原先的5.6过旧了

# DataSourceProperties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/community?characterEncoding=utf-8&useSSL=false&serverTimezone=Hongkong
spring.datasource.username=root
spring.datasource.password=xxxxxxxxxx
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=30000

问题
最后遇到了一个问题nginx永远返回502Bad Gateway,通过查询资料发现是服务器拒绝了网络代理,需要进行如下配置/usr/sbin/setsebool -P httpd_can_network_connect true。

总结

项目构成图
项目结构
网站结构图
网站架构图

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值