LAMP详解

本文详细介绍如何从零开始搭建LAMP(Linux + Apache + MySQL + PHP)环境,包括编译安装Apache 2.4.3、MySQL 5.5.28、PHP 5.4.8,以及安装Xcache加速器的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


httpd 2.4.3 + mysql-5.5.28 + php-5.4.8编译安装过程:

一、编译安装apache

1、解决依赖关系

httpd-2.4.3需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包。这里选择使用编译源代码的方式进行,它们的下载路径为ftp://172.16.0.1/pub/Sources/new_lamp。

(1) 编译安装apr

# tar xf apr-1.4.6.tar.bz2
# cd apr-1.4.6
# ./configure --prefix=/usr/local/apr
# make && make install

(2) 编译安装apr-util

# tar xf apr-util-1.4.1.tar.bz2
# cd apr-util-1.4.1
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make && make install

附:apache官方对APR的介绍:

The mission of the Apache Portable Runtime (APR) project is to create and maintain software libraries that provide a predictable and consistent interface to underlying platform-specific implementations. The primary goal is to provide an API to which software developers may code and be assured of predictable if not identical behaviour regardless of the platform on which their software is built, relieving them of the need to code special-case conditions to work around or take advantage of platform-specific deficiencies or features.

(3) httpd-2.4.2编译过程也要依赖于pcre-devel软件包,需要事先安装。此软件包系统光盘自带,因此,找到并安装即可。

2、编译安装httpd-2.4.3

首先下载httpd-2.4.3到本地,下载路径为ftp://172.16.0.1/pub/Sources/new_lamp。而后执行如下命令进行编译安装过程:

# tar xf httpd-2.4.3.tar.bz2
# cd httpd-2.4.3
# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event
# make && make install


补充:

(1)构建MPM为静态模块
在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果要改变MPM,必须重新构建。为了使用指定的MPM,请在执行configure脚本 时,使用参数 --with-mpm=NAME。NAME是指定的MPM名称。编译完成后,可以使用 ./httpd -l 来确定选择的MPM。 此命令会列出编译到服务器程序中的所有模块,包括 MPM。

(2)构建 MPM 为动态模块

在Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。 构建 MPM 为动态模块允许通过修改LoadModule指令内容来改变MPM,而不用重新构建服务器程序。在执行configure脚本时,使用--enable-mpms-shared选项即可启用此特性。当给出的参数为all时,所有此平台支持的MPM模块都会被安装。还可以在参数中给出模块列表。默认MPM,可以自动选择或者在执行configure脚本时通过--with-mpm选项来指定,然后出现在生成的服务器配置文件中。编辑LoadModule指令内容可以选择不同的MPM。


3、修改httpd的主配置文件,设置其Pid文件的路径

编辑/etc/httpd/httpd.conf,添加如下行即可:
PidFile  "/var/run/httpd.pid"

4、提供SysV服务脚本/etc/rc.d/init.d/httpd,内容如下:

#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve \
#           HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid

# Source function library.
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi

# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0

start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}

stop() {
    echo -n $"Stopping $prog: "
    killproc -p ${pidfile} -d 10 $httpd
    RETVAL=$?
    echo
    [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=$?
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
    fi
    echo
}

# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
        status -p ${pidfile} $httpd
    RETVAL=$?
    ;;
  restart)
    stop
    start
    ;;
  condrestart)
    if [ -f ${pidfile} ] ; then
        stop
        start
    fi
    ;;
  reload)
        reload
    ;;
  graceful|help|configtest|fullstatus)
    $apachectl $@
    RETVAL=$?
    ;;
  *)
    echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
    exit 1
esac

exit $RETVAL

而后为此脚本赋予执行权限:
# chmod +x /etc/rc.d/init.d/httpd

加入服务列表:
# chkconfig --add httpd


接下来就可以启动服务进行测试了。


二、安装mysql-5.5.28

1、准备数据存放的文件系统

新建一个逻辑卷,并将其挂载至特定目录即可。这里不再给出过程。

这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。

2、新建用户以安全方式运行进程:

# groupadd -r mysql
# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
# chown -R mysql:mysql /mydata/data

3、安装并初始化mysql-5.5.28

首先下载平台对应的mysql版本至本地,这里是32位平台,因此,选择的为mysql-5.5.28-linux2.6-i686.tar.gz,其下载位置为ftp://172.16.0.1/pub/Sources/mysql-5.5。

# tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local
# cd /usr/local/
# ln -sv mysql-5.5.28-linux2.6-i686  mysql
# cd mysql 

# chown -R mysql:mysql  .
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
# chown -R root  .

4、为mysql提供主配置文件:

# cd /usr/local/mysql
# cp support-files/my-large.cnf  /etc/my.cnf

并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:
thread_concurrency = 2

另外还需要添加如下行指定mysql数据文件的存放位置:
datadir = /mydata/data


5、为mysql提供sysv服务脚本:

# cd /usr/local/mysql
# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld

添加至服务列表:
# chkconfig --add mysqld
# chkconfig mysqld on

而后就可以启动服务测试使用了。


为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:
6、输出mysql的man手册至man命令的查找路径:

编辑/etc/man.config,添加如下行即可:
MANPATH  /usr/local/mysql/man

7、输出mysql的头文件至系统头文件路径/usr/include:

这可以通过简单的创建链接实现:
# ln -sv /usr/local/mysql/include  /usr/include/mysql

8、输出mysql的库文件给系统库查找路径:

# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf

而后让系统重新载入系统库:
# ldconfig

9、修改PATH环境变量,让系统可以直接使用mysql的相关命令。具体实现过程这里不再给出。


三、编译安装php-5.4.8

1、解决依赖关系:

请配置好yum源(可以是本地系统光盘)后执行如下命令:
# yum -y groupinstall "X Software Development" 

如果想让编译的php支持mcrypt扩展,此处还需要下载ftp://172.16.0.1/pub/Sources/ngnix目录中的如下两个rpm包并安装之:
libmcrypt-2.5.7-5.el5.i386.rpm
libmcrypt-devel-2.5.7-5.el5.i386.rpm

2、编译安装php-5.4.8

首先下载源码包至本地目录,下载位置ftp://172.16.0.1/pub/Sources/new_lamp。

# tar xf php-5.4.8.tar.bz2
# cd php-5.4.8
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2  --enable-maintainer-zts

说明:这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。

# make
# make test
# make intall

为php提供配置文件:
# cp php.ini-production /etc/php.ini

3、 编辑apache配置文件httpd.conf,以apache支持php
 
 # vim /etc/httpd/httpd.conf
 1、添加如下二行
   AddType application/x-httpd-php  .php
   AddType application/x-httpd-php-source  .phps

 2、定位至DirectoryIndex index.html 
   修改为:
    DirectoryIndex  index.php  index.html

而后重新启动httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用。

四、安装xcache,为php加速:

1、安装
# tar xf xcache-2.0.0.tar.gz
# cd xcache-2.0.0
# /usr/local/php/bin/phpize
# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
# make && make install

安装结束时,会出现类似如下行:
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-zts-20100525/

2、编辑php.ini,整合php和xcache:

首先将xcache提供的样例配置导入php.ini
# mkdir /etc/php.d
# cp xcache.ini /etc/php.d

说明:xcache.ini文件在xcache的源码目录中。

接下来编辑/etc/php.d/xcache.ini,找到zend_extension开头的行,修改为如下行:
zend_extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so

注意:如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位。

五、启用服务器状态

mod_status模块可以让管理员查看服务器的执行状态,它通过一个HTML页面展示了当前服务器的统计数据。这些数据通常包括但不限于:
(1) 处于工作状态的worker进程数;
(2) 空闲状态的worker进程数;
(3) 每个worker的状态,包括此worker已经响应的请求数,及由此worker发送的内容的字节数;
(4) 当前服务器总共发送的字节数;
(5) 服务器自上次启动或重启以来至当前的时长;
(6) 平均每秒钟响应的请求数、平均每秒钟发送的字节数、平均每个请求所请求内容的字节数;

启用状态页面的方法很简单,只需要在主配置文件中添加如下内容即可:
<Location /server-status>
    SetHandler server-status
    Require all granted
</Location>

需要提醒的是,这里的状态信息不应该被所有人随意访问,因此,应该限制仅允许某些特定地址的客户端查看。比如使用Require ip 172.16.0.0/16来限制仅允许指定网段的主机查看此页面。

#CentOS-7.3安装apache 创建webapp用户,cd /home/webapp yum install -y bzip2 zip unzip gcc gcc-c++ expat-devel tar jxvf httpd-2.4.33.tar.bz2 tar jxvf apr-1.6.3.tar.bz2 tar zxvf apr-util-1.6.1.tar.gz tar jxvf pcre-8.42.tar.bz2 mv apr-1.6.3 httpd-2.4.33/srclib/apr mv apr-util-1.6.1 httpd-2.4.33/srclib/apr-util #注释这里是因为只要将解压后的apr-1.6.3,apr-util-1.6.1放到httpd-2.4.33/srclib下,用--with-included-apr指令会自动配置编译安装。 #cd /home/webapp/httpd-2.4.33/srclib/apr #./configure --prefix=/home/webapp/apache_tools/extra/apr #make&&make; install #cd /home/webapp/httpd-2.4.33/srclib/apr-util #./configure --prefix=/home/webapp/apache_tools/extra/apr-util --with-apr=/home/webapp/apache_tools/extra/apr #make&&make; install cd pcre-8.42 ./configure --prefix=/home/webapp/apache_tools/httpd-2.4.33/srclib/pcre make&&make; install cd ../httpd-2.4.33/ ./configure --prefix=/home/webapp/apache/httpd --with-pcre=/home/webapp/apache_tools/httpd-2.4.33/srclib/pcre --with-included-apr make&&make; install 这个是个坑,没有百度这个是我解决的步骤: [root@ha-weix-app08 /]# find ./ -name "libcrypto*"|xargs ls -lrt -rwxr-xr-x. 1 root root 2012800 Jun 23 2015 ./usr/lib64/libcrypto.so.1.0.1e lrwxrwxrwx. 1 root root 19 Mar 6 14:42 ./usr/lib64/libcrypto.so.10 -> libcrypto.so.1.0.1e -rw-r--r--. 1 root root 4001668 Mar 6 16:30 ./usr/local/ssl/lib/libcrypto.a -r-xr-xr-x. 1 root root 2239838 Mar 6 16:30 ./usr/local/ssl/lib/libcrypto.so.1.0.0 lrwxrwxrwx. 1 root root 18 Mar 6 16:30 ./usr/local/ssl/lib/libcrypto.so -> libcrypto.so.1.0.0 -rw-r--r--. 1 root root 264 Mar 6 16:30 ./usr/local/ssl/lib/pkgconfig/libcrypto.pc [root@ha-weix-app08 /]# cd /usr/lib64/ [root@ha-weix-app08 lib64]# ln -s /usr/local/ssl/lib/libcrypto.a libcrypto.a [root@ha-weix-app08 lib64]# ln -s /usr/local/ssl/lib/libcrypto.so.1.0.0 libcrypto.so 跳坑集锦: 1、AH02432: Cannot find LB Method: byrequests #to resolve the start failed issue: #AH02432: Cannot find LB Method: byrequests #AH01183: Cannot share balancer #AH00020: Configuration Failed, exiting LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so 2、apache Cannot share balancer错误 启动apache时报错, [Fri Jun 24 22:06:33.756444 2016] [proxy:crit] [pid 3108:tid 140708199278336] AH02432: Cannot find LB Method: byrequests [Fri Jun 24 22:06:33.756460 2016] [proxy_balancer:emerg] [pid 3108:tid 140708199278336] (22)Invalid argument: AH01183: Cannot share balancer [Fri Jun 24 22:06:33.756521 2016] [:emerg] [pid 3108:tid 140708199278336] AH00020: Configuration Failed, exiting [Fri Jun 24 22:12:21.376172 2016] [proxy:crit] [pid 3124:tid 139884237899520] AH02432: Cannot find LB Method: byrequests [Fri Jun 24 22:12:21.376237 2016] [proxy_balancer:emerg] [pid 3124:tid 139884237899520] (22)Invalid argument: AH01183: Cannot share balancer [Fri Jun 24 22:12:21.376250 2016] [:emerg] [pid 3124:tid 139884237899520] AH00020: Configuration Failed, exiting 原来是还要启动lbmethod_byrequests_module模块,把配置文件中的这行,去掉注释 #LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so 3、Apache启动报错:Invalid command 'ProxyPass', perhaps misspelled or defined by a module not inclu ded in t 今天在服务器上刚装完Apache,需要发布一个新的系统,但是启动Apache的时候报错: Invalid command 'ProxyPass', perhaps misspelled or defined by a module ... 看看配置文件httpd,问题出在 ProxyPass 这个环节: ProxyPass /vict_service http://localhost:8080/vict_service 也就是要为 /vict_service 这个请求路径匹配一个实际可用的路径,既然提示ProxyPass命令无效,那么肯定是某个地方的设置问题。 解决的方法就在httpd这个配置文件里,找到以下两条: #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_http_module modules/mod_proxy_http.so 前面有# 号,说明被注释掉了,不起作用,把#号去掉,就可以了。 4、centos7 80端口被tcp6监听,改为tcp 今天在虚拟机上装了centos7 配置好apache后,输入 netstat -tnpl | grep 80 发现 80端口竟然在tcp6上。 造成了无法访问的尴尬。 netstat -tnpl | grep 80 tcp6 0 80 0.0.0.0:* LISTEN 2937/httpd 经过一番搜索,在apache官网发现了最简单实用的方法:修改apache文件 将 Listen 80 改为:Listen 0.0.0.0:80 完美解决~ 5、Centos 7防火墙firewalld开放80端口(最大的坑,没少坑我时间,见笑了)一直以为是iptables,结果是这个防火墙 如果使用的是iptables防火墙的话请看下面文章 Centos 7防火墙iptables开放指定端口(80)和设置ftp的方法 开启80端口 firewall-cmd --zone=public --add-port=80/tcp --permanent 出现success表明添加成功 命令含义: --zone #作用域 --add-port=80/tcp #添加端口,格式为:端口/通讯协议 --permanent #永久生效,没有此参数重启后失效 重启防火墙 systemctl restart firewalld.service 1、运行、停止、禁用firewalld 启动:# systemctl start firewalld 查看状态:# systemctl status firewalld 或者 firewall-cmd --state 停止:# systemctl disable firewalld 禁用:# systemctl stop firewalld 2、配置firewalld 查看版本:$ firewall-cmd --version 查看帮助:$ firewall-cmd --help 查看设置: 显示状态:$ firewall-cmd --state 查看区域信息: $ firewall-cmd --get-active-zones 查看指定接口所属区域:$ firewall-cmd --get-zone-of-interface=eth0 拒绝所有包:# firewall-cmd --panic-on 取消拒绝状态:# firewall-cmd --panic-off 查看是否拒绝:$ firewall-cmd --query-panic 更新防火墙规则:# firewall-cmd --reload # firewall-cmd --complete-reload 两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务 将接口添加到区域,默认接口都在public # firewall-cmd --zone=public --add-interface=eth0 永久生效再加上 --permanent 然后reload防火墙 设置默认接口区域 # firewall-cmd --set-default-zone=public 立即生效无需重启 打开端口(貌似这个才最常用) 查看所有打开的端口: # firewall-cmd --zone=dmz --list-ports 加入一个端口到区域: # firewall-cmd --zone=dmz --add-port=8080/tcp 若要永久生效方法同上 打开一个服务,类似于将端口可视化,服务需要在配置文件中添加,/etc/firewalld 目录下有services文件夹,这个不详细说了,详情参考文档 # firewall-cmd --zone=work --add-service=smtp 移除服务 # firewall-cmd --zone=work --remove-service=smtp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值