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

分离式LAMP平台构建

时间:2015-07-06 00:11:52      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:lamp   mariadb   分离式lamp   

LAMP简介

LAMP即Linux+Apache+Mysql/MariaDB+Perl/PHP/Python,这些都是各自独立的开源软件,放在一起使用,就组成了一个强大的web应用程序平台,具有web资源丰富,轻量,开发快速等特点。LAMP还具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。

分离式的LAMP,Linux,Apache,Mysql/MariaDB,PHP都部署在独立的服务器上(提高性能)。

技术分享

往往静态资源放在web服务器上,动态的页面放在php服务器上。前端的web服务器用来应付用户的请求,web服务器在接收到用户的请求之后,如果是静态资源的请求直接予以响应,如果请求的是动态页面,则web服务器通过FastCGI协议将动态页面交由php服务器处理,php服务器对动态页面的处理往往需要和后端的数据库进行交互。处理完成之后,将处理结果交给web服务器,由web服务器响应客户。


安装部署LAMP

实验环境

      192.168.1.104:DNS服务器

      192.168.1.111:httpd服务器(httpd-2.4.9)

      192.168.1.112:php服务器(php-5.4.26)

      192.168.1.113:mariaDB(mariadb-5.5.36)


编译安装httpd-2.4.9

这个我之前的博客已经介绍过了。


编译安装mariadb-5.5.36

这里我使用的是二进制格式安装mariadb-5.5.36,对应的资源可以去官网下载(https://mariadb.org)。相关的安装方式可以参考软件包中的安装文档或者README文件。

[root@CentOS6 ~]# ls
anaconda-ks.cfg  install.log  install.log.syslog  mariadb-5.5.36-linux-x86_64.tar.gz  php-5.4.26.tar.bz2
[root@CentOS6 ~]# tar xf mariadb-5.5.36-linux-x86_64.tar.gz 
[root@CentOS6 ~]# cd mariadb-5.5.36-linux-x86_64
[root@CentOS6 mariadb-5.5.36-linux-x86_64]# vim INSTALL-BINARY
...............
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> cd /usr/local
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> bin/mysqld_safe --user=mysql &
...............

解压之后的软件包中有个INSTALL-BINARY,里面有安装的详细步骤。

1、首先创建mysql组和mysql用户

[root@www MySQL_DATA]# groupadd -r mysql
[root@www MySQL_DATA]# useradd -g mysql -r mysql

2、将软件包接压至/usr/local目录下

tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local

3、解压到/usr/local目录下之后,解压的软件包必须叫mysql。这里可以建一个软链接mysql指向软件包。

[root@www local]# ln -s mariadb-5.5.36-linux-x86_64/ mysql/

4、修改mysql目录下的属组和属主

[root@www mysql]# chown -R root:mysql ./*
[root@www mysql]# ll
total 212
drwxr-xr-x  2 root mysql   4096 Jul  3 15:53 bin
-rw-r--r--  1 root mysql  17987 Feb 24  2014 COPYING
-rw-r--r--  1 root mysql  26545 Feb 24  2014 COPYING.LESSER
drwxr-xr-x  3 root mysql   4096 Jul  3 15:53 data       #用不到了,用其他的目录来存放数据
drwxr-xr-x  2 root mysql   4096 Jul  3 15:54 docs
drwxr-xr-x  3 root mysql   4096 Jul  3 15:54 include
-rw-r--r--  1 root mysql   8694 Feb 24  2014 INSTALL-BINARY
drwxr-xr-x  3 root mysql   4096 Jul  3 15:54 lib
drwxr-xr-x  4 root mysql   4096 Jul  3 15:53 man
drwxr-xr-x 11 root mysql   4096 Jul  3 15:54 mysql-test
-rw-r--r--  1 root mysql 108813 Feb 24  2014 README
drwxr-xr-x  2 root mysql   4096 Jul  3 15:54 scripts
drwxr-xr-x 27 root mysql   4096 Jul  3 15:54 share
drwxr-xr-x  4 root mysql   4096 Jul  3 15:54 sql-bench
drwxr-xr-x  4 root mysql   4096 Jul  3 15:53 support-files

默认情况下mariadb的数据存放在mysql目录下的data目录中,我们通常将数据存放在单独的分区当中,这个分区往往基于LVM(逻辑卷)创建,可以动态的伸缩。

这里我也是将数据库的数据单独存放在基于LV的分区上,/mysql_data/data/

[root@CentOS6 mariadb-5.5.36-linux-x86_64]# lvscan
  ACTIVE            ‘/dev/mysql_vg/mysql_lv‘ [10.00 GiB] inherit
[root@CentOS6 mariadb-5.5.36-linux-x86_64]# mount | grep mysql
/dev/mapper/mysql_vg-mysql_lv on /mysql_data type ext4 (rw)

5、将存放数据的目录的属组和属主都改成mysql

[root@www MySQL_DATA]# chown -R mysql:mysql /MySQL_DATA/data/

6、在/etc/下再创建mysql目录,将mysql的配置文件放在该目录中

[root@CentOS6 mysql]# cp support-files/my-large.cnf /etc/mysql/my.cnf

在support-files目录下有好几个配置文件的样本(my-small.cnf,my-medium.cnf,my-large.cnf,my-huge.cnf,my-innodb-heavy-4G.cnf),根据内存大小来选择对应的配置文件。

[root@CentOS6 support-files]# vim my-large.cnf
........
# This is for a large system with memory = 512M where the system runs mainly
# MariaDB.
.........

7、在配置文件my.cnf中添加datafile参数,指定数据库的数据文件存放位置

datadir=/MySQL_DATA/data/
# Try number of CPU‘s*2 for thread_concurrency
thread_concurrency = 8                       #指定mysql的并发线程数是几个

8、运行数据库初始化的脚本,这个步骤,会创建数据库的一些元数据

./scripts/mysql_install_db --user=mysql --datadir=/MySQL_DATA/data/

--datadir指定存放数据的目录,且该脚本必须要在mysql目录下执行,因为该脚本依赖mysql目录下的/bin目录


9、服务脚本复制

[root@www mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@www mysql]# chkconfig --add mysqld
[root@www mysql]# chkconfig --list mysqld
mysqld         	0:off	1:off	2:on	3:on	4:on	5:on	6:off

10、添加/profile.d/mysql.sh,导出头文件,man帮助文档

[root@www mysql]# ln -sv /usr/local/mysql/include/ /usr/include/mysql
`/usr/include/mysql‘ -> `/usr/local/mysql/include/‘
[root@CentOS6 support-files]# vim /etc/man.config 
......
MANPATH /usr/local/mysql/man
......

11、导出库文件

[root@www include]# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
[root@www include]# ldconfig

12、启动服务

[root@CentOS6 support-files]# service mysqld start
Starting MySQL..                                           [  OK  ]
[root@CentOS6 support-files]# ss -tuln | grep 3306
tcp    LISTEN     0      50                     *:3306                  *:*

3306端口已在监听。


编译安装php-5.4.26

为解决依赖关系先安装一下这些包libxml2-devel,bzip2-devel,libmcrypt-devel,php的某些功能的添加需要依赖到这些包中的头文件。还有如果要为php添加GD库的支持,把这些包也装上(libjpeg-turbo-devel,libpng-devel,freetype-devel,依赖其中的头文件),当然这些包也可以单独下载进行编译安装。php软件包可以去官网下载(http://www.php.net)

1、解压软件包,cd至目录,进行编译

[root@www ~]# tar xf php-5.4.26.tar.bz2
[root@www ~]# cd php-5.4.26
[root@www php-5.4.26]# ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysq
l --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-f
reetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --
enable-sockets --enable-fpm --with-mcrypt  --with-config-file-path=/etc --with-config-file-s
can-dir=/etc/php.d --with-bz2
.......
[root@www php-5.4.26]# make && make install

--prefix=/usr/local/php-5.4  #

--with-mysql=mysqlnd         #指定mysql的安装目录,若安装在其他服务器上,就用这个值,默认就使用

                                              #本地的mysql驱动

--with-pdo-mysql=mysqlnd #PDO: MySQL support.若安装在其他服务器上使用本地的mysql驱动

--with-mysqli=mysqlnd        #同上

--with-openssl                      #支持openssl功能

--enable-mbstring                #支持多字节字串(若要支持中文安装这个)

--with-freetype-dir                #指定FreeType安装目录,freetype:字体处理工具

--with-jpeg-dir                      #指定libjpeg安装目录

--with-png-dir                       #指定libpng安装目录

--with-zlib                             #支持ZLIB,zlib是一个压缩库

--with-bz2                             #支持BZip2压缩

--with-mcrypt                       #支持mcrypt,mcrypt加密扩展库

--with-gd                              #添加GD库的支持,前提是安装了上面提到的几个开发包

--enable-xml                         #启用xml功能,ml扩展标记语言

--with-libxml-dir=/usr          #xml功能启用就必须用到系统上对应的xml库文件,指明xml库位于什么地方。

                                              #必须要指明,默认程序会去/usr/local目录下寻找

--enable-sockets                  #允许php基于sockets的方式通信

--enable-fpm           #将FastCGI进程管理整合进PHP中,php作为单独的服务器时必须启动这一项

                                 #php5.3之前是不支持fpm的,需要手动打补丁。

--with-config-file-path=/etc

--with-config-file-scan-dir=/etc/php.d     #配置文件包含该目录下的所有以.ini结尾的文件


2、为php提供配置文件:

[root@www php-5.4.26]# cp php.ini-production /etc/php.ini

php.ini-development    #应用于开发环境的配置文件

php.ini-production       #应用于生产环境的配置文件


3、配置php-fpm(PHP FastCGI 进程管理器):

为php-fpm提供SysV init脚本,并将其添加至服务列表:

[root@www php-5.4.26]# cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm
[root@www php-5.4.26]# chmod +x /etc/rc.d/init.d/php-fpm
[root@www php-5.4.26]# chkconfig --add php-fpm
[root@www php-5.4.26]# chkconfig php-fpm on

为php-fpm提供配置文件:

[root@www php-5.4.26]# cp /usr/local/php-5.4/etc/php-fpm.conf.default /usr/local/php-5.4/etc/php-fpm.conf

编辑php-fpm的配置文件:

[root@www php-5.4.26]# vim /usr/local/php-5.4/php-fpm.conf
pm = dynamic   #子进程以动态的方式管理。   默认选项
pm.max_children = 50                          #最大并发响应量
pm.start_servers = 8                             #刚启动php进程时,启动几个空闲进程
pm.min_spare_servers = 3                    #最小空闲进程数
pm.max_spare_servers = 10                  #最大空闲进程数
pid = /usr/local/php/var/run/php-fpm.pid      #pid文件。默认没有启用这项
error_log = ....        #这个默认没有启用,也可以启用
listen = 192.168.1.112:9000                  #监听的IP地址和端口

listen = 192.168.1.112:9000监听来自web服务器的动态请求。这个为了安装可以设置iptables,只接受来自前端web服务器的请求。默认情况下php-fpm以nobody(本机上权限最小来宾账号)的身份在运行。


启动php-fpm:

[root@www php-5.4.26]# service php-fpm start
[root@www php-5.4.26]# netstat -tulnp | grep php
tcp        0      0 192.168.1.112:9000          0.0.0.0:*                   LISTEN      20331/php-fpm

已处于监听状态。


配置httpd2.4

各软件已安装完毕,接下来就是对httpd的相关配置,httpd2.2默认是不支持fcgi的,所以如果用的是httpd2.2,需要自己手动打补丁。在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载。

1、加载模块

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so


2、配置虚拟主机支持使用fcgi:

# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf             #启用虚拟主机

在对应的虚拟主机中添加如下两行

ProxyRequests Off                 #关闭正向代理功能
ProxyPassMatch ^/(.*\.php)$ fcgi://ip:port/PATH/TO/DOCUMENT_ROOT/$1

第二行的意思为:如请求的url匹配^/(.*\.php)$这个正则(所有以.php结尾的请求),都通过fastcgi协议提交给后面的php服务器(ip:port)。

转换过程:/web/host1/admin/index.php   ---->   fcgi://ip:port/web/hosts/admin/index.php


下面是我的几台虚拟主机的配置:

1)www.xiaoxiao.com上部署了wordpress

2)admin.xiaoxiao.com上部署了phpMyAdmin

3)dru.xiaoxiao.com上是drupal

<VirtualHost 192.168.1.111:80>
    ServerAdmin baby@xiaoxiao.com
    DocumentRoot "/httpd-website/www.xiaoxiao.com"
    ServerName www.xiaoxiao.com
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.1.112:9000/httpd-website/www.xiaoxiao.com/$1
    <Directory "/httpd-website/www.xiaoxiao.com">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost 192.168.1.111:80>
    ServerAdmin baby@xiaoxiao.com
    DocumentRoot "/httpd-website/admin.xiaoxiao.com"
    ServerName admin.xiaoxiao.com
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.1.112:9000/httpd-website/admin.xiaoxiao.com/$1
    <Directory "/httpd-website/admin.xiaoxiao.com">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost 192.168.1.111:80>
    ServerAdmin baby@xiaoxiao.com
    DocumentRoot "/httpd-website/dru.xiaoxiao.com"
    ServerName dru.xiaoxiao.com
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.1.112:9000/httpd-website/dru.xiaoxiao.com/$1
    <Directory "/httpd-website/dru.xiaoxiao.com">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>


3、编辑apache配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页

[root@www bin]# vim /etc/httpd/httpd.conf
......
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>
......
    AddType application/x-httpd-php .php                   #识别php格式的页面
    AddType application/x-httpd-php-source .phps
.......


配置完成之后,重新装载httpd,然后把对应的应用部署上

[root@www ~]# ll
total 250788
......
-rw-r--r--  1 root root   2754113 Jul  4 18:57 drupal-7.7.tar.gz
-rw-r--r--  1 root root   8004371 Jul  4 18:57 phpMyAdmin-4.0.5-all-languages.zip
-rw-r--r--  1 root root   4657514 Jul  4 18:57 wordpress-3.3.1-zh_CN.zip
......

将这3个应用解压到php服务器对应的目录下(/httpd-website),由于其中的静态资源是直接从web服务器上获取的,所以这里为了方便起见,也将这些应用部署到httpd服务器上的相同目录下。在响应请求时非.php结尾的静态资源直接从httpd服务器上获取,.php结尾的动态页面提交给后端的php服务器处理。

在php服务器上修改下对应的配置文件,以连接上mariadb(phpMyAdmin的配置文件):

[root@www admin.xiaoxiao.com]# pwd
/httpd-website/admin.xiaoxiao.com
[root@www admin.xiaoxiao.com]# cp config.sample.inc.php config.inc.php
.......
$cfg[‘blowfish_secret‘] = ‘freeBSD‘; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
$cfg[‘Servers‘][$i][‘host‘] = ‘192.168.1.113‘;
.......

技术分享

技术分享


为wordpress应用在数据库中创建对应数据(在数据库中创建对应的数据库,用户名和密码,并授予对对应数据库的所有权限):

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| WordPress          |                      #对应数据库
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> create user wp_admin@‘192.168.1.%‘ identified by ‘wp_passwd‘;
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> grant all on WordPress.* to wp_admin@‘192.168.1.%‘;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

wordpress的配置文件:

[root@www.xiaoxiao.com www.xiaoxiao.com]# pwd
/httpd-website/www.xiaoxiao.com
[root@www.xiaoxiao.com www.xiaoxiao.com]# vim wp-config.php 
/** WordPress 数据库的名称 */
define(‘DB_NAME‘, ‘WordPress‘);

/** MySQL 数据库用户名 */
define(‘DB_USER‘, ‘wp_admin‘);

/** MySQL 数据库密码 */
define(‘DB_PASSWORD‘, ‘wp_passwd‘);

/** MySQL 主机 */
define(‘DB_HOST‘, ‘192.168.1.113‘);

技术分享


drupal应用创建对应数据(要想启动需要在编译安装php时添加GD库的支持,--with-gd):

MariaDB [(none)]> create database drupal;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create user dru_admin@‘192.168.1.%‘ identified by ‘dru_passwd‘;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all on drupal.* to dru_admin@‘192.168.1.%‘;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

数据创建完成后,直接访问主页面,在页面上完成数据库连接,然后登录。

技术分享

这里貌似有些错误,哪位大神知道的话麻烦指出一下!!!




分离式LAMP平台构建

标签:lamp   mariadb   分离式lamp   

原文地址:http://ljbaby.blog.51cto.com/10002758/1671087

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