Linux、Apache、Mysql、PHP(LAMP) -- 部署文档

来源:互联网 发布:淘宝卖家怎么提高流量 编辑:程序博客网 时间:2024/05/18 21:40

1    Linux

1.1     版本

CentOS 6.4x86_64 2.6.32-358.el6.x86_64

1.2     安装

ü  分区:/boot、swap、/

ü  支持中文

1.3     配置

安装kernel-devel和kernel-headers,并且在更新系统时,禁止更新kernel:

#yum -y install kernel-devel kernel-headers && echo exclude=kernel* >> /etc/yum.conf

 

安装必须的依赖包:

#yum -y groupinstall 'Development tools'

#yum -y groupinstall 'Desktop Platform Development'

#yum –y install wget gcc gcc-c++ make re2c curl curl-devel libxml2 libxml2-devel libjpeg libjpeg-devel libpng libpng-devel libmcrypt libmcrypt-devel zlib zlib-devel openssl openssl-devel freetype freetype-devel gd gd-devel perl perl-devel ncurses ncurses-devel bison bison-devel libtool gettext gettext-devel cmake bzip2 bzip2-devel pcre pcre-devel

 

防火墙设置开启80端口访问

#/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT

#/etc/rc.d/init.d/iptables save

#cat /etc/sysconfig/iptables

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [7:788]

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

重新启动服务

#service iptables restart

 


2    Apache

2.1     版本

httpd-2.4.16

2.2     准备

The mission of the Apache Portable Runtime (APR)project is to create and maintain software libraries that provide a predictableand consistent interface to underlying platform-specific implementations. Theprimary goal is to provide an API to which software developers may code and beassured of predictable if not identical behaviour regardless of the platform onwhich their software is built, relieving them of the need to code special-caseconditions to work around or take advantage of platform-specific deficienciesor features.

apr-1.5.2

#./configure --prefix=/usr/local/apr

#make && make install

apr-util-1.5.4

#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

#make && make install

2.3     安装

httpd-2.4.16

#./configure --prefix=/usr/local/apache --enable-so --enable-ssl --enable-cgi --enable-rewrite --enable-cache --enable-file-cache --enable-disk-cache --enable-mem-cache --enable-speling --enable-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event --enable-deflate

#make && make install

2.4     配置

//备份配置文件

#cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak

//编辑配置文件

#vim /usr/local/apache/conf/httpd.conf

找到ServerName www.example.com:80,修改为ServerName 10.10.10.10:80

找到DirectoryIndex index.html,修改为DirectoryIndex index.html index.php

不显示目录结构(此处没有配置):找到Options Indexes FollowSymLinks,修改为Options FollowSymLinks

开启apache支持伪静态,有三处都做修改:找到AllowOverride None,修改为AllowOverride All

取消前面的注释,开启apache支持伪静态:LoadModule rewrite_module modules/mod_rewrite.so

//添加apache服务系统环境变量:

#vim /etc/profile

在最后添加下面这一行:export PATH=$PATH:/usr/local/apache/bin

//更改目录所有者(此处没有配置):

#chown  daemon.daemon  -R /usr/local/apache/htdocs

//更改apache网站目录权限(此处没有配置):

#chmod   700  /usr/local/apache/htdocs  -R

//启动apache:

#/usr/local/apache/bin/apachectl -k start

//检查是否启动:

#ps -ef | grep httpd

#netstat –tplun | grep ":80"

 

Apache服务器开机自动启动(此处用方法一)

方法一:

#cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd

#vim /etc/rc.d/init.d/httpd

//“#!/bin/sh”下面添加

//“#”必须有,2345是要启动的运行级别,50是启动优先级,90是杀死进程的优先级

#chkconfig: 2345 50 90

#description: Activates/Deactivates Apache Web Server

#chkconfig --add httpd

#chkconfig httpd on

#service httpd start

 

方法二:

#echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.d/rc.local

 


3    Mysql

3.1     版本

mysql-5.6.25

3.2     安装

#groupadd mysql

#useradd -g mysql mysql

//或者

#groupadd -r mysql

#useradd -g mysql -r -s /sbin/nologin  -M mysql

#cd mysql-5.6.25

#cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock -DENABLED_LOCAL_INFILE=1 -DEXTRA_CHARSETS=all -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

#gmake

#make install

 

3.3     配置

mysql服务器设置为开机自动运行:

#cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysql

//把mysql添加到chkconfig中:

#chkconfig --add mysql

//在图形和字符集界面下自动启动mysql:

#chkconfig --level 3 mysql on

#chkconfig --level 5 mysql on

//使用chkconfig --list命令检查设置:

#chkconfig --list mysql

mysql       0:off   1:off   2:on    3:on    4:off    5:on    6:off

 

创建mysql数据库服务器的配置文件,可以使用support-files目录中的my-default.cnf文件作为模板,将其复制到/etc/目录下,命名为my.cnf文件即可:

#cp /usr/local/mysql/support-files/my-default.conf  /etc/my.cnf

#vim /etc/my.cnf

//修改:

basedir = /usr/local/mysql

datadir = /usr/local/mysql/data

port = 3306

socket = /tmp/mysqld.sock  //这块对应要PHP配置文件里的3default_socket路径,否则localhost连接mysql会找不到本地unix socket

 

//将组属性改为mysql组:

#chgrp -R mysql .

//数据目录的所有权改为运行mysql程序的mysql用户:

#chown -R mysql. /usr/local/mysql/data

 

如果还没安装过MySQL,必须创建MySQL授权表。进入到安装目录/usr/local/mysql/scripts下,执行mysql_install_db脚本,用来初始化MySQL数据库的授权表,其中存储了服务器访问允许。如果使用root用户运行下面的命令,应当使用--user选项,选项的值应当与你在第一步为运行服务器所创建的登录账户(mysql用户)相同。 如果用mysql用户登录来运行上面的命令,可以省略--user选项。用mysql_install_db创建mysql授权表后,需要手动重新启动服务器。

#cd /usr/local/mysql/scripts

#./mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --no-defaults --user=mysql

#service mysql start

 

查看Mysql状态

//查看是否存在mysql进程:

#ps -ef | grep mysql

//查看端口3306是否打开:

#netstat –tnl | grep 3306

 

修改环境变量

#vim /etc/profile

//在最后添加:

PATH=$PATH:/usr/local/mysql/bin

 

设置访问权限,在mysql安装过程中,使用mysql_install_db程序安装了mysql数据库授权表,表定义了初始mysql用户账户和访问权限,所有初始化账户均没有密码。这些账户为超用户账户,可以执行任何操作。初始root账户的密码为空,因此任何人可以用root账户不用任何密码来连接mysql服务器,并具有所有权限,这意味着mysql安装未受保护。如果你想要防止客户端不使用密码用匿名用户来连接,你应当为匿名账户指定密码或删掉匿名帐户,应当为mysql root账户指定密码。使用mysql-u root启动mysql客户端控制台,连接mysql服务器。命令行如下:

//没有密码可直接登录本机服务器

#mysql -u root

 

如果有匿名账户存在,它拥有全部的权限,因此删掉它可以提高安全,在mysql客户端执行SQL语如下:

#mysql> delete from mysql.user where host='localhost' and user='';

Query OK, 1 row affected (0.01 sec)

#mysql> flush privileges;

 

可以用几种方法为root账户指定密码,我们选择用其中的一种。在mysql客户端命令行上使用set password指定密码,一定要使用password()函数来加密密码。使用的SQL语句如下:

#mysql> set password for 'root'@'localhost'=password('#mysql@IDC');

 

赋予远程连接权限

#mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '#mysql@IDC' WITH GRANT OPTION;

 

再次登录:

#mysql -uroot -hlocalhost –p#mysql@IDC


4    PHP

4.1     版本

php-5.6.13

4.2     安装

#cd php-5.6.13

#./configure  --prefix=/usr/local/php  --with-apxs2=/usr/local/apache/bin/apxs  --with-config-file-path=/usr/local/php/etc  --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd  --with-libxml-dir  --with-gd  --with-jpeg-dir  --with-png-dir  --with-freetype-dir  --with-iconv-dir  --with-zlib-dir  --with-bz2  --with-openssl  --with-mcrypt  --enable-soap  --enable-gd-native-ttf  --enable-mbstring  --enable-sockets  --enable-exif  --disable-ipv6

#make

#make test

#make install

PHP 5.3以上的版本推荐使用mysqlnd驱动,详见:https://blog.linuxeye.com/395.html

4.3     配置

//复制php配置文件到安装目录:

cp php.ini-production  /usr/local/php/etc/php.ini

//删除系统自带的配置文件:

#rm -rf /etc/php.ini

//创建配置文件软链接:

#ln -s  /usr/local/php/etc/php.ini   /etc/php.ini

#vim /usr/local/php/etc/php.ini

//防止php木马跨站

// 加入apache的网站路径,否则访问apache时会有PHP Warning:chdir():open_basedir restriction in effect. File(..) is not within the allowed path(s): (.:/tmp/)

找到;open_basedir =,修改为open_basedir = .:/usr/local/apache/htdocs/:/tmp/

//列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。(此处没有配置)

找到disable_functions =,修改为:disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

//设置时区

找到;date.timezone =,修改为date.timezone = PRC

//禁止显示php版本的信息(此处没有配置)

找到expose_php = On,修改为expose_php = OFF

//关闭错误提示(此处没有配置)

找到display_errors = On,修改为display_errors = OFF

//设置default_socket名称,用于localhost连接MySql

pdo_mysql.default_socket = /tmp/mysqld.sock

mysql.default_socket = /tmp/mysqld.sock

mysqli.default_socket = /tmp/mysqld.sock

 


5    Apache + PHP

5.1     配置

配置Apache支持PHP

//编辑apache配置文件

vim /usr/local/apache/conf/httpd.conf

//在LoadModule   php5_module   modules/libphp5.so这一行下面添加:

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps (注意:.php这个点前面有一个空格)

//重启apache:

#service httpd restart

//重启mysql:

#service mysql restart

 

5.2     测试

#vim  /usr/local/apache/htdocs/index.php

<?php

phpinfo();

?>

在客户端浏览器输入服务器IP地址,可以看到相关的配置信息。


6    PHP + Xcache

6.1     版本

xcache-3.2.0

6.2     安装

#cd xcache-3.2.0

#/usr/local/php/bin/phpize

#./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config

#make && make install

安装结束时,会出现类似如下行:

Installingshared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so

6.3     配置

编辑php.ini,整合php和xcache

//首先将xcache提供的样例配置导入php.ini:

#mkdir /etc/php.d

#cp xcache.ini /etc/php.d    //xcache.ini在xcache的源码目录中

//接下来编辑/etc/php.d/xcache.ini,找到extension开头的行,修改为如下行:

extension = /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so    //如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位


7    PhpMyadmin

7.1     版本

phpMyAdmin-4.5.0.2-all-languages

7.2     安装

把解压的目录phpMyAdmin-4.5.0.2-all-languages下的文件,全部复制到Apache的/usr/local/apache/htdocs下,并新建一个名为phpMyAdmin的目录下面,即安装完成。

#cp -a phpMyAdmin-4.5.0.2-all-languages /usr/local/apache/htdocs/phpMyAdmin

7.3     配置

配置的方法是通过对phpmyadmin顶层目录下的config.inc.php文件中 的几个选项做一些设置即可。默认不存在config.inc.php文件,我们需要手工创建一个,也可以复制config.sample.inc.php 模板得到最低限度的配置文件。

#cp config.sample.inc.php config.inc.php

 

#vim config.inc.php

 

通过身份验证模式的要求,可以有两种配置方案。

第一种是http和cookie身份验证模式。在这两种模式下,用户必须先在一个登录窗口里输入MySQL数据库的有效用户名和密码,才能使用phpMyAdmin。这种做法有两个明显的好处:首先,因为MySQL数据库的密码没有出现在config.inc.php文件里,所以身份验证过程更加安全;其次,允许以不同的用户身份登录对自己的数据库进行管理。这两种身份验证模式尤其适合数据库中多个用户账号的情况。

第二种方案是,config身份验证模式。这种情况下,密码以明文形式保存在config.inc.php文件里。只需要把MySQL用户 名和密码直接写入到config.inc.php文件即可。这样,在登录phpMyAdmin时就不会提示输入用户名和密码了,而只直接用 config.inc.php文件里写入的用户登录 。如果只是在一个本地测试系统上使用phpMyAdmin,可以使用这种模式。

此处使用第一种的http身份验证模式:

$cfg['Servers'][$i]['auth_type'] = 'http';

 


8    压力测试

使用ab命令测试apache服务器性能:

-c concurrency:一次性发起的请求个数,默认为1;

-i:测试时使用HEAD方法,默认为GET;

-k:启用HTTP长连接请求方式;

-n requests:发起的模拟请求个数;默认为1个;请求数要大于等于并发连接数;

-q:静默模式,在请求数大于150个时不输出请求完成百分比;

 

输出结果:

Time taken fortests:从第一个请求连接建立到收到最后一个请求的响应报文结束所经历的时长;

Completerequests:成功的请求数;

简单测试:

ab -c 100 -n1000 http://localhost/index.php

通过这种方法可以对web服务器性能做出简单的评估。


9    参考

什么是mysqlnd?

mysqldnd(MySQL native driver)是由PHP源码提供的mysql驱动连接代码。它的目的是代替旧的libmysql驱动。

传统的安装php的方式中,我们在编译PHP时,一般指定以下几项:

--with-mysql=/usr/local/mysql\

--with-mysqli=/usr/local/mysql/bin/mysql_config\

--with-pdo-mysql=/usr/local/mysql/bin/mysql_config\

这实际上就是使用了MySQL官方自带的libmysql驱动,这是比较老的驱动,PHP 5.3开始已经不建议使用它了,而建议使用mysqlnd。

PDO与mysqlnd, libmysql又是何种关系?

PDO是一个应用层抽象类,底层和MySQL server连接交互需要MySQL驱动的支持。也就是说无论你使用了何种驱动,都可以使用PDO。

PDO是提供了PHP应用程序层API接口,而mysqlnd、libmysql则负责与MySQL server进行网络协议交互(它并不提供php应用程序层API功能)。

为什么使用mysqlnd驱动?

1. 传统的PHP访问MySQL数据库,是通过MySQL数据库的libmysql client库,这个libmysql client是用C/C++编写的,虽然一直以来PHP通过libmysql访问数据库性能也一直很好,但是却无法利用PHP本身的很多特性。

mysqlnd提供了和Zend引擎高度的集成性,更加快速的执行速度,更少的内存消耗,利用了PHP的Stream API,以及客户段缓存机制。由于mysqlnd是透过Zend引擎,因此提供更多高级特性,以及有效利用Zend进行加速,原理图如下:

从上图可以看出来,libmysql是直接访问数据库的,而mysqlnd是通过Zend访问数据库。

2. libmysql驱动是由MySQL AB公司(现在是oracle公司)编写,并按MySQL license许可协议发布,所以在PHP中默认是被禁用的。而mysqlnd是由php官方开发的驱动,以php license许可协议发布,故就规避了许可协议和版权的问题。

3. mysqlnd内置于PHP源代码,故在编译安装php时就不需要预先安装MySQL server也可以提供MySQL client API (mysql_connect、pdo、mysqli),这将减化一些工作量。

4. 一些新的或增强的功能

增强的持久连接

引入特有的函数mysqli_fetch_all()

引入一些性能统计函数 mysqli_get_cache_stats(), mysqli_get_client_stats(),mysqli_get_connection_stats(),上述函数,可很容易分析mysql查询的性能瓶颈。

SSL支持(从php 5.3.3开始有效)

压缩协议支持

命名管道支持(php 5.4.0开始有效)

怎么安装mysqlnd驱动?

编译php时,修改以下几个项参数即可,提示: 如果使用mysqlnd,并不需要预先安装mysql

--with-mysql=mysqlnd\

--with-mysqli=mysqlnd\

--with-pdo-mysql=mysqlnd\

如果在phpinfo输出的mysql项中发现client API Version : mysqlnd,说明mysqlnd驱动安装成功。

0 0