前言

最近一个星期在做论坛形式的web应用,逻辑越写越多,脑子也是越写越乱,也越要越感觉SpringBootFlask的思想上好像。今天终于撸完了所有的业务逻辑,以及测试。开始部署,以下,记录部署的整个过程。😄

环境依赖

部署
部署

项目中的环境依赖如上图所述,按照步骤来, 先ssh链接服务器, 之后配置Java环境、MySQLRedisKafkaMaven。之后配置TomcatNginx。服务器使用的是Ubuntu18.04LTS

SSH

因为,ssh长时间不操作就断开,所以还是需要进行配置下

服务器配置

1、 连接SSH

ssh root@ip

2、编辑sshd_config

vim /etc/ssh/sshd_config

3、找到ClientAliveInterval,将前面的#去掉(懒得找的话,直接在最后添加即可)

# 服务器每隔60秒会给客户端发送一次保活信息包给客户端,可以将这个值设置大一点
ClientAliveInterval 60

4、找到ClientAliveCountMax,将前面的#去掉(同理)

# 服务器发出的请求如果客户端没有响应,则判断超时1次,这个参数是表示允许超时的次数。可以将这个值设置大一点。
ClientAliveCountMax 888

Java环境

oracle官网下载JDK,个人使用的是JDK8。之后将下载好的JDK上传服务器,也可以直接服务器安装,个人想试试scp命令,而且自己系统也是Ubuntu的,所有依赖环境压缩上传即可,更加方便

scp filepath/filename username@ip:/targetfilepath

譬如,下载好的本地JDK在Downloads文件夹下,想传入服务器root用户根目录下的community目录下,方便同一管理,后续的文件都传入community目录下

scp /Downloads/jdk-8u251-linux-x64.tar.gz root@ip:/community

之后使用终端登录服务器,解压JDK,配置环境(/etc/profile)

ssh root@ip -p xxx (如果更改ssh端口的话)
vim /etc/profile  (配置环境变量)

profile的配置如下

## java environment
export JAVA_HOME=/community/jdk1.8.0_251
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

之后,激活

source /etc/profile

最后,使用命令java -version检测是否配置成功

java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

MySQL

官网下载,点击MySQL APT Repository下载即可

MySQL
MySQL

之后同理,传入服务,

scp mysq-apt-config_0.8.15-1_all.deb root@ip:/community

之后通过之前ssh链接服务器的终端,安装MySQL

sudo dpkg -i mysq-apt-config_0.8.15-1_all.deb

期间有让选择MySQL的版本,个人选择的是5.7的,因为开发的时候用的是5.7。之后更新source.list,下载MySQL即可

sudo apt-get update 
sudo apt-get install mysql-server

等待片刻后,会弹出mysql一个小的配置程序界面,要求你输入下root用户的密码(输入2次)等等。安装成功之后,登录尝试下即可

mysql -u root -p

## 输出信息
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 24
Server version: 5.7.30-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

MySQL的卸载

在Ubuntu18.04系统下彻底删除MySQL的方法

Redis

在此之前安装 add-apt-respository

sudo apt-get update
sudo apt-get install software-properties-common

步骤

$ sudo add-apt-repository ppa:redislabs/redis
$ sudo apt-get update
$ sudo apt-get install redis

Kafka

Kafka官网,个人下载的是 kafka_2.12-2.5.0.tgz,前缀2.12是支持的Scala版本,本机电脑安装的Scala版本是2.12

下载之后,直接上传即可, 没有特别需要配置的东西,个人更改了log的地址,因为是服务器, 所以需要长期的运行,可执行如下命令

# zookeeper
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
# kafka server
nohup bin/kafka-server-start.sh config/server.properties  1>/dev/null 2>&1 &

Maven

[Maven 3.6.3](https://apache.website-solution.net/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz,因为墙的问题,所以自己配置了setting.xml里面的`localRepository`和`mirrors`

  <localRepository>/home/kongweikun/maven</localRepository>

        <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>

        <mirror>
            <id>uk</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://uk.maven.org/maven2/</url>
        </mirror>

        <mirror>
            <id>CN</id>
            <name>OSChina Central</name>
            <url>http://maven.oschina.net/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>

        <mirror>
            <id>nexus</id>
            <name>internal nexus repository</name>
            <url>http://repo.maven.apache.org/maven2</url>
            <mirrorOf>central</mirrorOf>
        </mirror>

同理,需要在/etc/profile中配置

## maven
export M2_HOME=/community/apache-maven-3.6.3
export PATH=${M2_HOME}/bin:$PATH

激活

Tomcat

tomcat 9.0.34,下载之后,上传服务器即可,之后解压,/etc/profile配置

## tomcat
export CATALINA_HOME=/community/apache-tomcat-9.0.34
export CLASSPATH=${CLASSPATH}:${CATALINA_HOME}/lib
export PATH=${PATH}:${CATALINA_HOME}/bin

之后,终端运行startup.sh,过一会儿用浏览器访问IP:8080查看是否能访问,不能访问的话,检查8080端口是否开发

netstat -apn | grep 8080 # 观察8080端口是否开放
netstat -ntpl # 显示网络状态, 可查看8080端口状态
ps -ef | grep tomcat # 查看tomcat进程

Nginx

sudo apt-get install nginx

安装之后,可将/etc/nginx/sites-available/的default文件删除,但记得做备份。

之后在/etc/nginx/nginx.conf中的http中添加如下部分即可

upstream myserver{
        server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
}

server {
        listen 80;
        server_name ip;
        location / {
                proxy_pass http://myserver;
        }
}

nginx命令

sudo systemctl restart nginx  # 重启nginx
systemctl status nginx # 检测nginx状态

部署

最后,所有的环境安装成功之后,就是最重要的应用程序部署了。因为,Tomcat默认启动的是其webapps下的ROOT应用。其内部的应用程序,在路由上添加对应的名字即可,但是,因为我们想直接将ip绑定到应用程序,不加前缀,所以可以用如下的方式解决:

  1. 将自己的应用打包为war包,命名为ROOT,替换为Tomcat自带的ROOT应用。将properties中的server.servlet.context-path = xxx 后面的xxx去除,然后应用中涉及到context-path的也修改

  2. pom.xml

    <!--打成war包-->
    <packaging>war</packaging>
    
    <build>
        <!--打包名字-->
        <finalName>ROOT</finalName>
        <plugins>
            xxx
        </plugins>
    </build>
    
  1. 编写CommunityServleInitializer,继承SpringBootServletInitializer

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

将自己的应用程序上传服务器,然后使用maven打包

mvn clean package -Dmaven.test.skip=true

之后将target下的ROOT.war移动到Tomcat下的webapps中即可, 然后startup.sh

over

部署成功展示
部署成功展示

看来,这几年用Ubuntu还是有成果的,最起码,服务器上部署应用不用再那么恼火了,可以快速部署了。