2.12. Tomcat服务搭建配置

2.12.1. 安装tomcat

Tomcat的安装分为两个步骤:安装JDK和安装Tomcat.

安装JDK

JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK. JDK是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。所以要想运行jsp的程序必须要有JDK的支持,理所当然安装Tomcat的前提是安装好JDK.
JDK下载面页:
http://www.oracle.com/technetwork/java/javase/downloads/index.html

#Linux中使用wget下载的方法如下:
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
或
wget ftp://biguser:www.jb51.net@gw.086o2i.cn:8021/201704/tools/jdk-linux-x64.tar.gz
tar zxvf jdk-linux-x64.tar.gz
mv jdk1.8.0_131/ /usr/local/jdk1.8

设置环境变量

vim /etc/profile
在末尾输入以下内容:
export JAVA_HOME=/usr/local/jdk1.8
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

保存文件后,使其生效:
source /etc/profile
检测是否设置正确:

java -version

2.12.2. 安装Tomcat

上面介绍了那么多内容,仅仅是在为安装tomcat做准备工作而已,现在才是安装tomcat.
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.tar.gz

tar zxvf apache-tomcat-8.5.37.tar.gz
mv apache-tomcat-8.5.37 /usr/local/tomcat
#启动程序
/usr/local/tomcat/bin/startup.sh

      检查tomcat是否启动正常
    [root@web03 ~]# netstat -lntup  |grep java
    tcp6       0      0 :::8080         :::*                   LISTEN      30560/java
    tcp6       0      0 127.0.0.1:8005          :::*          LISTEN      30560/java
    tcp6       0      0 :::8009                 :::*           LISTEN      30560/java

    [root@iZ2zedrhfe7pfaztjqpsw6Z bin]# ps aux | grep tomcat    //是否有JAVA相关的进程,也可以查看监听端口
    tomcat安装完毕

Tomcat目录介绍

tomcat主目录介绍
[root@web03 ~]# cd /usr/local/tomcat
[root@web03 tomcat]# tree -L 1
.
├── bin              #存放tomcat管理脚本
├── conf             # tomcat 配置文件存放目录
├── lib              # web应用调用的jar包存放路径
├── LICENSE
├── logs             # tomcat 日志存放目录,catalina.out 为主要输出日志
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp             # 存放临时文件
├── webapps         # web程序存放目录
└── work             # 存放编译产生的.java 与 .class文件
其中: catalina.sh类似于SysV服务管理脚本,支持stop、start和configtest,但不支持restart和reload,如catalina.sh start。 startup.sh等价于catalina.sh start。 shudown.sh等价于catalina.sh stop。 configtest.sh等价于catalina.sh configtest。 daemon.sh是通过指定各种PATH参数将tomcat以daemon的方式运行,要指定的参数path较多。catalina.sh执行start也是在后台运行tomcat的,所以没有必要使用此脚本来实现daemon模式的tomcat。
### webapps目录介绍 [root@web03 tomcat]# cd webapps/ [root@web03 webapps]# tree -L 1 . ├── docs # tomcat 帮助文档 ├── examples # web应用实例 ├── host-manager # 主机管理 ├── manager # 管理 └── ROOT # 默认站点根目录
[root@iZ2zedrhfe7pfaztjqpsw6Z bin]# ./version.sh    //查看tomcat版本
    Using CATALINA_BASE:   /usr/local/tomcat
    Using CATALINA_HOME:   /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME:        /usr/local/jdk1.8/jre
    Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    Server version: Apache Tomcat/7.0.93
    Server built:   Feb 16 2019 17:13:17 UTC
    Server number:  7.0.93.0
    OS Name:        Linux
    OS Version:     3.10.0-957.5.1.el7.x86_64
    Architecture:   amd64
    JVM Version:    1.8.0_131-b11
    JVM Vendor:     Oracle Corporation
### Tomcat的管理 # 启动程序/usr/local/tomcat/bin/startup.sh # 关闭程序/usr/local/tomcat/bin/shutdown.sh 启动停止
[root@web03 ~]# /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE:   /application/tomcat
Using CATALINA_HOME:   /application/tomcat
Using CATALINA_TMPDIR: /application/tomcat/temp
Using JRE_HOME:        /application/jdk
Using CLASSPATH:       /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar
[root@web03 ~]# /usr/local/tomcat/startup.sh
Using CATALINA_BASE:   /application/tomcat
Using CATALINA_HOME:   /application/tomcat
Using CATALINA_TMPDIR: /application/tomcat/temp
Using JRE_HOME:        /application/jdk
Using CLASSPATH:       /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar
Tomcat started.
注意:tomcat未启动的情况下使用shutdown脚本,会有大量的输出信息。

Tomcat管理功能使用

cat /usr/local/tomcat/conf/tomcat-users.xml
    39 <role rolename="manager-gui"/>
    40 <role rolename="admin-gui"/>
    41 <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
    42 </tomcat-users>   # 在此行前加入上面三行

image0 image1

2.12.3. 配置tomcat

tomcat默认启动的是8080,如果你想修改为80,则需要修改server.xml文件:

vim /usr/local/tomcat/conf/server.xml

找到:

<Connector port="8080" protocol="HTTP/1.1"
修改为:
<Connector port="80" protocol="HTTP/1.1"

tomcat的虚拟主机

  <Host name="www.123.cn" appBase="/data/tomcatweb/"
      unpackWARs="false" autoDeploy="true"
      xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/data/tomcatweb/" debug="0" reloadable="true" crossContext="true"/>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       prefix="123.cn_access_log" suffix=".txt"
       pattern="%h %l %u %t &quot;%r&quot; %s %b" />

其中<Host>和</Host>之间的配置为虚拟主机配置部分,name定义域名,appBase定义应用目录。
Java的应用通常是一个jar的压缩包,将jar的压缩包放到appBase目录下面即可。
Tomcat的默认页就是在appBase目录下面的ROOT里。

创建目录和测试文件并测试

mkdir -p /data/tomcatweb
cd /data/tomcatweb/
echo "Tomcat test page." > /data/tomcatweb/1.html

#重启tomcat服务
./shutdown.sh
./startup.sh

#我们用curl访问刚创建的1.html
[root@iZ2zedrhfe7pfaztjqpsw6Z local]# curl -x 127.0.0.1:8080 www.123.cn/1.html
Tomcat test page.
## 部署开源站点(jpress) jpress官网:http://jpress.io
下载地址:https://github.com/JpressProjects/jpress

第一个里程碑:安装配置数据库

yum -y install mariadb-server
systemctl start mariadb.service

配置数据库

mysql
create database jpress DEFAULT CHARACTER SET utf8;
grant all on jpress.* to jpress@'localhost' identified by '123456';
exit

第二个里程碑:jpress站点上线

yum -y install git
cd /usr/local/tomcat/webapps/

进入 Gitee 的 JPress 发行页面进行下载

链接地址: https://gitee.com/fuhai/jpress/releases
在每个版本的发行下方,会有对应版本的下载链接,点击即可下载
mv starter-tomcat-1.0.war /usr/local/tomcat/webapps/
[root@iZ2zedrhfe7pfaztjqpsw6Z webapps]# /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@iZ2zedrhfe7pfaztjqpsw6Z webapps]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

2.12.4. Tomcat多实例配置

多虚拟主机:nginx 多个Server标签(域名,ip,端口) 进程数量固定 master+worker 多实例(多进程):同一个程序启动多次,分为两种情况:

第一种:一台机器跑多个站点;
第二种:一个机器跑一个站点多个实例,配合负载均衡

复制程序文件

cd /usr/local/src/
tar zxvf apache-tomcat-8.5.37.tar.gz
cp -a apache-tomcat-8.5.37 tomcat8_1
cp -a apache-tomcat-8.5.37 tomcat8_2

修改端口,以启动多实例。多实例之间端口不能一致

sed -i 's#8005#8011#;s#8080#8081#' tomcat8_1/conf/server.xml
sed -i 's#8005#8012#;s#8080#8082#' tomcat8_2/conf/server.xml

diff tomcat8_1/conf/server.xml tomcat8_2/conf/server.xml

将配置好的tomcat程序打包,以备之后使用

tar zcf muti_tomcat8.tar.gz ./tomcat8_1 ./tomcat8_2

启动tomcat多实例

/usr/local/tomcat8_1/bin/startup.sh
/usr/local/tomcat8_2/bin/startup.sh

netstat -tunpl| grep java
tcp        0      0 0.0.0.0:8009            0.0.0.0:*               LISTEN      3726/java
tcp        0      0 127.0.0.1:8011          0.0.0.0:*               LISTEN      4121/java
tcp        0      0 127.0.0.1:8012          0.0.0.0:*               LISTEN      4163/java
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      3726/java
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      4121/java
tcp        0      0 0.0.0.0:8082            0.0.0.0:*               LISTEN      4163/java
tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      3726/java

将每个实例的网页进行区分

echo 8081 >>/application/tomcat8_1/webapps/ROOT/index.jsp
echo 8082 >>/application/tomcat8_2/webapps/ROOT/index.jsp

在浏览器访问,进行测试 检查多实例的启动 image3 image4

2.12.5. Tomcat反向代理集群

负载均衡器说明

[root@iZ2ze2a95z0hmrb6l98sifZ ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

[root@iZ2ze2a95z0hmrb6l98sifZ ~]# uname -a
Linux iZ2ze2a95z0hmrb6l98sifZ 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@iZ2ze2a95z0hmrb6l98sifZ ~]# getenforce
Disabled

[root@iZ2ze2a95z0hmrb6l98sifZ ~]# service iptables stop

安装nginx

 安装nginx的依赖包(pcre-devel openssl-devel)
 yum install -y pcre-devel openssl-devel

 #解压软件
 tar xf nginx-1.10.2.tar.gz
 #创建管理用户 www
useradd -M -s /sbin/nologin www

cd nginx-1.10.2
./configure --prefix=/application/nginx-1.10.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
编译参数说明:

 --prefix           //表示指定软件安装到哪个目录中,指定目录不存在会自动创建
 --user/--group      //nginx工作进程由哪个用户运行管理
 --with-http_stub_status_module   //启动nginx状态模块功能(用户访问nginx的网络信息)
 --with-http_ssl_module           //启动https功能模块

#通过软件编译过程中的返回值是否正确,确认配置是否正确
echo $?
0

make && make install

#创建软连接
[root@iZ2ze2a95z0hmrb6l98sifZ ~]# ln -s /application/nginx-1.10.2/ /application/nginx

#精简化nginx.conf 主配置文件内容
[root@iZ2ze2a95z0hmrb6l98sifZ ~]# egrep -v "#|^$" nginx.conf.default >nginx.conf

启动程序
[root@iZ2ze2a95z0hmrb6l98sifZ ~]#/application/nginx/sbin/nginx

#检查是否启动
[root@iZ2ze2a95z0hmrb6l98sifZ sbin]# ps aux | grep nginx
root     19390  0.0  0.0  45896  1116 ?        Ss   21:09   0:00 nginx: master process ./nginx
www      19391  0.0  0.0  46336  1884 ?        S    21:09   0:00 nginx: worker process
root     19399  0.0  0.0 112708   980 pts/0    S+   21:10   0:00 grep --color=auto nginx

[root@iZ2ze2a95z0hmrb6l98sifZ sbin]# netstat -ltunp| grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      19390/nginx: master

#nginx命令简化方法
which nginx
echo 'export PATH=/application/nginx/sbin:$PATH'>>/etc/profile
source /etc/profile

nginx安装完毕!

nginx 目录结构

[root@web01 nginx]# ll
total 36
drwxr-xr-x 2 root root 4096 Oct 21 19:34 conf    #配置文件保存目录
drwxr-xr-x 2 root root 4096 Oct 21 19:34 html    #站点目录
drwxr-xr-x 2 root root 4096 Oct 21 20:26 logs    #nginx 服务相关日志文件保存目录(错误日志访问日志)
drwxr-xr-x 2 root root 4096 Oct 21 19:34 sbin    # 服务命令目录(只有一个nginx文件)

配置负载均衡器

    #备份原配置文件
   cp  /application/nginx/conf/nginx.conf{,_bak_2019}
   cd /application/nginx

   #配置文件内容
   [root@iZ2ze2a95z0hmrb6l98sifZ conf]# cat /application/nginx/conf/nginx.conf
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
    upstream tomcat_onlineAPI  {
        ip_hash;
        server 47.95.237.58:8081;
        server 47.95.237.58:8082;
}

        }

        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.jsp index.htm;
            proxy_pass http://tomcat_onlineAPI;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }

 #配置完成后重启nginx服务
 [root@iZ2ze2a95z0hmrb6l98sifZ conf]# /application/nginx/sbin/nginx -s stop
[root@iZ2ze2a95z0hmrb6l98sifZ conf]# /application/nginx/sbin/nginx
使用命令进行访问测试

使用curl 命令进行测试,tail进行关键字提取

[root@lb01 ~]# curl -s 47.95.237.58|tail -1
8081
[root@lb01 ~]# curl -s 47.95.237.58|tail -1
8082
使用curl 命令进行测试,awk进行关键字提取

[root@lb01 ~]# curl -s 47.95.237.58|awk 'END{print}'
8082
[root@lb01 ~]# curl -s 47.95.237.58|awk 'END{print}'
8081

2.12.6. 参考文献

https://cloud.tencent.com/developer/article/1622321