Tomcat部署最佳实践

标签: linux

笔者Q:972581034 交流群:605799367。有任何疑问可与笔者或加群交流


tomcat是玩web软件必会技能之一,今天我给大家介绍一下tomcat的部署,监控以及调优。


一、运行环境

[root@tomcat ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@tomcat ~]# uname -r
3.10.0-327.el7.x86_64
[root@tomcat ~]# getenforce
Disabled
[root@tomcat ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Mon 2017-04-24 06:49:46 CST; 1s ago
[root@tomcat ~]# free -h
total used free shared buff/cache available
Mem: 3.7G 128M 3.4G 8.5M 143M 3.4G
Swap: 1.0G 0B 1.0G
[root@tomcat ~]# lscpu |egrep -w "(CPU\(s\):|Model name|cache)"
CPU(s): 2 #因为小猫比较吃资源,这里用的双核4G
Model name: Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 6144K

二、准备

软件包目录:/application/tools
安装目录:/application/
tomcat,jdk版本如下,大家可以去我的云盘下载。链接:http://pan.baidu.com/s/1qYS8uGc 密码:97hp
[root@tomcat tools]# ls /application/tools/
apache-tomcat-8.0.27.tar.gz jdk-8u60-linux-x64.tar.gz

三、部署

1.部署java环境

[root@tomcat ~]# cd /application/tools/
[root@tomcat tools]# tar xf jdk-8u60-linux-x64.tar.gz -C /application/
[root@tomcat tools]# ln -s /application/jdk1.8.0_60 /application/jdk
source /etc/profile
java -version
[root@tomcat tools]# sed -i.ori '$a export JAVA_HOME=/application/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
[root@tomcat tools]# source /etc/profile
[root@tomcat tools]# java -version

2.安装tomcat

[root@tomcat tools]# tar xf apache-tomcat-8.0.27.tar.gz -C /application/
[root@tomcat tools]# ln -s /application/apache-tomcat-8.0.27 /application/tomcat
[root@tomcat tools]# echo 'export TOMCAT_HOME=/application/tomcat'>>/etc/profile
[root@tomcat tools]# source /etc/profile
[root@tomcat tools]# chown -R root.root /application/jdk/ /application/tomcat/

3.启动服务

[root@tomcat tomcat]# /application/tomcat/bin/startup.sh

4.查看日志

[root@tomcat logs]# tailf catalina.out
#如果有start Server startup in 592 ms表示启动成功
24-Apr-2017 19:46:29.229 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 592 ms

5.启动慢问题

在CentOS启动Tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的。Tocmat的Session ID是通过SHA1算法计算得到的,计算Session ID的时候必须有一个密钥。为了提高安全性Tomcat在启动的时候回通过随机生成一个密钥,解决方法如下:
yum install rng-tools # 安装rngd服务(熵服务,增大熵池)
systemctl start rngd # 启动服务

6.web界面说明

登录


管理界面

需要在配置文件添加如下内容

注意,这里只做测试用,如果在生产环境中会大大增加被入侵的风险,下面优化会讲到


7.虚拟目录


8.web管理界面

通常为了安全,会被这个功能关掉,或者使用VPN链接


Tomcat多实例

1.复制Tomcat目录

#注意之前的软链接
[root@tomcat ~]# cd /application/
[root@tomcat application]# cp -a apache-tomcat-8.0.32 tomcat8_1
[root@tomcat application]# cp -a apache-tomcat-8.0.32 tomcat8_2

2.修改配置文件

#创建多实例站点目录
[root@tomcat application]# mkdir -p /data/www/www/ROOT
#修改默认端口,管理端口,站点根目录
[root@tomcat tools]# sed -i '22s#8005#8011#;69s#8080#8081#;123s#appBase=".*"# appBase="/data/www/www"#' /application/tomcat8_1/conf/server.xml
[root@tomcat conf]# sed -i '22s#8005#8012#;69s#8080#8082#;123s#appBase=".*"# appBase="/data/www/www"#' /application/tomcat8_2/conf/server.xml

3.启动服务

[root@tomcat conf]# /application/tomcat8_1/bin/startup.sh
[root@tomcat conf]# /application/tomcat8_2/bin/startup.sh
[root@tomcat ~]# ss -lntp|grep java
LISTEN 0 100 :::8009 :::* users:(("java",pid=2819,fd=51))
LISTEN 0 1 ::ffff:127.0.0.1:8010 :::* users:(("java",pid=2819,fd=72))
LISTEN 0 1 ::ffff:127.0.0.1:8011 :::* users:(("java",pid=2855,fd=60))
LISTEN 0 1 ::ffff:127.0.0.1:8012 :::* users:(("java",pid=2886,fd=60))
LISTEN 0 100 :::8080 :::* users:(("java",pid=2819,fd=46))
LISTEN 0 100 :::8081 :::* users:(("java",pid=2855,fd=46))
LISTEN 0 100 :::8082 :::* users:(("java",pid=2886,fd=46))

说明:由于tomcat支持大并发能力有限,所有生产中不般不配虚拟主机,而使用多实例。一台机放四台,前面可使用nginx反向代理。


jpress部署实践

JPress,一个wordpress的java代替版本,使用JFinal开发。 需要maven支持。这里我也给大家提供了。下载后上传到/application/tools下执行下面的命令。链接:http://pan.baidu.com/s/1boMCXrD 密码:3wg4

cd /application/tools
tar xf apache-maven-3.3.9-bin.tar.gz -C /application/
ln -s /application/apache-maven-3.3.9 /application/maven
sed -i.ori2 '$a export MAVEN_HOME=/application/maven\nexport PATH="$MAVEN_HOME/bin:$PATH"' /etc/profile
source /etc/profile

把下载好的jpress-web-newest.war解压到/data/www/www/ROOT下

cd /data/www/www/ROOT
jar xf /application/tools/jpress-web-newest.war

创建数据库表

create database jpress;
grant all on jpress.* to jpress@'10.0.0.%' identified by '123456';

重启tomcat

for i in {1..2};do /application/tomcat8_$i/bin/shutdown.sh;done
for i in {1..2};do /application/tomcat8_$i/bin/startup.sh;done

现在浏览器就可以访问了,下面是我上传的两张图片

张耀的博客: http://www.zyops.com/java-tomcat

Tomcat监控:http://www.cnblogs.com/Csir/p/6758106.html

Tomcat调优:http://www.cnblogs.com/Csir/p/6758432.html

tomcat部署最佳实践(一)的更多相关文章

  1. Cobbler自动化部署最佳实践

    第1章 Cobbler自动化部署最佳实践 运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统,如果不通过自动化来完成,根本是不可想象的. 面对 ...

  2. Kubernetes 服务部署最佳实践(二) ——如何提高服务可用性

    引言 上一篇文章我们围绕如何合理利用资源的主题做了一些最佳实践的分享,这一次我们就如何提高服务可用性的主题来展开探讨. 怎样提高我们部署服务的可用性呢?K8S 设计本身就考虑到了各种故障的可能性,并提 ...

  3. Kubernetes 服务部署最佳实践(一) ——如何更好地设置 Request 与 Limit

    如何为容器配置 Request 与 Limit? 这是一个即常见又棘手的问题,这个根据服务类型,需求与场景的不同而不同,没有固定的答案,这里结合生产经验总结了一些最佳实践,可以作为参考. 所有容器都应 ...

  4. Nginx SSL TLS部署最佳实践

    本文介绍nginx在提供HTTPS时使用的一些其他配置选项. 虽然这些功能有助于优化nginx的SSL和TLS,但这不是一个完整对加固nginx的介绍. 确保您的服务器安全的最佳方法是不仅需要正确的配 ...

  5. (转)Cobbler自动化部署最佳实践

    原文:http://www.xuliangwei.com/xubusi/446.html 运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统, ...

  6. Websphere Application Server 环境配置与应用部署最佳实践

    在发布一个运行于 WebSphere Application Server 的 J2EE 应用之前,对服务器进行配置和部署应用是必不可少的一个过程,这个过程是非常复杂的.WAS 为用户提供了可视化的管 ...

  7. laravel 上线部署最佳实践

    nginx  配置 listen 80 default_server; server_name xxxx; index index.php index.html;    优先 index.php ro ...

  8. Nginx Ingress on TKE 部署最佳实践

    概述 开源的 Ingress Controller 的实现使用量最大的莫过于 Nginx Ingress 了,功能强大且性能极高.Nginx Ingress 有多种部署方式,本文将介绍 Nginx I ...

  9. Zabbix3.0部署最佳实践

    Zabbix3整个web界面做了一个全新的设计. 更多新特性请点击当前字幕查看   笔者QQ:572891887 Linux架构交流群:471443208 1.1Zabbix环境准备 [root@li ...

随机推荐

  1. api接口写好了?想过(Accept,Content-Type)?返回类型json|xml?

    api接口写好了?想过(Accept,Content-Type)?返回类型json|xml? 起因: - A,B. A调用B提供的api接口. - A:为毛你的接口返回的是xml格式的(浏览器访问)? ...

  2. Beyond Globally Optimal: Focused Learning

    这里对WWW 2017文章<Beyond Globally Optimal: Focused Learning for Improved Recommendations>进行一个简单的分析 ...

  3. deeplearning.ai 作业中的Python常用命令

    1. print大法 test = Hello World print ("test:" + test) 2. math和numpy的区别:math只对单个元素,numpy会bro ...

  4. 51nod1649- 齐头并进-最短路

    1649 齐头并进 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 在一个叫奥斯汀的城市,有n个小镇(从1到n编号),这些小镇通过 ...

  5. HDU5137 删点 最短路

    How Many Maos Does the Guanxi Worth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 512000/5 ...

  6. python数据类型(一)

    1.数据类型 python中数有四种类型:整数.长整数.浮点数和复数. 整数, 如 1 长整数 是比较大的整数 浮点数 如 1.23.3E-2 复数 如 1 + 2j. 1.1 + 2.2j 2. 自 ...

  7. MFC中自定义消息

    在头文件stdafx.h中增加一个自定义消息宏 #define WM_USER_THREADEND WM_USER + 1 在于增加新消息的窗口或对话框类的头文件中增加一个回调函数声明 afx_msg ...

  8. html5只需要<!DOCTYPE HTML>的原因

    首先我们先了解两个东西: SGML:标准通用标记语言(以下简称"通用标言"),是一种定义电子文档结构和描述其内容的国际标准语言:[1]  通用标言为语法置标提供了异常强大的工具,同 ...

  9. js定时器之setTimeout的使用

    之前用过定时器,只不过用的不是很多,关于js定时器,一般而言我们很容易想到setInterval和setTimeout这两种. 刚开始学js定时器时,记住了setInterval,该方法一般用于每隔多 ...

  10. C语言课程设计大整数运算

    该大整数运算系统用于对有符号的位数不超过500位的大整数进行加.减.乘.除四则运算和计算N(0<=N<=10000)的阶乘.注意事项 :    1.操作期间,进行四则运算时若大整数为正数请 ...