LAMP的配置安装

目标:基于LAMP架构,搭建一个bbs论坛
rpm版本:
安装方便,升级、卸载都灵活,很难或者无法定制主要组件的功能,适合批量部署
源码包编译:
需要自己定制参数,前提是需要对平台的功能需要非常了解;卸载、升级、安装并不是很方便灵活
折中的方案:
1、上线前,在测试环境中编译安装并且调试完毕后,把编译后的源码同步到其余软硬环境一样的机器,然后再make install
2、上线前,在测试环境中编译安装并且调试完毕后,把源码包封装成rpm包,再使用批量化部署软件(puppet)进行安装

LAMP =  Linux + Apache + MySQL + Php

编译方式(老的编译方式):
    Apache ----> MySQL ----> Php 或者 MySQL----->Apache----->Php
说明:
1、apache的安装必须要先于php;因为php是作为apache的模块libphp.so ,被apache加载调用
2、apache于mysql之间并没有直接先后顺序的依赖,所以谁先谁后没所谓
3、在php-5.3版本前,mysql必须先于php的编译;因为php需要实现连接数据库的功能,它通过mysql的接口才能编译出该功能。在php-5.3版本或者之后,php已经集成了一套连接mysql数据的代码,并不依赖mysql的接口,这个时候,mysql和php的编译顺序也就无所谓了。

思考:apache和mysql能不能在不同终端编译安装?


传统的安装php的方式中,我们在编译PHP时要支持mysql,一般需要指定以下几项:
--with-mysql=/usr/local/mysql
--with-mysqli=/usr/local/mysql/bin/mysql_config 
--with-pdo-mysql=/usr/local/mysql
但上面的三个参数需要先编译mysql,再编译php才可以。
新的编译方式,把三面三个参数替换成下面三个参数,则php和mysql的编译顺序无所谓
--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 就可以了

Apache工作原理:
    客户端——>index.html , logo.png ---> httpd(apache) ----直接把文件发送到---> 客户端
    客户端——>*.php --> httpd(apache) ---加载--> libphp.so ---编译代码,把编译结果--->apache——>客户端

编译安装mysql:
需求:
install:/usr/local/mysql
data:/mysql25/data


1、安装前准备
清空环境、安装相应的软件包
# yum groupinstall "Development tools" -y
# yum groupinstall "Desktop Platform Development" -y   桌面开发工具包(图形化相关包)
# yum install cmake
# yum install ncurses-devel

2、安装过程
# cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \       指定安装路径
-DENABLED_LOCAL_INFILE=1 \                  开启外部加载外部文件功能
-DWITH_INNOBASE_STORAGE_ENGINE=1 \      开启innodb存储引擎
-DSYSCONFDIR=/usr/local/mysql/etc \         初始化参数文件路径
-DMYSQL_UNIX_ADDR=/mysql56data/mysql.sock \ socket文件路径
-DMYSQL_TCP_PORT=3307 \                 指定端口号
-DDEFAULT_CHARSET=utf8 \                    默认字符集
-DDEFAULT_COLLATION=utf8_general_ci \       默认校对规则(排序规则)
-DWITH_EXTRA_CHARSETS=all \             扩展字符集
-DMYSQL_USER=mysql                      运行mysql用户身份

# make ;make install    

3、安装后配置
1>  手动编写my.cnf配置文件
# vim /usr/local/mysql/etc/my.cnf
[mysqld]
port=3307
datadir=/mysql25/data
pid-file=/mysql25/data/mysql25.pid
socket=/mysql25/data/mysql.sock
log-error=/mysql25/data/mysql25-err.log
user=mysql

[client]
socket=/mysql25/data/mysql.sock

2>  创建相关用户及目录,并修改权限

3>  初始化数据库
# /usr/local/mysql/scripts/mysql_install_db --defaults-file=/usr/local/mysql/etc/my.cnf --basedir=/usr/local/mysql --user=mysql

4>  启动服务
# /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/etc/my.cnf &

5>  登录

==============================================================

编译安装源码版apache
1、安装前准备
1>  先干掉原来编译过的apache(如果之前已安装过)
rm -rf /usr/local/apache2  -rf
2>  安装依赖包apr
在rhel6.5下直接编译安装apache的2.4系列版本,会报下面的错误:
checking for APR... configure: WARNING: APR version 1.4.0 or later is required, found 1.3.9
configure: WARNING: skipped APR at apr-1-config, version not acceptable
原因:表示系统自带的apr软件版本为1.3.9,但它需要1.4.0以上的版本。

解决方法:
第一种:把apache降为2.2系列,就OK了。
第二种:去下载新版本apr先编译,再编译apache调用它。

安装apr软件:
# tar xf apr-1.5.2.tar.bz2 -C /usr/src/
# cd /usr/src/apr-1.5.2
# ./configure
# make
# make install

# tar xf apr-util-1.5.4.tar.bz2 -C /usr/src/
# cd /usr/src/apr-util-1.5.4/
# ./configure --with-apr=/usr/local/apr/bin/apr-1-config    指定软件apr的路径
# make
# make install

思考:一个软件的库文件是有可能被其它软件所调用,那么其它软件能否找到你的库文件呢?
1> 一般来说,库文件安装到/lib,/lib64,/usr/lib/,/usr/lib64等,都可以找得到;
     但是如果一个软件xxx把库文件安装到/usr/local/xxx/lib下,就要把这个路径加入到ldconfig命令可以找到的路径列表里面去,别人才能找到。
2> ldconfig是一个动态链接库管理命令;
    主要用途是在默认搜索目录(/lib,/lib64,/usr/lib/,/usr/lib64)以及动态库配置文件/etc/ld.so.conf中所列的目录中搜索出可共享的动态链接库

 问题:怎样将库文件的指定安装路径加入到ldconfig命令的搜索列表里?
# vim /etc/ld.so.conf       
include ld.so.conf.d/*.conf     --或者在这里的任意.conf结尾的子配置文件里加上一行也可以
/usr/local/xxx/lib
方法1:在/etc/ld.so.conf这个主配置文件里加上一行,写上让别人要查找库文件的路径
方法2:在/etc/ld.so.conf.d/目录下创建一个*.conf结尾的文件,里面加入该路径即可

echo /usr/local/apr/lib >>/etc/ld.so.conf.d/lamp.conf

# ldconfig      上面加入路径后,就使用此命令让其生效


2、安装apache
# tar xf httpd-2.4.12.tar.bz2 -C /usr/src/
# cd /usr/src/httpd-2.4.12/

# ./configure \
--enable-modules=all \          加载所有支持模块
--enable-mods-shared=all \      共享方式加载大部分常用的模块
--enable-so \                   启动动态模块加载功能
--enable-rewrite  \             启用地址重写功能
--with-mpm=prefork \        插入式并行处理模块,称为多路处理模块,Prefork 是类UNIX平台上默认的MPM
--with-apr=/usr/local/apr/bin/apr-1-config \    指定依赖软件apr路径
--with-apr-util=/usr/local/apr/bin/apu-1-config 


#--enable-auth-digest       启用摘要认证,相比于基本认证 (可有可无)

错误:
可能会出现下面的错误,表示pcre-devel没安装;
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/
解决方法:
yum install pcre-devel后,再用上面参数再编译


# make 
# make install

# ls /usr/local/apache2/        确认这个目录产生后,说明apache编译安装成功
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  man  manual  modules

==========================================================
编译安装php

# tar xf php-5.6.11.tar.xz -C /usr/src/
# cd /usr/src/php-5.6.11
# ./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/usr/local/mysql/ \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql \ 连接mysql模块
--with-zlib \
--with-zlib-dir=/usr/local/mysql/zlib \     数据压缩用的函数库
--with-curl \
--enable-zip \
--with-gd \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--enable-opcache \
--enable-mbstring \
--enable-mbregex \
--enable-pcntl \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-calendar \
--enable-bcmath

--enable-fpm     开启PHP-FPM  进程管理器(支持php的fastcgi模式)
with-apxs2  调用apache加载模块支持PHP
gd          画图库
libevent 
libiconv        字符变换转换
libmcrypt       字符加密
mcrypt          字符加密
mhash           哈希运算

错误:缺少libcurl-devel包
configure: error: Please reinstall the libcurl distribution -
    easy.h should be in <curl-dir>/include/curl/
处理方法:
 yum -y install libcurl-devel
# make          make成功后,会显示让你make test,不用做
# make install


# ls /usr/local/apache2/modules/libphp5.so  确认有这个.so模块文件,就表示编译php成功

*****************************************************************************
如果make报类似下面的错误的话;或者你第一次make不成功,第二次重做,建议你删除/usr/src/php-5.6.11源码目录,重新解压,并使用make ZEND_EXTRA_LIBS='-liconv'来编译

collect2: ld returned 1 exit status
make: *** [sapi/fpm/php-fpm] Error 1

需要使用下面的参数来编译
make ZEND_EXTRA_LIBS='-liconv'
make install

======================================================================
后续配置

三个软件安装完毕后,进行apache和php配置

1、修改apache配置文件
# vim /usr/local/apache2/conf/httpd.conf
1> 配置优先支持中文
LoadModule negotiation_module modules/mod_negotiation.so    此模块打开注释
Include conf/extra/httpd-languages.conf         打开此选项,扩展配置文件就生效了

# vim /usr/local/apache2/conf/extra/httpd-languages.conf   修改子配置文件
DefaultLanguage zh-CN       打开注释,默认语言集改为中文
LanguagePriority zh-CN en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-TW     语言集优先集,把zh-CN 写到前面

2> 配置apache对php支持 也就是配置apache和php的联系
# vim /usr/local/apache2/conf/httpd.conf
LoadModule php5_module        modules/libphp5.so    找到这一句,在这句下面加上两句
AddHandler php5-script   .php       <---添加两行,告诉httpd把.php文件交给模块去编译
AddType text/html  .php     这两句的意思是以.php结尾的文件都认为是php程序文件,注意两句话的.php前面都是有一个空格的

3> 默认主页加上index.php,并放在index.html前,支持php的首页文件
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

4> 配置网站家目录
DocumentRoot "/web"         修改网站家目录
<Directory "/web">          相应的目录容器那里也要修改
......
</Directory>

默认的网站目录:/usr/local/apache2/htdocs/

2、让php支持连接本地的数据库
说明:
本地数据库一般是通过socket文件连接,而本地数据库的socket文件如果不在默认路径,就必须告诉php从哪里读取socket文件
# cp /usr/src/php-5.6.11/php.ini-production /usr/local/lib/php.ini
vim /usr/local/lib/php.ini
.....
[MySQL]
mysql.default_port = 3307       改成对应的mysql的端口
mysql.default_socket = /mysqldata56/mysql56.socket      对应的socket文件地址

[MySQLi]
mysqli.default_port = 3307
mysqli.default_socket = /mysqldata56/mysql56.socket

3、创建apache的默认数据根目录及权限修改
# mkdir /webroot
# chown daemon. -R /webroot

4、启动apache
# /usr/local/apache2/bin/apachectl start
(98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

注意:
上面的报错表示80被占用,可以去先停掉rpm版(或者改端口)httpd再启动

# /usr/local/apache2/bin/apachectl start
# lsof -i:80
COMMAND   PID   USER   FD   TYPE DEVICE SIZE NODE NAME
httpd   26564   root    3u  IPv6 190399       TCP *:http (LISTEN)
httpd   26565 daemon    3u  IPv6 190399       TCP *:http (LISTEN)
httpd   26566 daemon    3u  IPv6 190399       TCP *:http (LISTEN)
httpd   26567 daemon    3u  IPv6 190399       TCP *:http (LISTEN)
httpd   26568 daemon    3u  IPv6 190399       TCP *:http (LISTEN)
httpd   26569 daemon    3u  IPv6 190399       TCP *:http (LISTEN)
再次启动,就可以看到源码版的进程

为了方便启动,做成脚本启动脚本
1、拷过去,因为默认为755有执行权限,所以我们不用再改权限,如果没有则需要更改权限
# cp /usr/local/apache2/bin/apachectl /etc/init.d/apache
# service apache stop
# lsof -i :80
# service apache start  

----------------------------
启不来的一个错误小示例:
vim /etc/hosts
10.1.1. 1   node1.uplook.com     --这里写错了,最后一个1前有一个空格    

# /usr/local/apache2/bin/apachectl start    --会造成start或stop 卡在那里

5、去网站家目录下写一个php的测试页
# vim /webroot/test.php
<?php
        phpinfo();
?>

然后使用浏览器访问测试页,看是否支持php

http://IP/test.php   看到php的测试页表示ok

到此,lamp的编译安装和基本配置完毕,下面就可以安装你的web应用了

搭建Discuz论坛
Discuz_X3.2_SC_UTF8.zip     Discuz论坛
phpMyAdmin-4.4.11-all-languages.zip     php写的mysql的管理工具(类似oracle的OEM)
phpwind_v9.0.1_utf8.zip wind论坛

虚拟主机:

# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

构建lamp所需软件包:
mysql-5.6.25.tar.gz
php-5.6.11.tar.xz
httpd-2.4.12.tar.bz2


作业:
1、根据笔记搭建web服务
www.bbs.com——>/web/bbs      Discuz_X2.5_SC_UTF8.zip
www.admin.com——>/web/admin  phpMyAdmin-4.4.11-all-languages.zip
www.mybbs.com——>/web/mybbs  wordpress-4.7.3-zh_CN.tar.gz
2、sql语句
3、预习备份恢复


phpwind论坛:
# cp -a phpMyAdmin-4.0.2-all-languages/*  /webserver/bbswind
# cd  /webserver/bbswind
# mv config.sample.inc.php config.inc.php
$cfg['blowfish_secret'] = 'a8sfdfkljlb7c6d'; 随便修改
....
$cfg['Servers'][$i]['host'] = 'localhost'; 如果登录不成功尝试修改成127.0.0.1


编译软件的过程与经验
1、./configure  通过指定参数,来确认你想要安装的软件安装在哪里,加上哪些功能和去掉哪些功能(如果这一步报错,基本都是缺少依赖包);
解决方法:
使用yum去安装,一般来说,rhel做为一个成熟的linux操作系统,常见的底层依赖包都自带了,所以安装下面这两个组,一般都会有你所需要的依赖包。
# yum groupinstall "Development tools" -y
# yum groupinstall "Desktop Platform Development" -y 
如果缺少依赖包在rhel的yum源里找不到,则上网下载第三方的软件,先编译第三方软件,再编译本软件

关于./configure参数选择的基本方法:
./configure --help 查看所有的编译参数
第一个重要参数
--prefix=   此参数指定安装目录(一般安装到/usr/local/或者/usr/local/软件名下)

第二类重要参数:
--enable-xxx    打开一个功能(默认是关闭的)
--disable-xxx   关闭一个功能(默认是打开的)

如果你是新手,你就不加任何功能参数,全部使用默认值。但又如果你怕少了功能造成以后需要重编,你可以加上所有的enable参数(但加得越多,错误概率也越大,因为调用的依赖会多,有可能会因为少包而报错)

第三类参数:
--with-xxx=DIR    指定一个目录,调用此目录的功能

2、make   相当于是根据你上一步定义好的文件(Makefile),把这个软件给做出来(这一步一般很少出错,如果出错,问题都比较麻烦。可能是一些兼容性的问题等等,你可以尝试上网查询解决方法,如果查不到,只能换个环境或者换个软件版本或者换些编译参数重新编译)

3、make install  把做好的软件,安装到你第一步所指定的安装目录里(这一步几乎不会出错的)


问题:假设一个软件aaa,安装到/usr/local和安装到/usr/local/aaa之间的区别?
安装到/usr/local下:
优点:
此软件的命令一般会安装到/usr/local/bin或/usr/local/sbin等;
这些路径都默认在$PATH里,所以安装的命令可以直接用,而不用使用绝对路径。
库文件一般都会安装到/usr/local/lib下,所以把它加入ldconfig,以后所有安装在此目录的库文件都可以被找到。
缺点:
不方便删除,因为很多软件都安装到/usr/local下

安装到/usr/local/abc下:
优缺点与上面正好相反

最终建议:小软件一般默认安装/usr/local/;大软件安装/usr/local/软件名/下


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是原来的你吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值