首次使用CentOS服务器搭建Javaweb项目

一 、 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 mysql查看一下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项目

发布了44 篇原创文章 · 获赞 3 · 访问量 1362

猜你喜欢

转载自blog.csdn.net/weixin_43329639/article/details/104054806