Linux(Centos)安装tomcat并且部署Java Web项目---踩坑

购买云服务器

我使用的是腾讯云, 配置:1核 1GB 1Mbps系统盘:普通云硬盘,Centos系统

登录

腾讯云提供了好几种登录方式

  1. 最简单的登陆方式是登陆控制台,点击下面的【登录】按钮,使用WebShell登录,这里就不过多介绍了

linux01.png

使用 Linux/Mac OS X 系统的电脑(使用密码登录)

  1. 打开 SSH 客户端(Mac可使用系统自带的终端)
  2. 输入ssh -q -l root -p ip(公网ip)
  3. 输入 CVM 实例密码进行登录。

使用 Linux/Mac OS X 系统的电脑(使用密钥登录)

  1. 打开 SSH 客户端(Mac可使用系统自带的终端)。
  2. 查找您云服务器关联的 SSH 密钥文件本地存放地址。(现在控制台生成SSH秘钥,并下载到本地)
  3. 您的密钥必须不公开可见,SSH 才能工作。请使用此命令:chmod 400 [密钥文件路径]。
  4. 输入命令:ssh [-i 密钥文件路径] root@ip (解释:root是账户,ip是公网ip地址)

SSH免密登陆

首先我们在自己的Linux系统上生成一对SSH Key:SSH密钥和SSH公钥.密钥保存在自己的Linux系统上。
然后公钥上传到Linux服务器.之后我们就能无密码SSH登录了.SSH密钥就好比是你的身份证明.

  • 在自己的Linux系统上生成SSH密钥和公钥
    打开终端,使用下面的ssh-keygen来生成RSA密钥和公钥.-t表示type,就是说要生成RSA加密的钥匙.
1
2
ssh-keygen -t rsa

RSA也是默认的加密类型.所以你也可以只输入ssh-keygen.默认的RSA长度是2048位.如果你非常注重安全,那么可以指定4096位的长度

1
2
ssh-keygen -b 4096 -t rsa

生成SSH Key的过程中会要求你指定一个文件来保存密钥,按Enter键使用默认的文件就行了.然后需要输入一个密码来加密你的SSH Key.密码至少要20位长度.SSH密钥会保存在home目录下的.ssh/id_rsa文件中.SSH公钥保存在.ssh/id_rsa.pub文件中.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Generating public/private rsa key pair.
Enter file in which to save the key (/home/matrix/.ssh/id_rsa):  按Enter键
Enter passphrase (empty for no passphrase):   输入一个密码
Enter same passphrase again:   再次输入密码
Your identification has been saved in /home/matrix/.ssh/id_rsa.
Your public key has been saved in /home/matrix/.ssh/id_rsa.pub.
The key fingerprint is:
e1:dc:ab:ae:b6:19:b0:19:74:d5:fe:57:3f:32:b4:d0 matrix@vivid
The key's randomart image is:
+---[RSA 4096]----+
| .. |
| . . |
| . . .. . |
| . . o o.. E .|
| o S ..o ...|
| = ..+...|
| o . . .o .|
| .o . |
| .++o |
+-----------------+
  • 将SSH公钥上传到Linux服务器,可以使用ssh-copy-id命令来完成
1
2
ssh-copy-id root@ip

linux02.png

输入远程用户的密码后,SSH公钥就会自动上传了.SSH公钥保存在远程Linux服务器的.ssh/authorized_keys文件中.
上传完成后,SSH登录就不需要再次输入密码了.但是首次使用SSH Key登录时需要输入一次SSH密钥的加密密码.(只需要输入一次,将来会自动登录,不再需要输入密钥的密码.)

使用scp命令来传送文件时也不需要输入密码

如果你是按照腾讯云的步骤来的话,登录成功后可能会继续让你分区与格式化数据盘,虽然我也扩展了数据盘,但是我发现其实没必要做这一步(主要是我按照官方的步骤一直失败,后来发现已经默认分了一个盘,而且一直处于挂载的状态,也无法卸载,就没再捣鼓),接下来就可以配置部署所需要的环境了

安装JDK(centos默认安装了yum,所以我用yum安装的JDK)

安装步骤

  • 下载tomcat linux安装包: 安装包下载地址

  • 在云服务器创建存放tomcat的文件夹,例如创建一个kencery的文件夹

    1
    2
    3
    cd /usr/local/
    mkdir kencery
    cd kencery/
  • 然后将下载的tomcat安装包复制到kencery文件夹下(可用cp命令或图形化操作)
    我用cp命令没有成功,最后用的是图形化操作,Mac版本的FileZilla,可以直接将本地的安装包拖到云服务器的kencery文件夹根目录下, 然后进行解压

1
2
3
tar -zxv -f apache-tomcat-8.0.29.tar.gz
mv apache-tomcat-8.0.29 tomcat
cd tomcat

解析完成后即可以启动tomcat,检查是否安装成功,命令如下

1
2
/usr/local/kencery/tomcat/bin/startup.sh

linux03.png

出现如上图所示信息,则表示启动成功。这时候我们可以在浏览器中使用http://ip:8080访问(注:ip为服务器外网ip),如能够显示tomcat的主页,则表示不需要进行任何操作了,如果不能显示,则需要在Linux中开放防火墙的8080端口。

Tips: 在进行这一步的时候,好多次,都不成功,可以通过下面的方式来排除问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1.请确定tomcat监听的8080端口:
Tomcat安装的目录下:
conf\server.xml,找到:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
看你的PORT是多少。
2.防火墙是否屏蔽:
在开启了防火墙时,做如下设置,开启相关端口,
修改/etc/sysconfig/iptables 文件,添加以下内容:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
设置完之后可以重启防火墙服务
(1) 重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off
(2) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop
3.安全组是否允许相应的端口(控制台->云服务器->安全组)

如果都设置成功了,访问的时候可能出现一直加载不出来的情况,首次访问的时间特别长,我就在这里遇到了坑,以为没有设置对

Linux中设置tomcat的服务器启动和关闭

  1. 完成步骤二对tomcat的安装后,接下来就可以部署项目,但是这里存在一个问题,那就是Linux的系统和重启我们每次都需要接路径并且执行命令,比较麻烦,因此我们可以设置成service的形式来实现这个功能。
  2. 执行命令:vim /etc/rc.d/init.d/tomcat ,创建脚本文件,在文件中写入如下代码,保存并且退出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash  
# /etc/rc.d/init.d/tomcat
# init script for tomcat precesses
# processname: tomcat
# description: tomcat is a j2se server
# chkconfig: 2345 86 16
# description: Start up the Tomcat servlet engine.

if [ -f /etc/init.d/functions ]; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ]; then
. /etc/rc.d/init.d/functions
else
echo -e "\atomcat: unable to locate functions lib. Cannot continue."
exit -1
fi
RETVAL=$?
CATALINA_HOME="/usr/local/kencery/tomcat" #tomcat安装目录,你安装在什么目录下就复制什么目录
case "$1" in
start)
if [ -f $CATALINA_HOME/bin/startup.sh ];
then
echo $"Starting Tomcat"
$CATALINA_HOME/bin/startup.sh
fi
;;
stop)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];
then
echo $"Stopping Tomcat"
$CATALINA_HOME/bin/shutdown.sh
fi
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
;;
esac
exit $RETVAL

给文件添加权限,使得脚本文件可以执行,命令为

1
chmod 755 /etc/rc.d/init.d/tomcat

将其添加到服务中,命令如下:

1
chkconfig --add /etc/rc.d/init.d/tomcat

然后将下面的配置文件加到tomcat中的catalina.sh文件中的最后面,命令如下:

1
vim /usr/local/kencery/tomcat/bin/catalina.sh

添加的配置如下:

1
2
3
4
export JAVA_HOME=/usr/local/kencery/javajdk   #javajdk的安装路径,使用echo $JAVA_HOME命令可以读取  
export CATALINA_HOME=/usr/local/kencery/tomcat
export CATALINA_BASE=/usr/local/kencery/tomcat
export CATALINA_TMPDIR=/usr/local/kencery/tomcat/temp

以上所有工作顺利进行并没有报错,则配置完成,输入下面命令进行验证:

1
2
service tomcat start

1
service tomcat stop

Linux中设置tomcat开机自启动

通过步骤三的设置我们可以很方便的启动和关闭tomcat,但这里存在一个问题,那就是当服务器关机重启的时候,服务不能随计算机的启动而自行启动,下面我们将tomcat服务设置为开机启动。

打开Linux设置开机启动文件,将下面的配置文件写入rc.local文件的最后,命令如下:

1
vim /etc/rc.d/rc.local

添加的配置内容如下:

1
2
3
4
5
6
export JAVA_HOME=/usr/local/kencery/javajdk  
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export CATALINA_HOME=/usr/local/kencery/tomcat/
#tomcat自启动
/usr/local/kencery/tomcat/bin/startup.sh

tomcat依赖于java的JDK,所以设置的时候将JDK也同步导入。

完成上面的设置后我们可以将CentOS关机重启一下,看tomcat是否成功自启动

给tomcat设置用户和密码登录

当tomcat安装完成之后,访问http://ip:8080即可以看到tomcat发布的网站,若要管理我们发布的网站,就需要登录tomcat,下面就进行用户名和密码的设置。

在tomcat安装包下面的conf文件下含有一个tomcat-usrs.xml文件,修改此文件即可,命令如下:

1
2
vim tomcat-users.xml

在打开的xml配置文件后面写入下面这段配置内容后,【:wq】保存并且退出即可。

1
2
3
4
<role rolename="admin-gui"/>     
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>

在这里会出现一个问题,因为tomcat-users.xml里面有注释的用户设置信息,取消注释,用文件提供的用户名和密码去访问的时候,会出现403错误,什么原因呢?这是因为我们没有指定用户所拥有的权限。如若我们现在想访问tomcat中图形化管理应用的功能,也就是Manager App,就需要指定manager-gui的权限,如果想访问host manager就必须指定admin-gui权限,故而需要上面所示的配置内容。

配置完用户名和密码之后,需要重新启动tomcat,命令如下

1
2
service tomcat stop

1
2
service tomcat start

重启服务之后,检测是否登录成功,输入用户名和密码登录进入系统,则说明登录成功

将Java Web项目发布到tomcat8.0下面并且访问展示

以上所有工作都完成之后,完美就可以将打包的JavaWeb程序发布到tomcat下即可
tomcat默认的发布web项目的目录是:webapps
将导出的war包拷贝到webapps根目录下,随之tomcat的启动,war包可以自动被解析。
然后在浏览器中输入路径链接,查询是否安装成功

参考链接

Linux系统下的ssh使用(依据个人经验总结)

SSH无密码登录:只需两个简单步骤 (Linux)

Linux(Centos)安装tomcat并且部署Java Web项目

Linux学习笔记

MacPro 利用SCP上传下载Linux服务器文件

腾讯云访问不了80端口,与8080问题

CentOS下安装JDK的三种方法

查看Tomcat配置的端口