1. 云栖社区>
  2. PHP教程>
  3. 正文

CentOS 7系统上yum搭建LAMP(超详细版)

作者:用户 来源:互联网 时间:2017-12-01 20:23:22

centosyum系统lamp搭建详细

CentOS 7系统上yum搭建LAMP(超详细版) - 摘要: 本文讲的是CentOS 7系统上yum搭建LAMP(超详细版),LAMP是Linux+Apache+MySQL+PHP的简称,是用于搭建web服务器的一种解决方案。虽然从RHEL 7开始Red Hat公司推荐使用MariaDB而不是MySQL,但在我这篇文章当中,我还是决定继续使用MySQL。 在本文档

LAMP是Linux+Apache+MySQL+PHP的简称,是用于搭建web服务器的一种解决方案。虽然从RHEL 7开始Red Hat公司推荐使用MariaDB而不是MySQL,但在我这篇文章当中,我还是决定继续使用MySQL。

在本文档中,我使用CentOS 7来搭建LAMP平台。系统安装时选择的是basic server版本,详细版本号为CentOS 7.0.1406,核心版本号为3.10.0-123.el7.x86_64。CentOS 7系统安装在虚拟机上,IP为172.31.2.2,其可与物理机正常通信。本文档所涉及的所有操作均使用root账号进行。


这篇文章只是我个人学习的总结,主要参考了鸟哥的Linux私房菜和各软件的官方文档,但因为本人对PHP技术和数据库技术可以说基本不了解,所以里面可能会有一些设定不很清楚或优化不到位的地方,敬请知晓。

安装Apache软件


Apache软件的软件包名称叫做httpd,因此,要安装Apache软件,就使用下述命令:


[[email protected] ~]#yum install httpd


CentOS 7系统上yum搭建LAMP(超详细版)


AllowOverride none


Require all denied



//和:用于设定指定目录(这里是系统根目录)的访问权限。目录路径那里可以使用绝对


//路径和相对路径,还可以搭配使用通配符和正则表达式。


//AllowOverride:如果指定目录下(这里是系统根目录)存在一个.htaccess文件,那么AllowOverride设定的是,该文件里面的


//设置是否能够覆盖这部分的设置,或该文件里面的设置可以覆盖的是这部分的哪些设置。none表示不


//允许进行覆盖。


//Require:设定哪些用户可以访问该目录(这里是系统根目录)。all denied表示不允许访问该目录。



DocumentRoot "/var/www/html"


//设定网页存放目录。比如说,访问http://host/index.html实际上就是访问这个host的/var/www/html/index.html这个文档。




AllowOverride None


Require all granted //all granted表示可无条件访问该目录。





Options FollowSymLinks


AllowOverride None


Require all granted



//Options:用于设定在该目录中哪些特性可用。FollowSymLinks,让该目录下的符号链接可以生效。默认这里还有个Indexes选


//项,建议拿掉。它的作用是,当浏览器访问该目录(而非该目录下的某一个档案)时,如果该目录下没有默认网页(如index.html),


//那么此时就会返回该目录下的文件名列表




DirectoryIndex index.html



//和:如果Apache有加载这里指定的模块,那么Apache就会对它们之间的语句进行处理。


//也可以使用和,那么就表示没有加载指定的模块时才进行处理。


//这里的模块可以是模块ID(如rewrite_module),也可以是模块文件名(如mod_rewrite.c)。


//DirectoryIndex:这就是设置默认网页的,即当浏览器访问某一个目录时,会返回该目录下的index.html文件(如果存在的话)。


//也可以接多个档名,如DirectoryIndexindex.html index.htm index.cgi index.pl,这样就会返回找到的第一个文件。




Require all denied



//和:对指定文件名的文件应用这里指定的语句。


//这里的语句的意思是:任意目录下,文件名符合.ht*的文件都会被禁止访问。



ErrorLog "logs/error_log" //错误日志所在文档为/etc/httpd/logs/error_log


LogLevel warn //设置日志记录级别




LogFormat "%h %l %u %t /"%r/" %>s %b/"%{Referer}i/" /"%{User-Agent}i/"" combined


LogFormat "%h %l %u %t /"%r/" %>s %b" common



LogFormat "%h %l %u %t /"%r/" %>s %b/"%{Referer}i/" /"%{User-Agent}i/" %I %O" combinedio



CustomLog "logs/access_log" combined //客户端访问服务器的日志会记在/etc/httpd/logs/access_log





ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"



//ScriptAlias会将URL路径映射到指定目录,并且让该目录具有CGI脚本执行权限(因此CGI脚本都可放置在该目录下)。


//以这里的设定举个例子,假如在浏览器中输入http://example.com/cgi-bin/foo,此时就会执行/var/www/cgi-bin/foo这个


//CGI脚本。




AllowOverride None


Options None


Require all granted




//这部分是关于MIME的


TypesConfig /etc/mime.types


AddType application/x-compress .Z


AddType application/x-gzip .gz .tgz


AddType text/html .shtml


AddOutputFilter INCLUDES .shtml




AddDefaultCharset Off


//AddDefaultCharset会强制客户端浏览器使用指定的字符集编码方式。这可能会有问题,所以要将它关闭。实际上,所使用的编


//码方式在网页里有声明。




MIMEMagicFile conf/magic




EnableSendfile on//允许Apache使用系统核心支持的sendfile来传送文件给客户端


IncludeOptional conf.d/*.conf //在/etc/httpd/conf.d目录下以.conf结尾的配置文件也会被读取

从上面也可以知道,默认情况下,网页文档可以放置在/var/www/html目录下,CGI脚本可以放置在/var/www/cgi-bin目录下;错误日志在/etc/httpd/logs/error_log,访问日志在/etc/httpd/logs/access_log。

设定好配置文件后,要测试配置文件语法有没有问题,可使用命令:


[[email protected] ~]#apachectl configtest


然后,重启httpd服务:


[[email protected] ~]#systemctl restart httpd

安装PHP


使用以下命令安装PHP软件:


[[email protected] ~]#yum install php


CentOS 7系统上yum搭建LAMP(超详细版)


从上图可以看到,安装的PHP版本为5.4版。


安装完成后,PHP会生成配置文件/etc/httpd/conf.d/php.conf,因为该配置文件在/etc/httpd/conf.d目录下,所以它会被Apache所读取。PHP还会生成配置文件/etc/httpd/conf.modules.d/10-php.conf,该配置文件也会被Apache所读取,它的设定让Apache可以加载PHP模块。不过,PHP软件本身的配置文件其实是/etc/php.ini。

下面介绍一下配置文件/etc/httpd/conf.d/php.conf:



SetHandler application/x-httpd-php



//和:文件名与正则表达式相匹配的文件,将适用这里设定的语句。


//SetHandler:强制所有匹配的文件使用指定handler进行处理。



AddType text/html .php //设定扩展名为.php的档案的类型为text/html


DirectoryIndex index.php //默认网页档名增加index.php


php_value session.save_handler"files"


php_value session.save_path "/var/lib/php/session"

下面介绍一下配置文件/etc/httpd/conf.modules.d/10-php.conf:



LoadModule php5_module modules/libphp5.so



//如果Apache使用的多处理模块(MPM)是prefork(默认),那么Apache就会加载LoadModule指定的模块(PHP模块)

最后,来看看配置文件/etc/php.ini。在该文件的开头处,有说明针对生产环境和开发环境,有一些设定值可以进行修改,以提高PHP的效能。假设该web服务器是用于生产环境的,将下面的这些设定值改成这样(或确认这些设定值是这样的):


display_errors = Off //当发生错误时,不将错误信息显示出来(到浏览器上)


display_startup_errors = Off //不将PHP启动时发生的错误信息显示出来(到浏览器上)


error_reporting = E_ALL &~E_DEPRECATED & ~E_STRICT //这一项设定PHP会告知的错误或信息类型


html_errors = On //当PHP显示或记录错误信息时,将该信息格式化成HTML格式


log_errors = On //这让PHP可以将错误信息日志记录到日志文件里


ignore_repeated_errors = On //忽略重复的错误信息


ignore_repeated_source = On //当忽略重复的错误信息时忽略信息源


post_max_size = 25M //PHP所允许的POST数据的最大值。可按照需要进行调整


file_uploads = On //允许文件上传,默认为On


upload_max_filesize = 20M //上传文件所允许的最大值。可按照需要进行调整


memory_limit = 128M //PHP可用的最大内存。可按照需要进行调整

然后,重启httpd服务:


[[email protected]~]#systemctl restart httpd

为了测试Apache能不能正常调用PHP,在/var/www/html目录下新建一个phpinfo.php文档,内容如下所示:


CentOS 7系统上yum搭建LAMP(超详细版)


其中的<?php ?>是PHP程序的语法,phpinfo ();则是PHP程序提供的一个函式库,该函式库可以显示出你这个web服务器的相关信息。然后,使用浏览器来访问服务器的这个文件,看看页面能不能正常打开。如果正常的话,应该可以看到下面这个页面:


CentOS 7系统上yum搭建LAMP(超详细版)


测试完后,因为这个页面里面的信息还挺重要的,所以应该把phpinfo.php这个档案删除。

安装MySQL


由于从RHEL 7开始Red Hat公司推荐使用MariaDB替换MySQL,因此默认情况下,并没有提供MySQL的安装包,也就是没办法直接使用yum命令安装MySQL软件。为了要安装MySQL,我选择的是去官网http://dev.mysql.com/downloads/repo/yum/下载安装包,不过在下载之前需要先注册。因为使用的是CentOS 7系统,所以我下载的是mysql-community-release-el7-5.noarch.rpm这个文件。下载下来后,将它放在/root目录下,然后使用命令:


[[email protected] ~]#yum localinstall mysql-community-release-el7-5.noarch.rpm


使用上面这个命令可以将MySQL Yum Repository添加到系统的软件库列表(repositorylist)。然后可以使用下面的命令检查添加是否成功:


[[email protected] ~]#yum repolist enabled | grep mysql


然后,使用下面的命令安装MySQL:


[[email protected] ~]#yum install mysql-community-server


CentOS 7系统上yum搭建LAMP(超详细版)


如上图所示,这个命令会安装MySQL server,附带的,它会安装一些支撑软件,包括MySQL client、共享客户端库(mysql-community-libs)等软件。注意到,这里安装的MySQL版本为5.6版。


安装完成后,启动mysqld服务并将其设为开机启动:


[[email protected] ~]#systemctl start mysqld


[[email protected] ~]#systemctl enable mysqld

然后,检查mysqld服务状态:


[[email protected] ~]#systemctl status mysqld


查看mysqld服务侦听端口:


[[email protected] ~]#netstat -atulpn | grep mysqld


CentOS 7系统上yum搭建LAMP(超详细版)


如上图所示,MySQL侦听tcp端口3306。但因为防火墙并未放通该端口,所以从其它设备上是无法访问本服务器的MySQL数据库的。但因为这里的MySQL也仅是提供给本机的PHP使用的,所以也就不必放通tcp端口3306。

根据MySQL官方手册,建议安装完MySQL数据库后使用下面的命令来增强数据库的安全性:


[[email protected] ~]#mysql_secure_installation


该命令程序可以协助你设置数据库root账号的密码,移除匿名用户账号,是否允许远程登录root账号,移除自带的test数据库,最后还会问你是否要重新加载特权表以让修改生效。我是设置了数据库root账号密码,其它的都选是(Y)。


如果不想使用上面的命令,那可以使用下面的命令来给root账号设置密码,回车后它会提示你输入密码的:


[[email protected] ~]#mysqladmin -u root password


如果要修改root账号的密码,可使用下面的命令,回车后,它会提示你输入密码,然后再设置新密码:


[[email protected] ~]#mysqladmin -u root -p password

用root账号进入MySQL管理后台,它会提示你输入密码:


[[email protected] ~]#mysql -u root –p


创建本地用户:


mysql>create user '用户名'@'localhost'identified by'密码';


创建新数据库:


mysql>create database数据库名;


将指定数据库的所有权限授给指定用户:


mysql>grant all privileges on数据库名.* to'用户名'@'localhost';


刷新系统权限表:


mysql>flush privileges;


进入mysql数据库(系统自带),并查询是否存在指定用户(如果有出现一堆东西,则表明存在):


mysql>use mysql;


mysql>select * from user where user = '用户名';


如果要删除本地用户,使用:


mysql>drop user '用户名'@'localhost';


如果要删除数据库,使用:


mysql>drop database数据库名;


查看存在的数据库:


mysql>show databases;


退出MySQL管理后台:


mysql>exit

下面为实际所进行的操作:


[[email protected] ~]# mysql -u root -p


Enter password:


mysql> create user'myuser'@'localhost' identified by '1234'; //新建本地用户myuser,密码为1234


mysql> create database mydb; //新建数据库mydb


mysql> grant all privileges on mydb.*to [email protected]; //将数据库mydb的所有权限授权给本地用户myuser


mysql> flush privileges; //刷新系统权限表


mysql> use mysql;//进入数据库mysql(该数据库为系统自带)


mysql> select * from user where user ='myuser';//查询数据库mysql中是否存在用户myuser


mysql> show databases;//显示所有已有的数据库


mysql> exit


上面设定好后,就可以使用myuser这个账号登录MySQL了,并且可以发现该用户拥有一个数据库mydb。

关于MySQL,还需要知道:


/etc/my.cnf:这是MySQL的配置文件。不过,因为我还玩不转MySQL,所以先暂时不动它。


/var/lib/mysql:这是数据库实际存放目录。毫无疑问,不能删,并且,要注意,给予其所在分区足够的容量。


/var/log/mysqld.log:这是MySQL的错误日志文件。

安装php-mysql


php-mysql是一个用于让PHP程序使用MySQL数据库的模块。要安装该模块,使用命令:


[[email protected] ~]#yum install php-mysql


CentOS 7系统上yum搭建LAMP(超详细版)


然后,重启httpd服务:


[[email protected] ~]#systemctl restart httpd

为了测试PHP能否连接到MySQL数据库,在/var/www/html目录下新建一个文档test.php。因为之前已经在MySQL中新建了一个数据库mydb,并给这个数据库建了个用户myuser,密码是1234,所以test.php的内容是这样的:


[[email protected] ~]# vim /var/www/html/test.php


<?php


$mydbhost = 'localhost'; //数据库服务器


$mydbuser = 'myuser'; //用户名


$mydbpwd = '1234'; //密码


$mydbname = 'mydb'; //数据库名称



$db =mysql_connect($mydbhost,$mydbuser,$mydbpwd) or die(‘Cannot find the database.’);


mysql_select_db($mydbname,$db) or die(‘Cannotconnect the database.’);



?>



Everything is OK!


上面这个测试页面的内容纯粹是我百度出来的,不过测试后的确有用。在浏览器中访问test.php这个页面,如果测试失败的话(可以试着改一下用户名或数据库名称),那么就会显示Cannot find the database或Cannot connect the database;如果测试成功的话,就会显示Everythingis OK!。如下所示:


CentOS 7系统上yum搭建LAMP(超详细版)


不过,虽然测试成功了,但查看Apache的错误日志文件,还是发现有报错“mysql_connect():Headers and client library minor version mismatch”。百度了一下,说是使用PHP5运行旧式PHP程序代码出现的兼容性问题。解决方法是,使用php-mysqlnd模块来代替php-mysql模块。即执行yum remove php-mysql和yum install php-mysqlnd,然后重启httpd服务。然后再测试,发现的确没有再报错。不过,因为我不是网页开发人员,所以暂时不确定使用php-mysqlnd这个模块会不会有什么其它的问题,所以就只是把这个问题写在这了。

修改SELinux规则


有可能未来Apache需要进行联机工作,那么就先修改一下,让SELinux规则放行:


[[email protected] ~]#setsebool -P httpd_can_network_connect=1


然后确认一下修改是否生效:


[[email protected] ~]#getsebool httpd_can_network_connect

安装PHP缓存器XCache


其实,到上面那里为止,基本的LAMP平台已经架设好了。但为了优化LAMP平台,所以还需要进行一些工作。XCache是一款开源的PHP缓存器/优化器,它通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 使客户端访问时服务器能够直接使用缓冲区已编译的代码从而提高速度,同时降低服务器负载。到我写这篇文章为止,XCache最新的版本为3.2.0。我选择使用官网提供的源码来安装XCache。

由于我这台服务器在安装系统时是以最小化模式安装的,所以要使用源码,得先安装编译器:


[[email protected] ~]#yum install gcc


再安装php-devel,它用于让PHP可以支持扩展工具(如XCache):


[[email protected] ~]#yum install php-devel


CentOS 7系统上yum搭建LAMP(超详细版)


然后,使用XCache官网提供的源码来安装XCache:


[[email protected] ~]# wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz


[[email protected] ~]# tar -zxfxcache-3.2.0.tar.gz


[[email protected] ~]# cd xcache-3.2.0


[[email protected] xcache-3.2.0]# phpize --clean


[[email protected] xcache-3.2.0]# phpize


[[email protected] xcache-3.2.0]# ./configure--enable-xcache


[[email protected] xcache-3.2.0]# make


[[email protected] xcache-3.2.0]# make install


[[email protected] xcache-3.2.0]# cat xcache.ini>> /etc/php.ini


//千万注意,有两个>号,表示把xcache.ini的配置追加到php.ini后面。如果只有一个>号,会把php.ini原有的配置覆盖掉。


//建议在操作前可以先备份/etc/php.ini文件。


然后,重启httpd服务:


[[email protected] ~]#systemctl restart httpd


这样就安装完了,那怎么确认XCache有没有正常运行呢。在我这篇文章的前面部分,不是有使用一个phpinfo.php页面吗。就打开那个页面,搜索xcache,应该可以搜索到关于XCache的相关信息,可以看到XCache是enabled的:


CentOS 7系统上yum搭建LAMP(超详细版)

另外,其实XCache有提供管理后台。如果要使用XCache管理后台,可以这样做。首先,在/var/www/html目录下新建一个档案,假设为account.php,将这个档案的内容该成如下所示:


[[email protected] ~]# vim/var/www/html/account.php


<?php


echo md5("1234"); //双引号内可以填入你想要使用的密码


?>


然后,从浏览器访问这个页面,可以得到一串数字和字母的组合,我得到的是81dc9bdb52d04dc20036dbd8313ed055。然后,再修改/etc/php.ini中的这两个设定的值:


xcache.admin.user ="admin" //双引号内可以填入你想要使用的用户名


xcache.admin.pass ="81dc9bdb52d04dc20036dbd8313ed055" //双引号内填入刚刚得到的那串组合


再将XCache安装包里面的htdocs整个目录复制到/var/www/html目录下:


[[email protected] ~]# cp -a/root/xcache-3.2.0/htdocs /var/www/html


修改目录htdocs及其子目录和档案的所属用户和组,我选择将其都改为root:


[[email protected] ~]# chown -R root:root/var/www/html/htdocs


使用restorecon命令来重置目录htdocs及其子目录和档案的SELinux相关设定:


[[email protected] ~]# restorecon -Rv/var/www/html/htdocs


最后,使用浏览器访问地址http://服务器IP/htdocs/,然后输入你设定的用户名和密码,就可以打开XCache的管理后台了:


CentOS 7系统上yum搭建LAMP(超详细版)

补充信息:关于重启httpd服务

有三种方法可以重启httpd服务:


1、若要完全重启httpd服务:


[[email protected] ~]#systemctl restart httpd.service


该命令会中断正在运行的httpd进程。在安装或移除一个动态加载模块(如PHP)后,需要使用此命令。

2、让httpd服务重新读取它的配置文件:


[[email protected] ~]#systemctl reload httpd.service


该命令会让httpd重新加载配置文件,同时也会中断httpd进程的运行。

3、让httpd服务重新读取它的配置文件并且不影响httpd服务的运行:


[[email protected] ~]#apachectl graceful


该命令会让httpd重新加载配置文件,并且不会中断httpd服务。但现有的http请求将会继续使用旧的配置。



以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索centos , yum , 系统 , lamp , 搭建 详细 ,以便于您获取更多的相关知识。