一、安装环境:
所谓的LNMT就是:linux+nginx+mysql+tomcat组合,所需要的软件如下:
jdk:jdk-8u144-linux-x64.rpm,tomcat需要java环境
nginx:目前版本1.12.1,yum安装主要是做代理,将来可以用做负载均衡
mysql:目前版本5.6.37,yum安装,为了方便升级
tomcat:apache-tomcat-8.5.20.tar.gz二进制安装
1.1.操作系统:
操作系统:centOS6.5最小化安装
1)查看linux系统环境
[root@vm5~]# cat /etc/redhat-release
CentOSrelease 6.5 (Final)
[root@vm5~]#uname -r
2.6.32-431.el6.x86_64
[root@vm5~]# uname -m
x86_64
提示:也可以用uname -a
2)
外网:192.168.0.165/24
内网:192.168.3.165/24
1.2.关闭iptables和selinux
服务器端和客户端同时操作
1)关闭iptables
service iptables stop
chkconfig iptables off
#下面是centOS7的,关闭防火墙
#停止firewall
systemctl stop firewalld.service
#禁止firewall开机启动
systemctl disable firewalld.servic
2)关闭selinux
setenforce off
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
grep '^SELINUX=' /etc/selinux/config
1.3.时间同步(非必要)
yum install ntp -y
/usr/sbin/ntpdate pool.ntp.org
echo '#time sync by hua'>>/var/spool/cron/root
echo '*/5 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1'>>/var/spool/cron/root
crontab -l
二、安装jdk
打开http://www.oracle.com/technetwork/java/javase/downloads/index.html页面
点java的下载图标,如下:
此时会跳到下载页面,你这里下载最新版本的jdk-8u144-linux-x64.rpm包
#JDK安装
cd /disk1/tools/
#上传刚刚下载的jdk,
rpm -ih jdk-8u144-linux-x64.rpm
java -version
javac -version
三、安装nginx(yum)
3.1.nginx安装
#下面是centos7的nginx
yum源
#rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum install nginx -y
3.2.nginx启动及测试
/etc/init.d/nginx start
/etc/init.d/nginx status
ps -ef|grep nginx
chkconfig nginx on
#打开浏览器用IP访问试下
输入:http://192.168.0.75,得到如下图所示,说明安装成功。
四、mysql安装(yum)
4.1.mysql下载及安装(yum)
cd /disk1/tools/
wget https://repo.mysql.com/mysql-community-release-el6-7.noarch.rpm
rpm -ih mysql-community-release-el6-7.noarch.rpm
#也可以用yum install mysql-community-devel mysql-community-client mysql-community-server安装
yum install mysqlmysql-server mysql-devel -y
#建立相关的数据和日志目录
mkdir -p /disk1/mysqlData/mysql5.6
mkdir -p /disk1/logs/mysql/mysql5.6/error
mkdir -p /disk1/logs/mysql/mysql5.6/slow
chown mysql.mysql -R/disk1/mysqlData
chown mysql.mysql -R/disk1/logs/mysql
2.修改mysql配置
#1)备份并修改my.cnf
cp /etc/my.cnf /etc/my.cnf.orig
vi /etc/my.cnf
[mysql]
default-character-set=utf8
[mysqld]
#datadir=/var/lib/mysql
datadir = /disk1/mysqlData/mysql5.6
##add by hua
port = 3306
server_id =1
#socket = /tmp/mysql.sock
#设置默认编码,也可以取消
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
log-bin=/disk1/logs/mysql/mysql5.6/mysql-bin
innodb_file_per_table=1
slow-query-log = on
slow_query_log_file =/disk1/logs/mysql/mysql5.6/slow/slowquery.log
long_query_time = 3
log-queries-not-using-indexes= on
log-error =/disk1/logs/mysql/mysql5.6/error/error.log
[mysqld_safe]
#log-error=/var/log/mysqld.log
log-error=/disk1/logs/mysql/mysql5.6/error/error.log
#建立相应的文件:
touch /disk1/logs/mysql/mysql5.6/error/error.log
chown mysql.mysql/disk1/logs/mysql/mysql5.6/error/error.log
#启动mysql,第一次启动会初始化数据库
/etc/init.d/mysqld start
/etc/init.d/mysqld status
#开机启动
chkconfig mysqld on
3.授权
#修改登陆密码并授权外网段能使用hua登陆mysql,密码均为123456
#hua为了安全起见账号只能在局域网内登陆,因为密码过于简单,外网请设置复杂密码
mysql -uroot
set password for'root'@'localhost' = password('123456');
GRANT ALL PRIVILEGES ON *.*TO 'hua'@'192.168.%.%' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges;
\q
#测试mysql登陆
mysql -uroot -p
#输入密码123456
show databases;
\q
#用本机win测试一下远程登陆情况,我这里用的是SQLyog客户端(也可以用Navicat for MySQL)
#提示“Connection
successful”表示测试连接成功,如下图所示:
五、安装tomcat(二进制)
5.1.安装(二进制)
#按照tomcat官方建议用二进制文件安装
wgethttp://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.20/bin/apache-tomcat-8.5.20.tar.gz
mkdir /disk1/app
tar -xf apache-tomcat-8.5.20.tar.gz
mv apache-tomcat-8.5.20 /disk1/app/tomcat-8.5.20
#建立软件链接方便以后升级和维护
ln -s /disk1/app/tomcat-8.5.20 /disk1/app/tomcat
5.2.设置环境变量
echo 'export PATH=$PATH:/disk1/app/tomcat/bin' >>/etc/profile.d/tomcat.sh
cat /etc/profile.d/tomcat.sh
#使用环境变量生效
source /etc/profile.d/tomcat.sh
5.3.启动tomcat
/disk1/app/tomcat/bin/catalina.sh
--help
#启动服务
#/app/tomcat/bin/catalina.sh start
catalina.sh start
sleep 3
netstat -atlnp |grep 8080
#测试结果:
打开浏览器输入http://192.168.0.75:8080
5.4.设置开机启动脚本
vi /etc/init.d/tomcat
#添加如下内容
#!/bin/bash
#chkconfig:
35 85 15
#description:auto_run
#注意路径尾部没有"/"符号
JAVA_HOME=/usr/java/jdk1.8.0_144
TOMCAT1_HOME=/disk1/app/tomcat
################################################
start_tomcat=$TOMCAT1_HOME/bin/startup.sh
stop_tomcat=$TOMCAT1_HOME/bin/shutdown.sh
start() {
echo -n"Starting tomcat1: "
${start_tomcat}
echo"tomcat1 start ok"
}
stop() {
echo -n"Shutdown tomcat1"
${stop_tomcat}
echo"tomcat1 stop ok"
}
#how we were called
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 5
start
;;
*)
echo"Usage: $0 {start|stop|restart}"
esac
exit 0
:wq保存退出
chmod +x /etc/init.d/tomcat
/etc/init.d/tomcat start
/etc/init.d/tomcat stop
/etc/init.d/tomcat restart
#设置开机启动
chkconfig --add tomcat
chkconfig tomcat on
5.测试
cd /disk1/app/tomcat/webapps/ROOT/
echo "this is a html of tomcat root ">t1.html
#如果能打开说明默认的路径放对了
http://192.168.8.165:8080/t1.html
#建立jsp测试页面
cat>t1.jsp<
<%@ page
contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8"
%>
Hello World
jsp display:
<%
out.println("this is a
jsp");
%>
EOF
cat t1.jsp
#如果在浏览器输入http://192.168.3.165:8080/t1.jsp
#能显示如下页面则表示运行jsp成功
5.6.修改tomcat配置
cd ../../conf/
cp server.xml server.xml.orig
vim server.xml +148
....
在之前添加
#在实际工作中我们一般不是这样的话,一般是建立虚拟主机,所以把上面的注解掉
# localhost表示主机名,会自动在Catalina下生成目录,如果添加多一个主机一般会在Catalina
#目录下生成一个以主机命名的目录,如果没有手工建立即可,注意目录权限。
cd
/disk1/app/tomcat/conf/Catalina/localhost/
#因路径为根目录,所在文件名必需是ROOT.xml,如果是非根目录可以是其它
cat>ROOT.xml<
EOF
cat ROOT.xml
#注:
添加有时会出问题,所以我注解掉。
#重启tomcat
/etc/init.d/tomcat restart
#如果重启报错,如下:
可以把ROOT.xml先mv ROOT.xml ROOT.xml.bad,手工杀掉进程,能正常访问再用把配置文件改回来
mv ROOT.xml ROOT.xml.bad
mv ROOT.xml.bad ROOT.xml
ps -ef|grep tomcat|grep -v grep|awk'{print $2}'|xargs kill
/etc/init.d/tomcat restart
#正常访问后再执行下面命令
mv ROOT.xml.bad ROOT.xml
/etc/init.d/tomcat restart
5.7.测试JSP
mkdir -p /disk1/www/hualinux.com
cd /disk1/www/hualinux.com/
#添加如下内容
cat> index.jsp<
Hello World
jsp display:
<%
out.println("this is index.jsp");
%>
EOF
cat index.jsp
/etc/init.d/tomcat restart
#测试tomcat本身能否访问
http://192.168.8.165:8080/t2.jsp
5.8.配置nginx代理访问tomcat
这里通过配置nginx反代理访问tomcat的8080端口,在本机上为了加速访问本地127.0.0.1的IP地址。
cd /etc/nginx/conf.d/
cp default.conf
default.conf.orig
vim default.conf
server {
listen 80;
server_name www.hualinux.com hualinux.com;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#root /usr/share/nginx/html;
#index index.html index.htm;
}
...
}
#按如下图进行修改
nginx -t
/etc/init.d/nginx reload
#再测试通过nginx是否能访问
#先绑定本机host文件192.168.0.75
www.hualinux.com hualinux.com
#如果在浏览器输入http://www.hua.com
也可以直接通过IP地址访问
可能有人还问我能不能直接在tomcat上配置域名进行访问,答案是肯定的,只要在server.xml添加多一个
现在我们直接在tomcat中配置多一个二级域名叫t1.hualinux.com,操作如下:
cd /disk1/app/tomcat/conf
cp server.xml server.xml.orig
vim server.xml +148
复制一份
注:如果要配置多域名可以在
t.hualinux.com
#重启生效
/etc/init.d/tomcat restart
#配置网站
cd Catalina/t1.hualinux.com/
cat>ROOT.xml<
docBase="/disk1/www/t1.hualinux.com" debug="0"
reloadable="true" crossContext="true">
EOF
cat ROOT.xml
/etc/init.d/tomcat restart
#建立网站目录及jsp文件
mkdir -pv /disk1/www/t1.hualinux.com
cd /disk1/www/t1.hualinux.com
cat> index.jsp<
Hello World
jsp display:
<%
out.println("this is
t1.hualinux.com index.jsp");
%>
EOF
cat index.jsp
#绑定本机win的host文件,添加多记得保存!
192.168.3.75 www.hualinux.com
hualinux.com t1.hualinux.com t.hualinux.com
#打开浏览器访问tomcat试下,如果无法访问请重启一下tomcat,等10s这样再访问。
浏览器输入“http://t1.hualinux.com:8080”结果如下:
有人又问了,如果我的tomcat是多站点的怎搞?
方法一:
在nginx中配置多个反向代理,如
location / {
proxy_pass http://t1.hualinux.com:8080;
...
}
location / {
proxy_pass http://t2.hualinux.com:8080;
...
}
方法二:
如果tomcat要用ip访问那么就要在tomcat配置成二级目录方式,这样nginx反代指点到二级目录就行了,如下形式
location / {
proxy_pass http://127.0.0.1:8080/projectA/;
...
}
location / {
proxy_pass http://t2.hualinux.com:8080/projectB/;
...
}
5.9.关于tomcat前面加web的疑问
可能有人会有这样的疑问,tomcat本身不也可以做web吗,为什么还要在前面加一个代理。
因为:
tomcat是java写的,java支持多线程,所以线程也不错的,如果既处理web请求又处理动态请求会很繁忙,所以在前面加多一个反代理nginx或apache,用于接受用户请求,把.jsp请求转到tomcat中。nginx处理静态页面的处理速度会比tomcat快很多,就像工厂的流水线一样,让专业的人做专业的事,这样效率和速度会高很多。
tomcat因用的是java编写,JVM实例的创建和撤销要比PHP进程代价要大的多的多,比nginx代价更大,如果直接用tomcat也参与处理web请求,并发理大的时候性能严重受影响。
七、让java支持mysql
7.1.下载支持mysql的java插件
#去mysql官网下载mysql-connector-java插件,它包括JDBC
#https://dev.mysql.com/downloads/connector/j/
cd /disk1/tools
wget https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.43.tar.gz
tar -xf mysql-connector-java-5.1.43.tar.gz
cd mysql-connector-java-5.1.43
cp mysql-connector-java-5.1.43-bin.jar /disk1/app/tomcat/lib/
ll /disk1/app/tomcat/lib/|grep mysql
#配置这个的目的是让你的java应用程序找到连接mysql的驱动。
#拷贝这一步就是为JSP连接数据库配置驱动。
#重启tomcat,使其生效
/etc/init.d/tomcat restart
7.2.建立数据库
为了测试我建议了一个hua的数据库,有一张t1表,随便插入些数据,如下图:
#操作如下:
vi hua_t1.sql
#添加如下内容
CREATE DATABASE /*!32312 IF NOT
EXISTS*/`hua` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `hua`;
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`id` int(6) unsigned NOT NULL DEFAULT '0',
`sid` int(6) NOT NULL,
`name` char(10) NOT NULL,
`yuwen` float DEFAULT '0',
`shuxue` float DEFAULT '0',
`sex` char(2) NOT NULL DEFAULT '男',
`zhiwei` char(6) NOT NULL DEFAULT '学生',
`login_time` datetime DEFAULT NULL,
`exit_time` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT
CHARSET=utf8;
/*Data for the table `t1` */
insert into`t1`(`id`,`sid`,`name`,`yuwen`,`shuxue`,`sex`,`zhiwei`,`login_time`,`exit_time`)values
(1,1,'张三',51,65,'男','学生','2016-10-26 10:00:01','2016-10-26 19:00:01'),
(2,2,'李四',71,0,'男','学生','2016-10-26 10:10:01','2016-10-26 19:30:01'),
(3,3,'王五',87.6,90,'男','学生','2016-10-26 10:10:01','2016-10-26 19:30:01'),
(4,4,'陈六',55.9,88,'男','学生','2016-10-26 10:10:01','2016-10-26 21:30:01'),
(5,0,'谢九',77,59,'男','学生','2017-01-09 10:05:01','2017-01-09 19:10:01'),
(6,6,'天天',45,90,'男','学生','2017-01-05 09:10:01','2016-10-26 19:30:01'),
(7,7,'开心',70,100,'女','学生','2017-01-02 09:10:01','2016-10-26 19:05:01'),
(8,8,'乐儿',65,50,'女','音乐委','2016-10-26 10:10:01','2016-10-26 19:30:01'),
(9,9,'乐乐',88,29.5,'女','学生','2017-01-09 10:10:01','2017-01-09 19:10:01'),
(10,10,'笑笑',73,69,'女','学生','2016-10-26 10:10:01','2016-10-26 19:30:01'),
(11,11,'fly',90,89,'男','学生','2017-01-09 10:10:01','2017-01-09 19:10:01'),
(12,12,'乐天',90,70,'男','副班长','2017-01-09 10:10:01','2017-01-09 19:10:01'),
(13,13,'云儿',95,65,'女','学生','2016-10-26 10:10:01','2016-10-26 19:30:01'),
(14,14,'伊洛',14,70,'男','班长','2017-01-09 10:10:01','2017-01-09 19:10:01'),
(15,15,'abc',86,98,'男','学生','2016-10-26 10:10:01','2016-10-26 19:30:01'),
(16,16,'菲菲',90,99,'女','学习委','2017-01-09 10:15:01','2017-01-09 19:10:01'),
(17,19,'mm',71,61,'女','学生','2017-01-09 10:10:01','2017-01-09 19:10:01'),
(18,18,'meiei',98,61,'男','学生','2017-01-09 10:10:01',NULL);
mysql -uroot -p
#查询一下表情况
mysql -uroot -p -e 'usehua;select * from t1;'
7.3.建立简单查询数据库的jsp文件
#为了方便我只写了查询前3个字段的
cd /disk1/www/hualinux.com/
cat>mysql.jsp<
<%@ page
contentType="text/html;charset=UTF-8" language="java"
pageEncoding="UTF-8" %>
<%@ page
import="com.mysql.jdbc.Driver" %>
<%@ page import="java.sql.*"
%>
<%
//加载驱动程序
String driverName="com.mysql.jdbc.Driver";
//数据库信息
String userName="root";
//密码
String userPasswd="123456";
//数据库名
String dbName="hua";
//表名
String tableName="t1";
//将数据库信息字符串连接成为一个完整的url(也可以直接写成url,分开写是明了可维护性强)
String url="jdbc:mysql://localhost/"+dbName+"user="+userName+"&password="+userPasswd;
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn=DriverManager.getConnection(url);
Statement stmt =conn.createStatement();
String sql="SELECT * FROM"+tableName;
ResultSet rs =stmt.executeQuery(sql);
out.print("id");
out.print("|");
out.print("sid");
out.print("|");
out.print("name");
out.print("
");while(rs.next()) {
out.print(rs.getString(1)+"
");
out.print("|");
out.print(rs.getString(2)+"
");
out.print("|");
out.print(rs.getString(3));
out.print("
");}
out.print("
");out.print("ok, Database
Query Successd!");
rs.close();
stmt.close();
conn.close();
%>
EOF
cat mysql.jsp
效果如下图所示: