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.sowin上一般是libphp5_apache.dll的动态链接库,然后包装到msIIS的isap_扩展上作为一个fastcgi子程序运行 这样每一次请求网页文件 先接收报头信息 解析用<?php ?>标签嵌入的Html或PHP文件(当然 你高兴 也可以是phpx 甚至ASPX文件),安装过程也很简单,如果用VC++6.0编译以后 在$apache_home/conf/http.conf文件内 用命令导航到vim /opt/apache22/conf/httpd.confvim -> 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.gz64位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
- #!/bin/bash
- #
- #file: configure
- #program:
- # to install apache2 with mpm thread modules
- #
- #para: modules=most
- des_dir="/usr/local/"
- wwwroot="/var/www/html"
- dbroot="/var/www/db/mysql"
- mysqlroot="$des_dir/mysql56"
- apacheroot="$des_dir/apache22"
- nginxroot="$des_dir/nginx10"
- phproot="$des_dir/php53"
- source_dir=`pwd`
- export des_dir wwwroot dbroot source_dir
- #-------------------------function area---------------------------------|
- #add the specefied user account for html behaviors and mail..via etc
- function _Uadd_in(){
- userdel www>&/dev/null
- gourpadd www&&useradd -d $wwwroot -g www www
- chmod +rwx $wwwroot
- chown -R www:www $wwwroot
- }
- function _check_env_php()
- {
- zypper -n install autoconf libssl-dev libpcre++-dev libz-dev libxml2-dev>&/dev/null
- yum -y install autoconf libssl-dev libpcre++-dev libz-dev libxml2-dev>&/dev/null
- apt-get -y install autoconf libssl-dev libpcre++-dev libz-dev libxml2-dev>&/dev/null
- }
- function _chech_env_mysql5()
- {
- zypper -n install ncurses-dev cmake>&/dev/null
- yum -y install ncurses-dev cmake>&/dev/null
- apt-get -y install ncurses-dev cmake>&/dev/null
- }
- function apache_in(){
- #--------------------
- file=`find . -name httpd*.gz`
- #like ./httpd-2.2.17.tar.gz
- file=${file##*/}
- dir=${file%%.tar*}
- if [ -d $dir ];then
- cd $dir
- else
- tar -zxvf $file
- cd $dir
- fi
- ./configure --prefix="$apacheroot" \
- --with-mpm=worker \
- --enable-mods-shared=most \
- --enable-so
- make&&make install
- #set autorun
- cp "$apacheroot/bin/apachectl" /etc/init.d/httpd
- service httpd start&&netstat -tnl
- echo "$apacheroot/bin/apachectl start" > /etc/rc.local
- #ubunto&debian$
- if [ -d /etc ];then echo "$apacheroot/bin/apachectl start" > /etc/rc.d/boot.local;fi
- #OpenSUSE
- cd $source_dir&&rm -rf $dir
- echo "DONE!"
- }
- function mysql_in(){
- _chech_env_mysql5
- #-------------------------
- file=`find . -name mysql-5*.gz`
- file=${file##*/} #
- dir=${file%%.tar*}
- #start 2 configure
- read -p "checks basedir=[ $mysqlroot ] and datadir=[ $dbroot ],is thatright?[Y/N] " -t3 answer
- answer=${answer:-"Y"}
- [ "y" == $answer -o "Y" == $answer ]&&echo "go"||exit 0
- rm -rf $dbroot $mysqlroot
- # -- -- -- compile sources ,be patient
- if [ -d $dir ];then
- cd $dir;
- else
- tar -zxvf $file
- cd $dir
- fi
- #echo `pwd` && sleep 3
- #DO NOT TUOCH THIS!
- cmake . -DCMAKE_INSTALL_PREFIX="$mysqlroot" \
- -DMYSQL_DATADIR="$dbroot" \
- -DWITH_INNOBASE_STORAGE_ENGINE=1 \
- -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
- -DWITH_CSV_STORAGE_ENGINE=1 \
- -DEXTRA_CHARSETS=all \
- -DDEFAULT_CHARSET=utf8 \
- -DDEFAULT_COLLATION=utf8_general_ci && make && make install
- #_-----------------------------
- echo "DONE MySQL-5.6"&&sleep 2
- echo "install sys tables which mysql instance needed,the flush privilege"
- userdel mysql
- useradd mysql -r -s /sbin/nologin || echo "already exists mysql~"
- [ -d $dbroot ]||mkdir -pv $dbroot
- cd $mysqlroot
- #change /etc/my.cnf
- sed -e "/^\[mysqld\]$/abasedir=$mysqlroot" \
- -e "/^\[mysqld\]$/adatadir=$dbroot" support-files/my-small.cnf > /etc/my.cnf
- #start 2 install sys_table of mysql
- chmod +x scripts/mysql_install_db
- chown -R mysql $dbroot
- scripts/mysql_install_db --user=mysql --datadir=$dbroot \
- --basedir=$mysqlroot
- chmod +x support-files/*
- cp support-files/mysql.server /etc/init.d/mysqld
- ln -s $mysqlroot/bin/* /bin
- service mysqld start
- netstat -tnl
- mysql -uroot -p
- ls -al $dbroot
- cd $source_dir&&rm -rf $dir
- [ -L /etc/rc.local ]&&echo "service mysqld start">>/etc/rc.local|| \
- echo "service mysqld start">>/etc/rc.d/boot.local
- #SUSE autorun
- }
- function php_in()
- {
- file=`find . -name php-5*.gz`
- #like ./httpd-2.2.17.tar.gz
- file=${file##*/}
- dir=${file%%.tar*}
- if [ -d $dir ];then
- cd $dir
- else
- tar -zxvf $file
- cd $dir
- fi
- ./configure --prefix=$phproot \
- --with-config-file-path=$phproot/lib \
- --with-mysql=$mysqlroot --with-pdo-mysql="$mysqlroot/bin/mysql_config" \
- --enable-ftp --enable-mbstring --enable-sockets \
- --enable-fpm --enable-gd-native-ttf \
- --enable-zip --enable-bcmath \
- --enable-sockets --enable-soap
- sleep 5
- make&&make install
- cp php.ini-development $phproot/lib/php.ini
- cp $phproot/etc/php-fpm.conf.default $phproot/etc/php-fpm.conf
- mv ext $phproot/ext
- cd ..&&rm -rf $dir
- vi $phproot/etc/php-fpm.conf
- ln -s $phproot/bin/* /usr/bin
- ln -s $phproot/bin/* /usr/sbin
- pecl install memcache&&pecl install apc
- vi $phproot/lib/php.ini
- [ -f /etc/rc.local ]&&echo "$phproot/sbin/php-fpm&">>/etc/rc.local
- echo "Congras!\nPHP-5.3.6 with-FPM,memcache,APC patch\nDone! "&&sleep 10
- }
- function nginx_in()
- {
- #install nginx hight-perfalms http reverse-proxy http-server
- #version 1.0.1 by Igor Sysoev from Rusia
- file=`find . -name nginx*.gz`
- #like ./nginx-1.0.1.tar.gz
- file=${file##*/}
- dir=${file%%.tar*}
- if [ -d $dir ];then
- cd $dir
- else
- tar -zxvf $file
- cd $dir
- fi
- ./configure --prefix=$nginxroot \
- --with-http_ssl_module \
- make&&make install
- cd ../
- rm -rf /etc/nginx
- cd $nginxroot
- vim /etc/nginx/nginx.conf
- [ -f /etc/rc.local ]&&echo "$nginxroot/sbin/nginx&">>/etc/rc.local
- }
- #-------------------------function area---------------------------------|
- #the main() function_call_area
- #-----------------------------
- apache_in
- #mysql_in
- php_in
- #