码迷,mamicode.com
首页 > 其他好文 > 详细

lamp基础搭建

时间:2016-07-19 11:20:09      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:mysql   web服务器   配置文件   

    lamp是目前web服务器最基础的框架,理解其主要原理可以帮助我们在更高层次的学习和操作中事半功倍。

LAMP的组成:
 a: apache (httpd)
 m: mysql, mariadb
 p: php或perl或python(此次使用的是php)

    

数据库(mysql、mariadb):

    作为数据库来说,centos 6和centos 7操作上没太多的不同,只不过,一个6上叫mysql、进程名叫mysqld,7上叫mariadb、进程名叫mariadb.service。而我认为,既然是一个库,就不要来回挪地方,只需要搭建一个就好,不同类型的php可以安装在不同主机上,但都可以指向这一个库。此次我将数据库放在了centos 7.2上,这台7上的ip为172.16.0.215,直接yum install mariadb-server。

接着修改l配置文件:/etc/my.cnf
    在"[mysql]"栏后面加上下列字段:
    innodb_file_per_table=ON
    skip_name_resolve=ON
    AddDefaultCharset UTF-8

注意:此操作6上是不支持的

    之后就是systemctl  start  mariadb.service

    (当然,还可以systemctl  enable  mariadb.service来设置开机启动)

centos 6上就是service  mysqld  start(开机启动是chkconfig mysqld on)

 

    我在配置完以后运行了一下mysql_secure_installation,它的作用是删除匿名登录的用户权限和test库,并设置密码,说实话,作为实验来说,运行不运行都没关系,反正里面没什么重要信息(而且运行时全是大段英文,密码设置的很乱,还不如自己去完成那些操作了)。

    接下来是设置密码(还是自己操作的安心一点,再给root设一遍好了)

输入命令:mysql,如果没有之前的配置,直接就能进去;

接着键入:SET  PASSWORD  FOR  ‘root‘@‘localhost‘  =PASSWORD(‘mageedu‘)

 

    注意:这个root是mysql的root,而不是root用户

 

接着是授权,我们只是为了搭建,所以就用root和名为mysql的库

GRANT  ALL ON  mysql.*  TO  ‘root‘@‘172.16.%.%‘  IDENTIFIED BY ‘mageedu‘;

%代表任意长度的任意字符,这里相当于授权的这个网段

 

httpd

    首先我们确定安装的版本为当下最为适用的2.4版本,还是安装在这台主机上,yum install安装,接着启动服务并开机启动,它的基础配置之前的博文里提到过,就不在赘述了。而如果在6上,httpd-2.4版本需要编译安装

 

php

    http与php结合的方式:
   CGI:通用网关接口:Common Gatway Interface

    modules (把php编译成为httpd的模块)

   FastCGI:fpm:C/S架构,通过套接字通信

    目前我们主要使用的方式有两种,就是模块化php以及php-fpm,而模块化php中,如果httpd的MPM为prefork,php使用的是libphp5.so模块,如果是其他两种,则是 libphp5-zts.so。

    好了,由于模块化php肯定要和httpd在同一台主机上,所以我们还是在这台主机上进行yum install php。而httpd的配置我并没有修改,是默认的prefork,所以不用多余安装libphp5-zts.so这个模块。

    同时,在另一台ip为172.16.0.214的centos 7主机上,我们安装php-fpm,同样yum install。centos 7上的php是5.4版本的,如果在6上要用同样的版本,需要编译安装。

 

需要注意的是:模块化的php和php-fpm是不兼容的,php-fpm是一种实现CGI协议的管理程序,而不是模块,两者会冲突。

    我们把两种php安装在不同的主机上,避免了冲突,而另一个重要意义是:将php-fpm放在另一台主机上,就可以实现跨主机的构建lamp方式;而在172.16.0.215上就是同一台主机构建了。我们刚刚提到过, FastCGI是通过套接字通信的,当用户请求php文件时,httpd作为反向代理通过CGi协议,把解析完成的php文件映射到网页页面上,而文本文件就在httpd的本地而不是数据库里,httpd是与php-fpm直接通信的,而数据库的通信对象也是php-fpm,所以,将httpd与数据库二者放在同一主机上,只要php-fpm在别处,两台和三台主机没什么不同。当然,我们还要分别在两台主机上安装php-mysql用来联系php和数据库。

 

    其实上述就是lamp的基本环境,几乎改动一下一些配置就可以把框架搭起来,而在这里,我通过构建虚拟httpd服务器搭建,并通过脚本实现,直接上图:

 

技术分享

技术分享

技术分享

    此脚本可用于php模块化的情况,最早是在学httpd时,想快速配置虚拟服务器写的小脚本,后来发现只要再加入不是很多的东西,就可以完成一个简单的lamp框架,于是就有了这么一个东西,取名xhttpd,后跟create  ’NAME‘可以创建一个httpd虚拟机并带有连接mysql的php页面,如果是add后跟两个数字,则是批量创建名为www#的httpd虚拟机(例如add 1   10,就是创建www1到www10),del和list就是删除和查看,加-a就是全部;

    由于amp三者都在同一台主机上,所以其实没什么好说的。说实话,脚本写的很low,甚至会给完美主义者带来些许的不适,但是它能用,而且很方便,分分钟搞出一个虚拟服务器,一言不合就把服务器删了也不会心疼(当然,还是有前面的环境做基础,程序都没装啥都不好使)。

    

    不能忘了的是,我们还有php-fpm跨主机的构建,我在上个脚本基础上做了一些改动,但还是不能一蹴而就,因为毕竟脚本在httpd的主机上,而php-fpm在另一台主机上(ip尾号为214的主机)。

 

 

技术分享

技术分享

技术分享

由图可见,仅仅是函数部分做了一些改动,路径也改了改,但名都差不多,主路径还是一样的,至于用法简直一毛一样。

 

    这里的问题是,我httpd主机上自己不提供php文件的解析,所以我把生成index.php的函数注释掉了,改为生成一个简单的文本页面,然后当php-fpm能在这台主机上时,把解析php的路径和主页面的写成一致的,就可以改回来了。

    而在php-fpm主机上,由于它是一个进程,所以会生成配置文件/etc/php-fpm.conf,  /etc/php-fpm.d/*.conf;

/etc/php-fpm.conf中没什么需要修改的,而 /etc/php-fpm.d/下只有一个默认的www.conf,那么就改它了:

    listen = 127.0.0.1:9000
     listen.allowed_clients = 127.0.0.1
      user = apache
     group =  apache

这是默认的值;将  listen.allowed_clients改为httpd主机的ip 172.16.0.215(也可以把listen改成本机的172.16.0.214,保险点没有错);user和group涉及到session权限;

后面还有pm的模式static和dynamic,默认是dynamic,设置的值也还好,就不改了;

最后是pm方式的php进程存储session的路径:
     php_value[session.save_handler] = files
     php_value[session.save_path] = /var/lib/php/session

但要注意的是session路径本身不存在。

    

    于是我们保存配置并创建session目录,然后确保运行php-fpm进程的用户对此目录有读写权限;
     # mkdir  /var/lib/php/session
     # chown apache.apache /var/lib/php/session

接着,注意到httpd主机上的脚本里写的fcgi路径/data/fpm-vhosts/,在下面创建连接mysql的页面index.php就好了,脚本里的可以复制粘贴,但别忘了把反斜线去掉。

 

这样,结合我的fhttpd脚本,就可以同样构建好跨主机的lamp框架了,只要往这两个框架下能解析到php文件的那条路径下放程序文件,就可以在框架中跑各种程序了。

    

    下面是两种情况下采用ab的压测对比,同为172.16.0.215主机,并发100,请求1000(目测这是极限了,很慢,就没敢往上加)

 

技术分享

技术分享

技术分享

技术分享

前两图为php模块化的情况,每秒10个左右,很尴尬,后面两个是php-fpm情况,一次21,一次37,但之后都稳定在35、36左右,没有保存图,但就算以21算都是前者的2倍了,高下立判。

 

    之后我在两种框架下都部署了xcache,但结果竟然都一毛一样!显然失败了,下图为php模块化下部署xcache

技术分享

php-fpm也是一点作用没有,图就不贴了。

 

最后是httpd-2.4和php-5.4的编译安装及配置

 

安装httpd-2.4:

    CentOS 6专用:
   (1) apr
    # ./configure --prefix=/usr/local/apr
    # make && make install
   (2) apr-util
    # ./configure --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr
    # make && make install

注意:后面编译主体时,apr和apr-util要写的是实际编译安装的路径
    
  CentOS 7专用:
   # yum install apr-devel apr-util-devel

 

# yum install pcre-devel openssl-devel  libevent-devel
  
   # ./configure --prefix=/usr/local/apache24 --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork --with-pcre --with-zlib --with-apr=/usr --with-apr-util=/usr
   # make -j #
   # make install

 

安装php-5.4:
   # yum install libxml2-devel gd-devel freetype-devel libmcrypt-devel
  
   # ./configure --prefix=/usr/local/php54 --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --enable-xml --enable-sockets --with-freetype-dir --with-gd --with-libxml-dir=/usr --with-zlib --with-jpeg-dir --with-png-dir --with-mcrypt --with-apxs2=/usr/local/apache24/bin/apxs --with-config-file-path=/etc/php54.ini --with-config-file-scan-dir=/etc/php54.d
   # make -j #
   # make install
    
    cp php.ini-production  /etc/php54.ini

   注意:如果httpd使用了线程式MPM,则编译php时应该额外使用--enable-maintainer-zts;
  
  配置httpd:
   LoadModule php5_module modules/libphp5.so
   AddType application/x-httpd-php .php
   DirectoryIndex index.php index.html

 

以上就是我的配置,如有差错,欢迎指正。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

lamp基础搭建

标签:mysql   web服务器   配置文件   

原文地址:http://jiangzhi21.blog.51cto.com/11623203/1827572

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!