设为首页 收藏本站
查看: 1875|回复: 0

分离式LAMP平台构建

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-6 08:42:17 | 显示全部楼层 |阅读模式
LAMP简介
LAMP即Linux+Apache+Mysql/MariaDB+Perl/PHP/Python,这些都是各自独立的开源软件,放在一起使用,就组成了一个强大的web应用程序平台,具有web资源丰富,轻量,开发快速等特点。LAMP还具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。
分离式的LAMP,Linux,Apache,Mysql/MariaDB,PHP都部署在独立的服务器上(提高性能)。
wKiom1WY9RaSEy2IAAB9lxRBMBc612.jpg
往往静态资源放在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文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[iyunv@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
[iyunv@CentOS6 ~]# tar xf mariadb-5.5.36-linux-x86_64.tar.gz
[iyunv@CentOS6 ~]# cd mariadb-5.5.36-linux-x86_64
[iyunv@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用户

1
2
[iyunv@www MySQL_DATA]# groupadd -r mysql
[iyunv@www MySQL_DATA]# useradd -g mysql -r mysql



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

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



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

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



4、修改mysql目录下的属组和属主
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[iyunv@www mysql]# chown -R root:mysql ./*
[iyunv@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/
1
2
3
4
[iyunv@CentOS6 mariadb-5.5.36-linux-x86_64]# lvscan
  ACTIVE            '/dev/mysql_vg/mysql_lv' [10.00 GiB] inherit
[iyunv@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
1
[iyunv@www MySQL_DATA]# chown -R mysql:mysql /MySQL_DATA/data/



6、在/etc/下再创建mysql目录,将mysql的配置文件放在该目录中
1
[iyunv@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),根据内存大小来选择对应的配置文件。
1
2
3
4
5
[iyunv@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参数,指定数据库的数据文件存放位置
1
2
3
datadir=/MySQL_DATA/data/
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8                       #指定mysql的并发线程数是几个



8、运行数据库初始化的脚本,这个步骤,会创建数据库的一些元数据
1
./scripts/mysql_install_db --user=mysql --datadir=/MySQL_DATA/data/



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


9、服务脚本复制
1
2
3
4
[iyunv@www mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[iyunv@www mysql]# chkconfig --add mysqld
[iyunv@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帮助文档
1
2
3
4
5
6
[iyunv@www mysql]# ln -sv /usr/local/mysql/include/ /usr/include/mysql
`/usr/include/mysql' -> `/usr/local/mysql/include/'
[iyunv@CentOS6 support-files]# vim /etc/man.config
......
MANPATH /usr/local/mysql/man
......



11、导出库文件
1
2
3
[iyunv@www include]# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
[iyunv@www include]# ldconfig



12、启动服务
1
2
3
4
[iyunv@CentOS6 support-files]# service mysqld start
Starting MySQL..                                           [  OK  ]
[iyunv@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至目录,进行编译

1
2
[iyunv@www ~]# tar xf php-5.4.26.tar.bz2
[iyunv@www ~]# cd php-5.4.26



1
2
3
4
5
6
7
[iyunv@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
.......
[iyunv@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提供配置文件:
1
[iyunv@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脚本,并将其添加至服务列表:
1
2
3
4
[iyunv@www php-5.4.26]# cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm
[iyunv@www php-5.4.26]# chmod +x /etc/rc.d/init.d/php-fpm
[iyunv@www php-5.4.26]# chkconfig --add php-fpm
[iyunv@www php-5.4.26]# chkconfig php-fpm on



为php-fpm提供配置文件:
1
[iyunv@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的配置文件:
1
[iyunv@www php-5.4.26]# vim /usr/local/php-5.4/php-fpm.conf



1
2
3
4
5
6
7
8
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:
1
[iyunv@www php-5.4.26]# service php-fpm start



1
2
[iyunv@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、加载模块
1
2
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so




2、配置虚拟主机支持使用fcgi:
1
2
# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf             #启用虚拟主机



在对应的虚拟主机中添加如下两行
1
2
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
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
34
35
36
37
38
<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格式的主页
1
2
3
4
5
6
7
8
9
[iyunv@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,然后把对应的应用部署上
1
2
3
4
5
6
7
[iyunv@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的配置文件):
1
2
3
4
5
6
7
[iyunv@www admin.xiaoxiao.com]# pwd
/httpd-website/admin.xiaoxiao.com
[iyunv@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';
.......



wKiom1WZKI_DCldSAAHK05ktiYc911.jpg
wKiom1WZKLaTJhiTAANx7r36EiY951.jpg


为wordpress应用在数据库中创建对应数据(在数据库中创建对应的数据库,用户名和密码,并授予对对应数据库的所有权限):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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的配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[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');



wKiom1WZKPPQrnjpAAPXSaEN4UE318.jpg

为drupal应用创建对应数据(要想启动需要在编译安装php时添加GD库的支持,--with-gd):
1
2
3
4
5
6
7
8
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)



数据创建完成后,直接访问主页面,在页面上完成数据库连接,然后登录。
wKioL1WZKz2iY672AAOr_3cofKA825.jpg
这里貌似有些错误,哪位大神知道的话麻烦指出一下!!!




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-83585-1-1.html 上篇帖子: lamp一键安装脚本 下篇帖子: 安装wamp的时候出现丢失msvcr110
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表