一 、 Login
首先,了解如何登录到远程服务器。
我百度了一下登录腾讯云远程服务器,有很多登录方法
1. 标准登录方法登录
操作系统: Windows, Linux or Mac OS
这个方法是直接点击我的云服务器控制台的login按钮,登录成功后,打开一个tab页面。在这里,您可以使用命令行在服务器上执行一些操作,因此掌握Linux常用命令是一项基本技能。. 我的 这篇博客也会记录我的linux学习之路
这种方法有很多优点,在官方文档中有描述,比如复制-粘贴 等等.这对我们linux新手来说非常有用。
1》 linux系统,rz / sz命令的安装方法如下: # apt-get install lrzsz
2》 sz命令将文件发送到本地:#sz filename
rz命令将文件本地上传到服务器# rz 执行此命令后,只需在弹出框中选择要上传的文件。
2. 使用第三方软件连接登录
** 操作系统: ** Windows
有很多远程登录软件,比如: PuTTY (免费), Xshell (破解) … 安装完成后,如何将相应的百度软件连接到远程服务器就不需要了。连接完成后,服务器也是从命令行操作的,所以您仍然需要掌握Linux命令。
二 环境准备
1.JDK
百度共有两种方式:yum安装和安装包安装。
yum安装命令:
#yum -y list java* //(可略)查看可安装java版本,选择带-devel后缀的才是jdk
#yum install -y java-1.8.0-openjdk-devel.x86_64 //安装jdk8
#java -version //安装完成查看版本
2、tomcat
这种好像没有没有yum直接安装的,都是先下载tomcat的安装包 (注意Linux的安装包后缀是.gz),然后上传到服务器,最后进行解压的。
下载就不说了,别下错就行;上传到服务器我使用的是在Xshell中使用rz
命令弹出弹窗后选择文件上传;在此之前你也许需要下载rz/sz
命令,下载命令如下:yum -y install lrzsz
当然你还可以直接使用wget http:/xxx
命令在linux下直接下载安装包,但你得知道国内的镜像地址,直接使用国外的太慢,我没找到所有没用。
注:
1、rz与sz只适合小的文件传输,大文件还是使用Filezilla与xftp等工具进行传输;
2、只能传输单个文件,而不能传输文件夹;
3、不是所有工具都支持rz与sz,必须支持ZModem协议才行,例如putty不能使用rz与sz。
最后选择合适的文件夹进行解压,
#mkdir tomcat //创建一个目录
#mv apache-tomcat-9.0.8.tar.gz /tomcat //移动压缩包到tomcat文件夹下
#tar -zxvf apache-tomcat-9.0.8.tar.gz //解压
//下面打开tomcat
#cd tomcat/apache-tomcat-9.0.8/bin //切换到bin目录
#./startup.sh //打开这个文件,打开后提示tomcat start即表示成功打开tomcat
3、mysql
这里网上有很多的安装方式,步骤大不相同,所以推荐去了解一linux安装软件的几种方式:linux安装软件
一、使用命令检查是否有mysql数据库,或者删除残留
如果有数据库,并且正常使用,那么可以忽略此步。如果在此步骤中出现错误,可以重新安装。在重新安装mysql之前,您必须确保清理了以前的安装。使用# find / -name mysql等命令检查、卸载、删除原本的数据库,或者残留的文件。
使用命令检查是否有mysql数据库,或者删除残留的三种方式 :
1 、# find / -name mysql //找到包含mysql的目录和名称
2 、# rpm -qa | grep mysql //找到包含mysql的目录
3、# yum remove mysql mysql - server mysql - libs //yum命令移除
二、 安装mysql
方式1、 使用命令直接下载源码包然后解压
下载:
wget HTTPS://dev.mysql.com/get/downloads/mysql-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
解压:
tar -xvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz (后面可以跟解压目录)
方式2、 使用rpm包安装
- 下载mysql rpm包
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
- rpm安装mysql-server
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
方式3、 yum源安装
使用命令# yum list | grep mysql
或 # yum -y list mysq
l查看一下yum库下是否有mysql-server,如果有直接 # yum install mysql-community-server
。如果没有,继续下面步骤:
# yum install mysql-community-server (如此命令不能用,使用下面的:)
# yum install -y mysql mysql-devel mysql-server
(注意mysql-devel一定要装上,否则无法实现编译其功能)
安装完成之后,执行mysql登录命令# mysql -u root -p
( 如果还是不行,关闭服务器,重新进入再执行# mysql -u root )
设置密码:
mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:
# grep 'temporary password' /var/log/mysqld.log
登录mysql更改root密码
初始数据库是没有密码的,输入用户名就可以进入。(为了安全 ,还是设置一个) 使用命令设置密码: # set password for ‘root’@‘localhost’ = password(‘填写你想设置成的密码’); 至此数据库已安装完成。
启动服务
systemctl start mysqld部署项目访问数据库可能还需要配置防火墙端口号等
三、部署项目
部署项目就是把项目打包好放进服务器中运行起来,首先我们要做的就是打包项目,打包项目就是把项目变成一个整体,运行它不需要再进行配置了。
首先把我遇到的一些疑问解决下
1、jar包和war包的区别:
jar(Java Archive,Java 归档文件) 是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。jar文件包括java普通类、资源文件和普通文件,在maven中即是打包src/main/java和src/main/resources资源文件夹下的所有文件,
里面都是一些class文件,在声明了Main_class之后是可以用java命令运行的.。在打包的时候会自动生成MATA-INF文件夹,用于存储maven的pom信息和MANIFEST.MF文件。
(jar包一般用于开发阶段,jar包不包含wabapp目录)
jar包中的文件结构如图:
war(Web application Archive) 文件包含全部的web应用程序,即 所有的java类,配置信息和jsp、js等静态资源,是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块。
但是需要注意war引用war的时候会将应用war的资源全部拷贝到当前war的相同文件下,重名的文件会被替换。(一般用于产品发布阶段,有包含wabapp目录,)
war包中的文件如下:
如果一个Web应用程序的目录和文件非常多,那么将这个Web应用程序部署到另一台机器上,就不是很方便了,我们可以将Web应用程序打包成Web 归档(WAR)文件,这个过程和把Java类文件打包成JAR文件的过程类似。利用WAR文件,可以把Servlet类文件和相关的资源集中在一起进行发布。在这个过程中,Web应用程序就不是按照目录层次结构来进行部署了,而是把WAR文件作为部署单元来使用。
2、打包项目相关:
一、利用IDE手动打包
这种根据使用的IDE进行百度,这种打包有点小复杂,需要很多步骤才能完成一个可运行的打包,所以我暂时没有使用。
二、maven打包:
命令方式:
maven常用打包命令
1、mvn compile 编译,将Java 源程序编译成 class 字节码文件。
2、mvn test 测试,并生成测试报告
3、mvn clean 将以前编译得到的旧的 class 字节码文件删除
4、mvn pakage 打包,动态 web工程打 war包,Java工程打 jar 包。
5、mvn install 将项目生成 jar 包放在仓库中,以便别的模块调用
6、mvn clean install -Dmaven.test.skip=true 抛弃测试用例打包(常用)
鼠标方式: 我用的springboot项目直接使用的自带的maven插件,打包直接点击就是,war包的区别就是需要在pom文件中下图的位置加上<packaging>war</packaging>
。
当maven项目除了pom中的依赖还要依赖其他jar包时
3、运行java web有两种方式:当使用springboot打包出jar包时,这个jar包可以直接 运行java -jar .jar运行,另一种是把 .jar移动到 tomcat/webapps 中,二者的区别是什么? 解答如下:
①对于springboot打包出来的jar包中已经包含了嵌入式tomcat服务器的依赖项,在pom.xml问价中,导入的maven依赖spring-boot-starter-web中包含内嵌的tomcat容器
使用java -jar默认情况下,不会启动任何嵌入式Application Server,该命令只是启动一个执行jar mian的JVM进程,当spring-boot-starter-web包含嵌入式tomcat服务器依赖项时,执行java -jar则会启动Application Server
②对于移动到tomcat/webapps 中部署jar或war包,则是使用到外部的tomcat,这里需要注意一点,使用外部tomcat部署时,要么直接导包成war包,要么排除spring-boot-starter-web中的tomcat配置(这是重点,记住)
下面我自己总结一下:
情况一、使用java命令运行jar包:
这种方式一般用于项目中包含内嵌tomcat的情况(比如springboot项目)。
上面那种只是暂时的运行,一关闭远程连接就不能远程访问项目了。
一直运行得命令为:
# nohup java -jar xxx.jar &
# exit
情况二、把打包好的程序放进webapp下:
这种情况适用于没有内嵌tomcat的情况,即可以是jar包也可以是war包(如普通的springmvc项目,或springboot项目没有打包内嵌tomcat)。
我采用这种方法踩了很多的坑,讲一个困扰我几天的吧,我一开始没有意识到我的项目是springboot项目,他是内嵌了tomcat的,所以开始我是这样百度的 “linux服务器部署javaweb war包项目” 然后就出来了很多一样的步骤的博客,步骤都是直接把war包放进webaaps中,然后端口占用就是杀进程、改server.xml中的几个端口,可是我遇到的问题是每次杀完所有端口占用的进程后,一启动tomcat,马上端口又被占了,我每天基本都要重复用网上的方法试个几十次,差不多把我怀疑的错误点试完以后,我开始返回怀疑我的项目问题了,于是我开始搜springboot项目的部署,终于!!!恍然大悟,因为他内嵌的tomcat的问题,这些都是废话, 下面讲下怎么部署springboot项目吧:嘻嘻
首先
1、改springboot的启动类:
//继承并重写SpringBootServletInitializer 的configure()方法
public class ExamOnlineApplication extends SpringBootServletInitializer {
/**
* 继承SpringBootServletInitializer 实现configure 方便打war 外部服务器部署。
* 需要把web项目打成war包部署到外部tomcat运行时需要改变启动方式
* @param application
* @return
*/
@Override
protected final SpringApplicationBuilder configure(final SpringApplicationBuilder application) {
return application.sources(ExamOnlineApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(ExamOnlineApplication.class, args);
}
}
2、改pom.xml
<!--exclusions去除内嵌tomcat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--去掉内部tomcat后需添加-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
然后再把以前启动的target文件删除,我的就可以了,中途遇到一点问题,就是启动都有问题了,最后都是通过删除target文件解决的。
最后就可以把打包好的文件放进你的服务器tomcat下了。这就是是我的成果啦
当maven程序在执行时
mvn clean package
mvn package -Dmaven.test.skip=true -Ptest
终端还是打印出单元测试在执行,并且查看target目录,下面依然有test-classes目录,解决的过程中了解到-DskipTests和-Dmaven.test.skip=true的区别是
-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。
-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。
于是通过
mvn clean package -Dmaven.test.skip=true
解决,此时target目录下并无test-classes目录。
打开tomcat的bin下的日志文件查看tomcat报错信息命令:sh catalina.sh run
linux端口占用:
1、找到端口对应的进程的pid, 比如找到的是123 netstat -anp |grep 8080
2、关掉进程 kill -9 PID 123
当运维人员给你放开了防火墙或者访问权限的时候,例如8081,你使用telnet是不一定可以成功的,只有当8081端口启动并使用的时候,telnet才会起作用
telnet ip地址 端口号
借鉴文章:Linux系统中安装软件的几种方式
您还可参考腾讯云官方文档步骤搭建:centOS搭建javaweb项目