CentOS 7 yum搭建 LAMP

CentOS 7 搭建LAMP环境

1. Apache 安装

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

[root@localhost ~]# yum -y install httpd

安装完成后Apache是以httpd服务的形式存在的。

启动Apache

[root@localhost ~]# systemctl start httpd.service

设置Apache为开机启动

[root@localhost ~]# systemctl enable httpd.service

检查httpd服务状态

[root@localhost ~]# systemctl status httpd.service

● httpd.service - The Apache HTTP Server  
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)  
Active: active (running) since Tue 2017-02-21 00:47:39 PST; 17h ago  
  Docs: man:httpd(8)  
        man:apachectl(8)  
Process: 7594 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)  
Main PID: 7673 (httpd)
Status: "Total requests: 5; Current requests/sec: 0; Current traffic:   0 B/sec"  
CGroup: /system.slice/httpd.service  
        ├─7673 /usr/sbin/httpd -DFOREGROUND  
        ├─7674 /usr/sbin/httpd -DFOREGROUND  
        ├─7675 /usr/sbin/httpd -DFOREGROUND  
        ├─7676 /usr/sbin/httpd -DFOREGROUND  
        ├─7677 /usr/sbin/httpd -DFOREGROUND  
        ├─7678 /usr/sbin/httpd -DFOREGROUND  
        ├─7758 /usr/sbin/httpd -DFOREGROUND  
        └─7806 /usr/sbin/httpd -DFOREGROUND  
Feb 21 00:47:39 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...  
Feb 21 00:47:39 localhost.localdomain httpd[7673]: AH00558: httpd: Could not reliably ...e  
Feb 21 00:47:39 localhost.localdomain systemd[1]: Started The Apache HTTP Server.  
Hint: Some lines were ellipsized, use -l to show in full.  

如以上结果所示, 'loaded'项 中的 'enabled' 表示httpd服务已经设为开机启动;'Active'项中的'active(running)'则表示httpd服务正在运行中。

由于HTTP协议使用TCP端口80,因此防火墙要放通TCP端口80:

[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent

success 

重启防火墙使更改立即生效

[root@localhost ~]# firewall-cmd --reload

success

查询防火墙当前开放端口,检查配置是否成功

[root@localhost ~]# firewall-cmd --list-all

public (default, active)
interfaces: eno16777736  
sources:   
services: dhcpv6-client ssh  
ports: 80/tcp    
masquerade: no  
forward-ports:   
icmp-blocks:   
rich rules:   

如以上结果显示,'ports'项中显示 '80/tcp'表示TCP端口80已放通。

设置Apache配置文件

Apache主配置文件为 /etc/httpd/conf/httpd.conf
另外 /etc/httpd/conf.d目录下以.conf结尾的配置文件也会被读取;可加载模块的配置文件应放置在/etc/httpd/conf.modules.d目录下,并且也以.conf结尾

ServerRoot "/etc/httpd"                      //服务器根目录:本配置文件中没有使用绝对路径的地方,都认为是在该目录下                
Listen 80                                    //侦听80端口                                                                                                                                                                                                                
Include conf.modules.d/*.conf                                                                      
//该设定让/etc/httpd/conf.modules.d目录下以.conf结尾的配置文件也会被读取进来。DSO对象的配置文件应放置在此目录下       
User apache                                                                                                                                                             
Groupapache                                                                                                                                                           
//当你使用浏览器访问web服务器时,会产生相应的httpd进程,该进程所属的用户和组就由这里设定。                                       
//从这里开始,下面的设定适用于“主”服务器,与虚拟主机区别开来。但如果<VirtualHost>部分未设定这些值,也会使用这些值  
ServerAdmin root@localhost                 //系统管理员的邮箱。改成自己的邮箱即可。                                                         
ServerName www.speedsnail.com            //设置主机名。生产环境中,该主机名应该是能被正确解析成这台服务器的IP的。       

<Directory />                                                                                                                                                           
AllowOverride none                                                                                                                                               
Require all denied                                                                                                                                                  
</Directory>                                                                                                                                                            

//<Directory 目录路径>和</Directory>:用于设定指定目录(这里是系统根目录)的访问权限。目录路径那里可以使用绝对         
//路径和相对路径,还可以搭配使用通配符和正则表达式。                                                                                                  
//AllowOverride:如果指定目录下(这里是系统根目录)存在一个.htaccess文件,那么AllowOverride设定的是,该文件里面的     
//设置是否能够覆盖<Directory>这部分的设置,或该文件里面的设置可以覆盖的是<Directory>这部分的哪些设置。none表示不    
//允许进行覆盖。                                                                                                                                                        
//Require:设定哪些用户可以访问该目录(这里是系统根目录)。all denied表示不允许访问该目录。                                       

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

<Directory "/var/www">                                                                                                                                             
AllowOverride None                                                                                                                                                
Require all granted                        //all granted表示可无条件访问该目录。                                                                   
</Directory>                                                                                                                                                             

<Directory"/var/www/html">                                                                                                                                       
Options FollowSymLinks                                                                                                                                          
AllowOverride None                                                                                                                                                
Require all granted                                                                                                                                                 
</Directory>                                                                                                                                                             

//Options:用于设定在该目录中哪些特性可用。FollowSymLinks,让该目录下的符号链接可以生效。默认这里还有个Indexes选     
//项,建议拿掉。它的作用是,当浏览器访问该目录(而非该目录下的某一个档案)时,如果该目录下没有默认网页(如index.html),
//那么此时就会返回该目录下的文件名列表。                                                                                                                    

<IfModule dir_module>                                                                                                                                             
DirectoryIndex index.html                                                                                                                                        
</IfModule>                                                                                                                                                             

//<IfModule 模块>和</IfModule>:如果Apache有加载这里指定的模块,那么Apache就会对它们之间的语句进行处理。            
//也可以使用<IfModule!模块>和</IfModule>,那么就表示没有加载指定的模块时才进行处理。                                              
//这里的模块可以是模块ID(如rewrite_module),也可以是模块文件名(如mod_rewrite.c)。                                               
//DirectoryIndex:这就是设置默认网页的,即当浏览器访问某一个目录时,会返回该目录下的index.html文件(如果存在的话)。   
//也可以接多个档名,如DirectoryIndexindex.html index.htm index.cgi index.pl,这样就会返回找到的第一个文件。                   
                                                                                                                                                                            
<Files ".ht*">                                                                                                                                                             
Require all denied                                                                                                                                                   
</Files>                                                                                                                                                                    
//<Files 文件名>和</Files>:对指定文件名的文件应用这里指定的语句。                                                                              
//这里的语句的意思是:任意目录下,文件名符合.ht*的文件都会被禁止访问。                                                                         

ErrorLog "logs/error_log"                           //错误日志所在文档为/etc/httpd/logs/error_log                                             
LogLevel warn                                     //设置日志记录级别                                                                                            
                                                                                                                                                                            
<IfModule log_config_module>                                                                                                                                  
    LogFormat "%h %l %u %t \"%r\" %>s %b\"%{Referer}i\" \"%{User-Agent}i\"" combined                                               
    LogFormat "%h %l %u %t \"%r\" %>s %b" common                                                                                                  
    <IfModule logio_module>                                                                                                                                       

    LogFormat "%h %l %u %t \"%r\" %>s %b\"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio                               
    </IfModule>                                                                                                                                                          
    CustomLog "logs/access_log" combined        //客户端访问服务器的日志会记在/etc/httpd/logs/access_log                       
</IfModule>                                                                                                                                                             

<IfModule alias_module>                                                                                                                                           
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"                                                                                                                   
</IfModule>                                                                                                                                                             

//ScriptAlias会将URL路径映射到指定目录,并且让该目录具有CGI脚本执行权限(因此CGI脚本都可放置在该目录下)。                
//以这里的设定举个例子,假如在浏览器中输入http://example.com/cgi-bin/foo,此时就会执行/var/www/cgi-bin/foo这个         
//CGI脚本。                                                                                                                                                               

<Directory"/var/www/cgi-bin">                                                                                                                                   
    AllowOverride None                                                                                                                                                
    Options None                                                                                                                                                         
    Require all granted                                                                                                                                                 
</Directory>                                                                                                                                                             

<IfModule mime_module>                             //这部分是关于MIME的                                                                            
    TypesConfig /etc/mime.types                                                                                                                                   
    AddType application/x-compress .Z                                                                                                                         
    AddType application/x-gzip .gz .tgz                                                                                                                          
    AddType text/html .shtml                                                                                                                                         
    AddOutputFilter INCLUDES .shtml                                                                                                                             
</IfModule>                                                                                                                                                             

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

<IfModule mime_magic_module>                                                                                                                               
MIMEMagicFile conf/magic                                                                                                                                     
</IfModule>                                                                                                                                                             
                                                                                                                                                                            
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

注:每次修改Apache配置文件之后都要重启服务器以让修改生效

测试配置文件语法有没有问题可用以下命令:

[root@localhost ~]#apachectl configtest

重启Apache 即 httpd服务

[root@localhost ~]#systemctl restart httpd

2. PHP安装

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

[root@localhost ~]#yum -y install 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

<FilesMatch \.php$>                                                                                                                                       
    SetHandler application/x-httpd-php                                                                                                               
</FilesMatch>                                                                                                                                                

//<FilesMatch 正则表达式>和</FilesMatch>:文件名与正则表达式相匹配的文件,将适用这里设定的语句。                   
//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/php.ini

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服务

[root@localhost ~]# systemctl restart httpd

为了测试Apache能否正常解析PHP文件,在/ver/www/html目录下新建一个testphp.php文档,内容如下:

<?php
    phpinfo();
?>

phpinfo();是PHP提供的一个函式库,该函式库可以显示出你这个web服务器的相关信息,及PHP的一些模块加载情况。
测试完成后及时删除testphp.php这个文档

3. 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这个文件。
下载地址:http://repo.mysql.com/
下载下来后,将它放在/root目录下,然后使用命令:

[root@localhost ~]# yum localinstall mysql-community-release-el7-5.noarch.rpm

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

[root@localhost ~]# yum repolist enabled | grep mysql

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

[root@localhost ~]# yum install mysql-community-server

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

[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# systemctl enable mysqld

如果需要远程访问数据库,需要防火墙放通TCP端口3306

[root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent

success

重启防火墙使更改立即生效

[root@localhost ~]# firewall-cmd --reload

success

检查mysqld服务状态

[root@localhost ~]# systemctl status mysqld

查看mysqld服务侦听的端口

[root@localhost ~]# netstat -atlpn | grep mysqld

tcp6       0      0 :::3306                 :::*                    LISTEN      2388/mysqld   

从以上结果可以看出,MySQL侦听tcp端口3306。

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

[root@localhost ~]# mysql_secure_installation

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

[root@localhost ~]# mysqladmin -u root password

如果要修改root账号的密码可以使用以下命令:

[root@localhost ~]# mysqladmin -u root -p password

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

[root@localhost ~]# mysql -u root -p

创建本地用户:

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

注:MySQL命令输入完成后需要在最后加上分号(;)标识,回车开始执行命令

创建新数据库:

mysql> create database 数据库名;

进入数据库

mysql> use 数据库名;

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

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

允许使用root远程访问数据库

1.设置root远程访问权限
 mysql> use mysql;
 mysql> update user set host='%' where host='localhost' and user='root';
 2.授权
 mysql> grant all privileges on . to 'root'@'%' identified by '密码';

刷新系统权限表:

mysql> flush privileges;

退出MySQL管理后台:

mysql> exit;

MySQL的一些文件位置
/etc/my.cnf : 这是MySQL的配置文件。
/var/lib/mysql : 这是数据库实际存放目录。不能删除,并且要给予所在分区足够容量
/var/log/mysqld.log :这是MySQL的错误日志文件。

安装php-mysqlnd

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

[root@localhost ~]# yum -y install php-mysqlnd

然后重启httpd服务:

[root@localhost ~]# systemctl restart httpd

为了测试php能否正常连接数据, 在/var/www/html 目录下创建文档testmysql.php,内容如下:

<?php
    $mydbhost = 'localhost'; // 数据库服务器
    $mydbuser = 'root';     // 用户名
    $mydbpwd = '123456';    // 密码

    $db = mysql_connect($mydbhost, $mydbuser, $mydbpwd) or die('Cannot find the database server.');
    echo 'Everything is OK!';
?>

修改SELinux规则

Apache如果要进行联机工作,需要让SELinux规则放行:

[root@localhost ~]# setsebool -P httpd_can_network_connect=1

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

[root@localhost ~]# getsebool httpd_can_network_connect

posted @ 2017-02-23 17:27  Jaakko  阅读(222)  评论(0)    收藏  举报