前言
最近一个星期在做论坛形式的web应用,逻辑越写越多,脑子也是越写越乱,也越要越感觉SpringBoot
和Flask
的思想上好像。今天终于撸完了所有的业务逻辑,以及测试。开始部署,以下,记录部署的整个过程。😄
环境依赖
项目中的环境依赖如上图所述,按照步骤来, 先ssh链接服务器, 之后配置Java
环境、MySQL
、Redis
、Kafka
、Maven
。之后配置Tomcat
、Nginx
。服务器使用的是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下载即可
之后同理,传入服务,
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的卸载
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
<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绑定到应用程序,不加前缀,所以可以用如下的方式解决:
将自己的应用打包为war包,命名为ROOT,替换为Tomcat自带的ROOT应用。将properties中的
server.servlet.context-path = xxx
后面的xxx
去除,然后应用中涉及到context-path的也修改pom.xml
<!--打成war包--> <packaging>war</packaging> <build> <!--打包名字--> <finalName>ROOT</finalName> <plugins> xxx </plugins> </build>
编写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还是有成果的,最起码,服务器上部署应用不用再那么恼火了,可以快速部署了。