LAMP的配置安装

来源:互联网 发布:尼尔森零售监测数据 编辑:程序博客网 时间:2024/04/30 09:09
目标:基于LAMP架构,搭建一个bbs论坛rpm版本:安装方便,升级、卸载都灵活,很难或者无法定制主要组件的功能,适合批量部署源码包编译:需要自己定制参数,前提是需要对平台的功能需要非常了解;卸载、升级、安装并不是很方便灵活折中的方案:1、上线前,在测试环境中编译安装并且调试完毕后,把编译后的源码同步到其余软硬环境一样的机器,然后再make install2、上线前,在测试环境中编译安装并且调试完毕后,把源码包封装成rpm包,再使用批量化部署软件(puppet)进行安装LAMP =  Linux + Apache + MySQL + Php编译方式(老的编译方式):    Apache ----> MySQL ----> Php 或者 MySQL----->Apache----->Php说明:1apache的安装必须要先于php;因为php是作为apache的模块libphp.so ,被apache加载调用2apachemysql之间并没有直接先后顺序的依赖,所以谁先谁后没所谓3、在php-5.3版本前,mysql必须先于php的编译;因为php需要实现连接数据库的功能,它通过mysql的接口才能编译出该功能。在php-5.3版本或者之后,php已经集成了一套连接mysql数据的代码,并不依赖mysql的接口,这个时候,mysqlphp的编译顺序也就无所谓了。思考:apachemysql能不能在不同终端编译安装?传统的安装php的方式中,我们在编译PHP时要支持mysql,一般需要指定以下几项:--with-mysql=/usr/local/mysql--with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql但上面的三个参数需要先编译mysql,再编译php才可以。新的编译方式,把三面三个参数替换成下面三个参数,则phpmysql的编译顺序无所谓--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/mysqldata:/mysql25/data1、安装前准备清空环境、安装相应的软件包# yum groupinstall "Development tools" -y# yum groupinstall "Desktop Platform Development" -y   桌面开发工具包(图形化相关包)# yum install cmake# yum install ncurses-devel2、安装过程# 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=3307datadir=/mysql25/datapid-file=/mysql25/data/mysql25.pidsocket=/mysql25/data/mysql.socklog-error=/mysql25/data/mysql25-err.loguser=mysql[client]socket=/mysql25/data/mysql.sock2>  创建相关用户及目录,并修改权限3>  初始化数据库# /usr/local/mysql/scripts/mysql_install_db --defaults-file=/usr/local/mysql/etc/my.cnf --basedir=/usr/local/mysql --user=mysql4>  启动服务# /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/etc/my.cnf &5>  登录==============================================================编译安装源码版apache1、安装前准备1>  先干掉原来编译过的apache(如果之前已安装过)rm -rf /usr/local/apache2  -rf2>  安装依赖包aprrhel6.5下直接编译安装apache2.4系列版本,会报下面的错误:checking for APR... configure: WARNING: APR version 1.4.0 or later is required, found 1.3.9configure: 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  进程管理器(支持phpfastcgi模式)with-apxs2  调用apache加载模块支持PHPgd          画图库libevent libiconv        字符变换转换libmcrypt       字符加密mcrypt          字符加密mhash           哈希运算错误:缺少libcurl-develconfigure: 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 statusmake: *** [sapi/fpm/php-fpm] Error 1需要使用下面的参数来编译make ZEND_EXTRA_LIBS='-liconv'make install======================================================================后续配置三个软件安装完毕后,进行apachephp配置1、修改apache配置文件# vim /usr/local/apache2/conf/httpd.conf1> 配置优先支持中文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> 配置apachephp支持 也就是配置apachephp的联系# vim /usr/local/apache2/conf/httpd.confLoadModule 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.inivim /usr/local/lib/php.ini.....[MySQL]mysql.default_port = 3307       改成对应的mysql的端口mysql.default_socket = /mysqldata56/mysql56.socket      对应的socket文件地址[MySQLi]mysqli.default_port = 3307mysqli.default_socket = /mysqldata56/mysql56.socket3、创建apache的默认数据根目录及权限修改# mkdir /webroot# chown daemon. -R /webroot4、启动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:80no listening sockets available, shutting downUnable to open logs注意:上面的报错表示80被占用,可以去先停掉rpm版(或者改端口)httpd再启动# /usr/local/apache2/bin/apachectl start# lsof -i:80COMMAND   PID   USER   FD   TYPE DEVICE SIZE NODE NAMEhttpd   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/hosts10.1.1. 1   node1.uplook.com     --这里写错了,最后一个1前有一个空格    # /usr/local/apache2/bin/apachectl start    --会造成startstop 卡在那里5、去网站家目录下写一个php的测试页# vim /webroot/test.php<?php        phpinfo();?>然后使用浏览器访问测试页,看是否支持phphttp://IP/test.php   看到php的测试页表示ok到此,lamp的编译安装和基本配置完毕,下面就可以安装你的web应用了搭建Discuz论坛Discuz_X3.2_SC_UTF8.zip     Discuz论坛phpMyAdmin-4.4.11-all-languages.zip     php写的mysql的管理工具(类似oracleOEMphpwind_v9.0.1_utf8.zip wind论坛虚拟主机:# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf构建lamp所需软件包:mysql-5.6.25.tar.gzphp-5.6.11.tar.xzhttpd-2.4.12.tar.bz2作业:1、根据笔记搭建web服务www.bbs.com——>/web/bbs      Discuz_X2.5_SC_UTF8.zipwww.admin.com——>/web/admin  phpMyAdmin-4.4.11-all-languages.zipwww.mybbs.com——>/web/mybbs  wordpress-4.7.3-zh_CN.tar.gz2sql语句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 如果缺少依赖包在rhelyum源里找不到,则上网下载第三方的软件,先编译第三方软件,再编译本软件关于./configure参数选择的基本方法:./configure --help 查看所有的编译参数第一个重要参数--prefix=   此参数指定安装目录(一般安装到/usr/local/或者/usr/local/软件名下)第二类重要参数:--enable-xxx    打开一个功能(默认是关闭的)--disable-xxx   关闭一个功能(默认是打开的)如果你是新手,你就不加任何功能参数,全部使用默认值。但又如果你怕少了功能造成以后需要重编,你可以加上所有的enable参数(但加得越多,错误概率也越大,因为调用的依赖会多,有可能会因为少包而报错)第三类参数:--with-xxx=DIR    指定一个目录,调用此目录的功能2make   相当于是根据你上一步定义好的文件(Makefile),把这个软件给做出来(这一步一般很少出错,如果出错,问题都比较麻烦。可能是一些兼容性的问题等等,你可以尝试上网查询解决方法,如果查不到,只能换个环境或者换个软件版本或者换些编译参数重新编译)3make 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/软件名/下