Linux 上的LAMP敏捷构架类型总结 PHP/MyQSL/Apache/Vsftd源码编

Linux 上的LAMP敏捷构架类型总结 PHP/MySQL/Apache/Vsftd源码编译过程。

表弟毕业了 拿了份某公司的web developer的offer  神奇的是他之前一直是学自动化的 完全没有听说过LAMP 也不知道什么是PHP Python 在校期间也只是做过一些matlib的控制流项目。 让我帮忙写一篇手册给他 让他1天内快速掌握PHP所需要的相关知识

没办法 因为之前有做过一些PHP的快发工作 就胡乱写了几篇文章给他 

完事后 留备份做纪念 摘抄几篇实用的文章 速成Lamp(Linux-Apache-MySQL-PHP/Python)的环境搭建和测试环境部署

突然接到这个"宏大"的任务,却不知道如何入手, 弟弟住在我楼下,可以访问我的WIFI网络 于是我在本机上用VM-Ware搭建了一个虚拟的LINUX机 开始了PHP新手第一课授课 

——————平台搭建———————

关于PHP主流运行的两种方式总结:

1 LibPHP5 (Linux虚拟主机上的绝大多数运行方式)

Apache作为世界上通用性最广的web服务器 除了接受HTTP请求外 在PHP1.x 开始作为Apache linux进程的一个子进程运行 每一个http请求 apache主进程会fork一个新的处理器程序 加载PHP解释器 ,此在Linux上通常为.so 的二进制可执行链接库 libphp5.so

win上一般是libphp5_apache.dll的动态链接库,然后包装到msIIS的isap_扩展上作为一个fastcgi子程序运行  这样每一次请求网页文件 先接收报头信息  解析用<?php ?>标签嵌入的Html或PHP文件(当然 你高兴 也可以是phpx 甚至ASPX文件),安装过程也很简单,如果用VC++6.0编译以后 在$apache_home/conf/http.conf文件内 用命令导航到

vim /opt/apache22/conf/httpd.conf
vim -> G (文件末端)
添加三行代码就可以了

//php.exe路径 (win32必须指明  linux不必) 
//动态库路径
//修改http-mine类型 通常为.php .html 比较另类的也有 .aspx .jsp跑的却是PHP代码 不过用netcraft很容易探测到实际http报文

PHPIniDir "$PHP_HOME"  //例如php安装在d:\php53  照抄 注意有双引号  分隔符位系统分隔符 win32就是"\"  linux不写这一行
LoadModule php5_module $PHP_HOME/apache2_libphp5.dll[win32](libphp5.so)[linux]  //双引号可写可不写
AddType application/x-httpd-php .php .html(扩展名)

PHP最简单的编译过程就这样 如果是LINUX 注意用apache的apxs挂钩程序编译生成libphp5.so文件 也就是第二行需要的链接库
如果是win32上搭建环境 注意在php.net上下载PHP的时候注意选择平台和编译器版本  例如32位xp 就是php.zip-xxx-windows-32bit-vc6.tar.gz
64位win7应该是64-bit-vc9 
简单讲 就是先Apache->PHP   mysql无所谓 只要有头文件 可以随时用PHPIPZ 动态编译php的mysql mysqli pdo_mysql扩展 即使没有安装MySQL也可以

通常来说,很多文章和培训机构会始终纠结在PHP环境这个问题上 也就是Libphp5的安装 但这不是本文的重点 也不是表弟应该快速掌握的知识  其实 PHP老鸟一般都会用xampp 或者appserv这样的工具软件 一直点下一步 完成在windows上的安装 或者用linux  bash 一键运行linux上的自定义需求编译 反正不管怎么变 始终都是上面提到的三行  比较简单  linux的源码安装也比较简单  基本没有什么技术含量   一般的学生安装2-3次以后都能写一个一键安装的脚本 或bash 或tcsh 我也贴一个 我自己用的linux上的一件脚本   把3个源文件丢到脚本的目录或者子目录 就不用管了   apache位per work方式 php为apxs编译生成 默认模块一个都不在 后期需要再进行编译  mysql 说一下  自从5.5以后 官方推荐用cmake方式取代传统的makefile编译  所以记得吧cmake.xxx.tar.gz也丢到脚本目录下面
 
LAMPrun.sh
  1. #!/bin/bash  
  2. #  
  3. #file: configure  
  4. #program:  
  5. #   to install apache2 with mpm thread modules  
  6. #     
  7. #para:  modules=most  
  8.   
  9.   
  10. des_dir="/usr/local/"  
  11. wwwroot="/var/www/html"  
  12. dbroot="/var/www/db/mysql"  
  13. mysqlroot="$des_dir/mysql56"  
  14. apacheroot="$des_dir/apache22"  
  15. nginxroot="$des_dir/nginx10"  
  16. phproot="$des_dir/php53"  
  17. source_dir=`pwd`  
  18. export des_dir wwwroot dbroot source_dir  
  19.   
  20. #-------------------------function area---------------------------------|  
  21.   
  22. #add the specefied user account for html behaviors and mail..via etc  
  23. function _Uadd_in(){  
  24. userdel www>&/dev/null  
  25. gourpadd www&&useradd -d $wwwroot -g www www   
  26. chmod +rwx $wwwroot  
  27. chown -R www:www $wwwroot  
  28. }  
  29.   
  30. function _check_env_php()  
  31. {  
  32. zypper -n install autoconf libssl-dev libpcre++-dev libz-dev libxml2-dev>&/dev/null  
  33. yum -y install autoconf libssl-dev libpcre++-dev libz-dev libxml2-dev>&/dev/null  
  34. apt-get -y install autoconf libssl-dev libpcre++-dev libz-dev libxml2-dev>&/dev/null  
  35. }  
  36.   
  37. function _chech_env_mysql5()  
  38. {  
  39. zypper -n install ncurses-dev cmake>&/dev/null  
  40. yum -y install ncurses-dev cmake>&/dev/null  
  41. apt-get -y install ncurses-dev cmake>&/dev/null  
  42. }  
  43.   
  44.   
  45. function apache_in(){  
  46. #--------------------  
  47. file=`find . -name httpd*.gz`  
  48. #like ./httpd-2.2.17.tar.gz  
  49.   
  50. file=${file##*/}  
  51. dir=${file%%.tar*}  
  52.   
  53. if [ -d $dir ];then  
  54.     cd $dir  
  55. else  
  56.     tar -zxvf $file  
  57.     cd $dir  
  58. fi  
  59.   
  60. ./configure --prefix="$apacheroot" \  
  61. --with-mpm=worker \  
  62. --enable-mods-shared=most \  
  63. --enable-so   
  64. make&&make install  
  65. #set autorun  
  66. cp "$apacheroot/bin/apachectl" /etc/init.d/httpd  
  67. service httpd start&&netstat -tnl  
  68. echo "$apacheroot/bin/apachectl start" > /etc/rc.local   
  69. #ubunto&debian$  
  70. if [ -d /etc ];then echo "$apacheroot/bin/apachectl start" > /etc/rc.d/boot.local;fi  
  71. #OpenSUSE  
  72. cd $source_dir&&rm -rf $dir  
  73. echo "DONE!"   
  74. }  
  75.   
  76. function mysql_in(){  
  77.   
  78. _chech_env_mysql5  
  79.   
  80. #-------------------------  
  81. file=`find . -name mysql-5*.gz`  
  82. file=${file##*/} #  
  83. dir=${file%%.tar*}  
  84. #start 2 configure  
  85. read -p "checks basedir=[ $mysqlroot ] and datadir=[ $dbroot ],is thatright?[Y/N] " -t3  answer  
  86. answer=${answer:-"Y"}  
  87. "y" == $answer -o "Y" == $answer ]&&echo "go"||exit 0  
  88. rm -rf $dbroot $mysqlroot  
  89. # -- -- -- compile sources ,be patient  
  90.   
  91. if [ -d $dir ];then  
  92.     cd $dir;  
  93. else  
  94.     tar -zxvf $file  
  95.     cd $dir  
  96. fi   
  97.   
  98. #echo `pwd` && sleep 3  
  99. #DO NOT TUOCH THIS!  
  100. cmake . -DCMAKE_INSTALL_PREFIX="$mysqlroot" \  
  101. -DMYSQL_DATADIR="$dbroot"  \  
  102. -DWITH_INNOBASE_STORAGE_ENGINE=1 \  
  103. -DWITH_ARCHIVE_STORAGE_ENGINE=1 \  
  104. -DWITH_CSV_STORAGE_ENGINE=1 \  
  105. -DEXTRA_CHARSETS=all \  
  106. -DDEFAULT_CHARSET=utf8 \  
  107. -DDEFAULT_COLLATION=utf8_general_ci && make && make install  
  108.   
  109. #_-----------------------------  
  110. echo "DONE MySQL-5.6"&&sleep 2  
  111. echo "install sys tables which mysql instance needed,the flush privilege"  
  112. userdel mysql  
  113. useradd mysql -r -s /sbin/nologin || echo "already exists mysql~"  
  114. [ -d $dbroot ]||mkdir -pv $dbroot  
  115. cd $mysqlroot  
  116.   
  117. #change /etc/my.cnf  
  118. sed -e "/^\[mysqld\]$/abasedir=$mysqlroot" \  
  119. -e "/^\[mysqld\]$/adatadir=$dbroot" support-files/my-small.cnf > /etc/my.cnf  
  120.   
  121. #start 2 install sys_table of mysql  
  122. chmod +x scripts/mysql_install_db  
  123. chown -R mysql $dbroot  
  124. scripts/mysql_install_db --user=mysql --datadir=$dbroot \  
  125. --basedir=$mysqlroot  
  126. chmod +x support-files/* 
  127. cp support-files/mysql.server /etc/init.d/mysqld 
  128. ln -s $mysqlroot/bin/* /bin 
  129. service mysqld start 
  130. netstat -tnl 
  131. mysql -uroot -p  
  132. ls -al $dbroot 
  133. cd $source_dir&&rm -rf $dir 
  134. [ -L /etc/rc.local ]&&echo "service mysqld start">>/etc/rc.local|| \ 
  135. echo "service mysqld start">>/etc/rc.d/boot.local 
  136. #SUSE autorun 
  137. } 
  138.  
  139. function php_in() 
  140. { 
  141.  
  142. file=`find . -name php-5*.gz` 
  143. #like ./httpd-2.2.17.tar.gz 
  144.  
  145. file=${file##*/}  
  146. dir=${file%%.tar*}  
  147.   
  148. if [ -d $dir ];then  
  149.     cd $dir  
  150. else  
  151.     tar -zxvf $file  
  152.     cd $dir  
  153. fi  
  154.   
  155. ./configure --prefix=$phproot \  
  156. --with-config-file-path=$phproot/lib \  
  157. --with-mysql=$mysqlroot --with-pdo-mysql="$mysqlroot/bin/mysql_config" \  
  158. --enable-ftp --enable-mbstring --enable-sockets \  
  159. --enable-fpm --enable-gd-native-ttf \  
  160. --enable-zip --enable-bcmath \  
  161. --enable-sockets --enable-soap   
  162. sleep 5  
  163. make&&make install  
  164.   
  165. cp php.ini-development $phproot/lib/php.ini  
  166. cp $phproot/etc/php-fpm.conf.default $phproot/etc/php-fpm.conf  
  167. mv ext $phproot/ext  
  168. cd ..&&rm -rf $dir  
  169. vi $phproot/etc/php-fpm.conf  
  170. ln -s $phproot/bin/* /usr/bin 
  171. ln -s $phproot/bin/* /usr/sbin 
  172. pecl install memcache&&pecl install apc  
  173. vi $phproot/lib/php.ini 
  174. [ -f /etc/rc.local ]&&echo "$phproot/sbin/php-fpm&">>/etc/rc.local 
  175. echo "Congras!\nPHP-5.3.6 with-FPM,memcache,APC patch\nDone! "&&sleep 10 
  176. } 
  177.  
  178. function nginx_in() 
  179. { 
  180. #install nginx hight-perfalms http reverse-proxy http-server 
  181. #version 1.0.1 by Igor Sysoev from Rusia 
  182.  
  183. file=`find . -name nginx*.gz` 
  184. #like ./nginx-1.0.1.tar.gz 
  185.  
  186. file=${file##*/}  
  187. dir=${file%%.tar*}  
  188.   
  189. if [ -d $dir ];then  
  190.     cd $dir  
  191. else  
  192.     tar -zxvf $file  
  193.     cd $dir  
  194. fi  
  195.   
  196. ./configure --prefix=$nginxroot \  
  197. --with-http_ssl_module \  
  198. make&&make install  
  199. cd ../  
  200. rm -rf /etc/nginx  
  201. cd $nginxroot  
  202. vim /etc/nginx/nginx.conf  
  203. [ -f /etc/rc.local ]&&echo "$nginxroot/sbin/nginx&">>/etc/rc.local  
  204. }  
  205.   
  206. #-------------------------function area---------------------------------|  
  207.   
  208. #the main() function_call_area  
  209. #-----------------------------  
  210. apache_in  
  211. #mysql_in  
  212. php_in  
  213. #