LAMP基于RPM包安装详解

1.LAMP介绍

    Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。本文所介绍的是Linux+Apache+MariaDB+PHP,基于RPM包安装的部署过程LAMP这个名词,用来指代Linux 操作系统、Apache网络服务器、MySQL 数据库和PHP (Perl或Python)脚本语言的组合(由四种技术的开头字母组成)。Linux+Apache+Mysql+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。

从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案.

平台组成 :

 LAMP 平台由几个组件组成,呈分层结构。每一层都提供了整个软件栈的一个关键部分:

 

  Linux:Linux 处在最低层,提供操作系统。其他每个组件实际上也在其上运行。但是,并不一定局限于Linux,如有必要,其他操作系统也可以实现,例如:Windows、Mac OS X 或 UNIX。

  Apache:次低层是 Apache,它是一个 Web 服务器。Apache 提供可让用户获得 Web 页面的机制。Apache 是一款稳定的、支持关键任务的服务器,Internet 上超过 65% 的网站都使用它作为 Web 服务器。

 

  PHP:PHP 是一门简单而有效的编程语言,它像是粘合剂,可以将 LAMP 系统所有其他的组件粘合在一起。您可以使用 PHP 编写能访问 MySQL 数据库中的数据和 Linux 提供的一些特性的动态内容。

 Perl:Perl 是一种脚本语言。这表示它并不编译成可执行程序,而是在运行时进行解释的一组指令(脚本)。Perl 现在用来执行许多任务。它也许是用于在 Web 上进行 CGI(公共网关接口)编程最流行的语言。其原因就是 Perl 是一种功能非常强大的文本处理器,而 Web 编程主要就是文本处理。另外,使用 Perl 通常比使用 C/C++、Java 或 Tcl 更简单,而且它比 Python 更早出现。Perl被称为是一种“胶水语言”。所谓胶水语言,也就是说它是可以用来将许多元素连接在一起的语言。

Python:Python一种交互式面向对象的解释型编程语言。 Python使用非常清晰的语法实现非常强大的功能。它具有模块、类、意外处理以及非常高级别的动态数据类型和动态定义。并且,它具有接口和库函数供多种系统调用。内建模块还可以使用C或C++语言方便地编写。对于用户界面的编程,Python同样能够胜任。 Python可以运行在Linux 、UNIXWindowsDOS、OS/2、Mac以及Amiga等等多种环境下。 Python虽然有版权,但完全可以免费使用和分发,甚至是为了商业用途。

安装:  早期安装一个LAMP系统是比较复杂的,随着Linux的普及现在安装一个LAMP系统变得比较简单另外许多Linux发行版本(Redhat 、Debian)安装时可以自动配置Apache、php、mysql等组件。



2.环境描述


操作系统 IP地址 系统环境 用途
CentOS 7.1
172.18.20.10/16
最小化安装 Web服务器
CentOS 7.1 172.18.20.11/16 最小化安装 Mariadb服务器
CentOS 6.7 172.18.20.20/16 最小化安装 私有CA
CentOS 6.7 172.18.20.21/16 最小化安装 DNS服务器
WIN 10
172.18.20.1/1 - 客户端主机

    为保证环境不出问题,已关闭iptables和selinux

Web服务器    用于提供web服务,php以模块的方式安装在Web服务器上。其中一个虚拟主机用于提供phpMyAdmin,另一个虚拟主机用于提供wordpress。


数据库服务器    用于给web服务器以及其他服务器提供数据存储等相关服务。


私有CA    数字证书认证中心的简称,指发放、管理、废除数字证书的机构,在本文中的作用是给web服务器颁发证书实现https。


DNS服务器    用于提供正向解析和方向解析等相关功能。


客户端主机    主要方便于各种测试。


3.安装部署

    3.1 mariadb服务器

1
2
3
4
5
6
7
8
yum -y  install  mariadb-server && systemctl start mariadb.service     ##安装并启动mariadb服务    
mysqladmin -uroot password  '123.com'               ## 设置mysql的root用户密码为 123.com
mysql -uroot -p123.com          ## 登陆mysql数据库               
create database wp_DB;    ## 创建wp_DB数据库    
GRANT ALL ON wp_DB.* TO  'ch123' @ '172.18.20.10'  IDENTIFIED BY  'qwer1234' ;   ## 允许来自172.18.20.10的主机的ch123用户对wp_DB数据做各种操作     
FLUSH PRIVILEGES;      ## 刷新配置命令    
SHOW DATABASES;        ## 确定数据库是否已创建成功    
SHOW GRANTS FOR  'ch123' @ '172.18.20.10' ;     ## 确认数据库授权是否成功

    

    3.2 DNS服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
yum -y  install  bind bind-utils    ## 安装bind程序和bind客户端工具         
vim  /etc/named .rfc1912.zones       ## 修改配置文件,添加一个正向解析区域                   
zone  "ch.com."  IN {                    
      type  master;                    
      file  "ch.com.zone" ;                    
      };        
vim  /var/named/ch .com.zone      ## 编辑区域配置文件                      
$TTL 3600                    
$ORIGIN ch.com.                    
@   IN SOA ns1.ch.com. dnsadmin.ch.com. (                        
          2016042101                        
          1H                        
          10M                       
          3D                        
          1D )                     
     IN NS ns1                
ns1 IN A 172.18.20.21                 
www IN A 172.18.20.10                 
web IN CNAME www        
named-checkconf && systemctl start named.service      ## 检查named配置文件,如果没问题则启动named服务        
ss -anlp |  grep  named     ## 确保tcp/53号端口是监听状态的        
dig  -t A www.ch.com @172.18.20.21     ## 测试DNS服务器是否能解析 www.ch.com

   

    3.3 私有CA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
( umask  077; openssl genrsa -out  /etc/pki/CA/private/cakey .pem 4096)     ## 创建私钥       
 
openssl req -new -x509 -key  /etc/pki/CA/private/cakey .pem -out  /etc/pki/CA/cacert .pem -days 3655     ## 生成自签证书                       
Country Name (2 letter code) [XX]:CN     ## 国家名称                      
State or Province Name (full name) []:Beijing    ## 州或省名称                      
Locality Name (eg, city) [Default City]:Beijing    ## 市区名称                      
Organization Name (eg, company) [Default Company Ltd]:CH    ## 组织名称                      
Organizational Unit Name (eg, section) []:Ops    ## 部门名称                      
Common Name (eg, your name or your server's  hostname ) []:CA22   ## 主机名称         
mkdir  -pv  /etc/pki/CA/ {certs,crl,newcerts}         
touch  /etc/pki/CA/ {serial,index.txt}         
echo  01 >  /etc/pki/CA/serial        ## 为CA提供所需的目录及文件         
openssl ca  - in   /tmp/httpd .csr  -out   /etc/pki/CA/certs/httpd .crt  -days  365    ## 当web服务器将证书请求发过来之后,给web服务器签署证书         
scp  /etc/pki/CA/certs/httpd .crt [email protected]: /etc/httpd/ssl    ## 将证书文件回传给web服务器

     

    3.4 Web服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
yum -y  install  httpd php php-mysql mod_ssl php-xcache    ## 安装web程序包、php程序包、php-mysql驱动、ssl模块         
vim  /etc/resolv .conf     ## 修改DNS指向配置文件                      
nameserver 172.18.20.11   ## 将DNS服务器改为上面配置的DNS服务器地址         
vim  /etc/httpd/conf/httpd .conf   ## 修改httpd主配置文件             <Directory />                 
     AllowOverride none                
     Require all granted    ## 改为允许所有主机访问             </Directory>            
#DocumentRoot "/var/www/html"    ## 禁用中心主机         
vim  /etc/httpd/conf .d /vhost .conf     ## 添加一个虚拟主机的配置文件         
DirectoryIndex index.php            
<VirtualHost 172.18.20.10:80>                
     ServerName web.ch.com                
     DocumentRoot  "/www/wp"           
<VirtualHost>         
mkdir  /var/log/wp             
mkdir  -pv  /www/wp     ## 创建虚拟主机所需目录         
httpd -t     ## 检查配置文件,如果显示“Syntax OK”  表示配置没有问题         
mkdir  -pv  /etc/httpd/ssl      ## 创建一个用来存放ssl证书的目录         
( umask   077; openssl  genrsa -out   /etc/httpd/ssl/httpd .key  4096)     ## 生成私钥文件    
openssl  req  -new  -key   /etc/httpd/ssl/httpd .key  -out  /etc/httpd/ssl/httpd .csr  -days  365    ## 生成证书请求,这里主机名一定要填https用到的主机名地址         
scp  /etc/httpd/ssl/httpd .csr [email protected]: /tmp/     ## 用可靠的方式将证书请求传输给CA主机         
vim  /etc/httpd/conf .d /ssl .conf     ## 编辑ssl配置文件             
<VirtualHost 172.18.20.10:443>                 
     DocumentRoot  "/www/ph"                 
     ServerName web.ch.com:443                           
     SSLCertificateFile  /etc/httpd/ssl/httpd .crt       ## 指明证书文件存储路径             
     SSLCertificateKeyFile  /etc/httpd/ssl/httpd .key      ## 指明私钥文件存储路径           
< /VirtualHost >         
mkdir  /www/ph      ## 创建https所需目录


4.整合测试

1
2
3
4
5
6
7
8
9
10
vim  /www/wp/index .php      ## 编写php连接mysql数据库代码         
<?php         
$conn = mysql_connect( '172.18.20.11' , 'ch123' , 'qwer1234' );    ## 此处填mariadb 授权的用户和密码         
if  ($conn)         
      echo  "OK" ;         
else         
       echo  "Failure" ;         
?>         
cp  /www/wp/index .php  /www/ph/        
systemctl start httpd.service     ## 启动httpd服务器

    在客户端将DNS服务器指向为172.18.20.21,然后浏览器上分别输入http://www.ch.com 和 https://web.ch.com 显示ok 则表示测试成功


5.安装网站程序

    5.1 wordpress

    这里www.ch.com虚拟主机用于提供wordpress;官方下载地址:    

https://cn.wordpress.org/


1
2
3
4
5
6
7
8
cp  wordpress-4.3.1-zh_CN.zip  /www/wp     ## 复制wordpress程序到/www/wp目录下     
cp  phpMyAdmin-4.4.14.1-all-languages.zip  /www/ph      ## 复制phpMyAdmind到/www/ph目录下   
cd  /www/wp/     ## 切换至/www/wp目录下     
unzip wordpress-4.3.1-zh_CN.zip      ## 执行解压     
chown  -R root:apache wordpress       ## 修改属组为apache用户     
chmod  -R g+w wordpress       ## 给apache组赋予写权限     
vim  /etc/httpd/conf .d /vhost .conf        ## 修改配置 DocumentRoot "/www/wp/wordpress"     
systemctl reload httpd.service     ## 重载配置文件

    用客户端浏览器访问www.ch.com,按照说明依次下一步操作即可完成安装,需要注意填数据库信息时,填写的是之前mairadb上配置授权的用户和密码,数据库地址填写数据库服务器地址即可。

    5.1 phpMyadmin

    web.ch.com虚拟主机用于提供phpMyAdmin;官方下载地址:http://www.phpmyadmin.net/downloads/


1
2
3
4
5
6
7
8
9
10
11
12
13
cd  /www/ph/     ## 切换至/www/ph/目录下     
unzip phpMyAdmin-4.4.14.1-all-languages.zip   ## 解压缩phpmyadmin     
chown  -R root:apache phpMyAdmin-4.4.14.1-all-languages     ## 修改phpmyadmin目录属组为apache     
chmod  -R g+w phpMyAdmin-4.4.14.1-all-languages     ## 赋予apache组对phpmyadmin有写操作    
ln  -s phpMyAdmin-4.4.14.1-all-languages phpadmin    ## 对phpmyadmin创建符号链接     
yum -y  install  php-mbstring    ## 安装支持中文字符集程序包     
cd  phpadmin/    ## 切换至phpadmin目录下     
cp  config.sample.inc.php config.inc.php     ## 复制模板配置文件     
vim config.inc.php     ## 修改配置文件        
      $cfg[ 'Servers' ][$i][ 'host' ] =  '172.18.20.11' ;    ## 将这一项改为mariadb数据库的地址  
vim  /etc/httpd/conf .d /ssl .conf    ## 修改https配置文件中 DocumentRoot "/www/ph/phpadmin"  
httpd -t     ## 检查配置是否正确     
systemctl reload httpd.service     ## 重载配置文件

    用客户端浏览器访问https://web.ch.com 输入用户名密码,就可以访问phpmyadmin了


6.压力测试

    6.1 xcache

    xcache是一个开源的 opcode 缓存器/优化器,能够提高web服务器上的 PHP 性能. 通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高页面生成速率2到5倍, 降低服务器负载。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vim  /etc/php .d /xcache .ini     ## 编辑xcache 配置文件     
[xcache-common]     
extension = xcache.so     
[xcache.admin]     
xcache.admin.enable_auth = On     
xcache.admin.user =  "mOo"     
xcache.admin.pass =  "md5 encrypted password"     
[xcache]     
xcache.shm_scheme =  "mmap"     
xcache.size = 60M     
xcache.count = 1     
xcache.slots = 8K     
xcache.ttl = 0     
xcache.gc_interval = 0     
xcache.var_size = 4M     
xcache.var_count = 1     
xcache.var_slots = 8K

    配置详情请参考 http://xcache.lighttpd.net/wiki/XcacheIni

    

    6.2 ab

    ab是apache自带的压力测试工具

1
2
3
ab -n 1000 -c 100 http: //172 .18.20.10 /index .php                          
        -n  表示请求总数                          
        -c  表示模拟的并行数

    测试生成后,各字段的含义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Server Software:        Apache /2 .4.6          ## 平台版本     
Server Hostname:        172.18.20.10          ## 服务器主机名     
Server Port:            80                    ## 服务器端口     
Document Path:           /index .php            ## 测试页面文档     
Document Length:        8920 bytes            ## 页面文档大小     
Concurrency Level:      100                   ## 并发连接数     
Time taken  for  tests:   20.863 seconds        ## 整个测试持续的时间     
Complete requests:      1000                  ## 完成的请求数量     
Failed requests:        0                     ## 失败的请求数量     
Write errors:           0                     ## 等待的请求数量     
Non-2xx responses:      1000                  ## 请求响应数量     
Total transferred:      388000 bytes          ## 整个场景中的网络传输量     
HTML transferred:       0 bytes               ## 整个场景中的HTML内容传输量     
Requests per second:    47.93 [ #/sec] (mean)     ## 吞吐率,每秒事务数 ,后面括号中的 mean 表示这是一个平均值     
Time per request:       2086.280 [ms] (mean)      ## 用户平均请求等待时间,后面括号中的 mean表示这是一个平均值     
Time per request:       20.863 [ms] (mean, across all concurrent requests)   ## 服务器平均请求处理时间     
Transfer rate:          18.16 [Kbytes /sec ] received   ## 平均每秒网络上的流量     
Connection Times (ms)              ## 网络上消耗的时间的分解                   
                min  mean[+ /-sd ] median   max     
Connect:        0    3  68.3      0     2138     
Processing:    38 2045 1472.0   1393    7854     
Waiting:       36 2042 1472.0   1392    7854     
Total:         38 2048 1475.9   1393    7854     
Percentage of the requests served within a certain  time  (ms)    ## 整个场景中所有请求的响应情况     
50%   1393     
66%   1654     
75%   2247     
80%   3000    
90%   4529     
95%   5331     
98%   6420     
99%   6750     
100%  7854 (longest request)


7.实验中遇到的问题

    7.1 时间同步问题

    主机之间时间不同步可能会导致配置不生效,所以实验前一定要确保所有主机时间同步,可以先安装yum -y install ntp;然后同步时间服务器 ntpdata NTP_SERVER_IP 。


    7.2 配置文件问题

    刚才不小心把httpd主配置文件的一行信息不小心删除,然后保存退出了,httpd服务却怎么也起不来,这个时候我才知道备份配置文件的重要性了。所以说,在安装所以的服务程序之后,一定要在配置之前做好配置。


你可能感兴趣的:(LAMP基于RPM包安装详解)