编译搭建Lamp服务器
Lamp 是目前倍受欢迎的一种网站服务器。其主要有linux+apache+mysql+php 组成。由于其组成成员都是开源免费的产品,所以被作为中小型网站服务器的选择。
LZ之前在学校学linux的时候搭建过一次PHP。那时只知道Lamp是由什么组成的,却不知道其中的联系,最后在搭建lamp的时候,用rpm的方式安装,几个模块之间相互独立,根本就达不到服务器的效果,后来尝试用yun搭建,成功了,却不明其原理。
这篇文章,是LZ理清思路,用源码编译安装Lamp之后的笔记。
首先,理清思路。Lamp的组成,其实也是我们网站开发初期所需要考虑的四大要素:系统、环境、数据库、开发语言。而在搭建这的个环境的过程中,有两点是需要提到的。一、在apache 刚安装的时候,它是不支持PHP的。Apache 要支持PHP需要加载PHP指定的模块,这个模块,是不会默认加载的,所以如果源码编译的话,后期是要手动加载模块的。二、PHP在安装的时候,不仅要安装PHP本身,还要安装相应的库文件,否则很多功能会得不到实现或者制约。同时,PHP在安装的过程中,需要产生支持apache 的模块文件,同时还有mysql。所以PHP的安装,是整个Lamp安装的最重要的一个环节。
因为是源码编译,所以有些环境需要体检准备。Linux下的源码,大都是用c编写的,所以在编译的时候,需要查看是否安装了gcc编译环境。
Linux 下 控制台输入 gcc -v 如果出现以下结果,就说明已经安装了gcc 了
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.7/lto-wrapper
目标:i686-linux-gnu
配置为:../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.7.3-1ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --with-system-zlib --enable-objc-gc --enable-targets=all --with-cloog --enable-cloog-backend=ppl --disable-cloog-version-check --disable-ppl-version-check --enable-multiarch --disable-werror --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
线程模型:posix
gcc 版本 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1)
大部分情况下linux会默认带有gcc的,如果没有,需要自行下载安装
接下来,需要卸载已经安装的低版本的PHP,Mysql,Apache,以免在安装过程中出现冲突。
Redhat 版本的linux 可以如下卸载:
查询是否安装 :rpm -qa|grep -i httpd ·「 mysql,php」
停止服务:service httpd 「 mysql,php」 stop
卸载软件包:rpm -e 查询到的软件包名 --nodep
Debian 版本的linux 可以如下卸载:
显示软件信息 :apt-cache show 软件名 或者dpkg -l |grep -i "软件包名"
卸载软件包: apt-get remove 软件包 或者dpkg -r 卸载软件包
建议卸载之后,查看配置文件或者文件夹是否存在,并一并删除,免得干扰
卸载完成后,接下来下载所需要的安装包。以下是所需要的源码包,其中包括安装PHP 时需要的库文件和主要的安装包
PHP所需要的库文件,需要先安装,安装的顺序建议按排序安装
libxml2-2.9.0
libmcrypt-2.5.8
zlib-1.2.7
libpng-1.5.14
jpegsrc.v8b
freetype-2.4.10
autoconf-2.69
gd-2.0.35
主要安装包
httpd-2.4.3
mysql-5.0.41
php-5.4.11
phpMyAdmin-3.5.6-all-languages
额外代码包:
apr-1.4.6
apr-util-1.5.1
m4-1.4.9
pcre
以上安装包都可以从开源网站下载,以下是网上找到的比较全的安装包下载地址:http://pan.baidu.com/share/link?shareid=1389731276&uk=437486341
下载完安装包后,建议将安装包存放在统一的目录(如/usr/local )下,然后将其解压。以上面给出的资源为例:
Unzip Lamp_All_file.zip -d /usr/local/src //将文件解压到指定目录
cd /usr/local/src
ls *.tar.gz |xargs -n1 tar xzvf //解压该目录下所有的tar.gz 包。(有点占内存)
解压完成后,开始对源代码进行配置与安装。
Linux 下源代码的配置与安装大体都是使用 ./configure 、make 和 make install命令
在源码包的目录下,首先./configure 配置相应的路径,如:
./configure --prefix=/usr/local/lamp/libxml2
然后就运行make 命令 在运行make install 进行安装,make和make install 安装可以同时进行,如:
make && make install
顺序安装源码包:
libxml2-2.9.0
./configure --prefix=/usr/local/lamp/libxml2-2.9.0
make && make install
libmcrypt-2.5.8
./configure --prefix=/usr/local/lamp/libmcrypt-2.5.8
make && make install
zlib-1.2.7
./configure --prefix=/usr/local/lamp/zlib-1.2.7
make && make install
libpng-1.5.14
./configure --prefix=/usr/local/lamp/libpng-1.5.14
make && make install
jpegsrc.v8b(注意;jpeg 源码包安装的时候是不会自动生成目录的,所以需要在安装之前先创建相应的目录。同时需要将其设置成共享库和静态库,因为接下来gd安装的时候需要用到jpeg库,如果没有设置的话,最后检测的时候会检测不到jpeg库的)
mkdir /usr/local/lamp/jpeg
mkdir /usr/local/lamp/jpeg/bin
mkdir /usr/local/lamp/jpeg/lib
mkdir /usr/local/lamp/jpeg/include
mkdir /usr/local/lamp/jpeg/man
mkdir /usr/local/lamp/jpeg/man/man1
./configure --prefix=/usr/local/lamp/jpeg/ --enable-shared --enable-static
make && make install
freetype-2.4.10
./configure --prefix=/usr/local/lamp/freetype
make && make install
autoconf-2.69(autoconf 安装的时候,可能会提示找不到M4,如果出现这样的情况的话,需要下载M4 的源文件并安装)
./configure --prefix=/usr/local/lamp/autoconf
make && make install
gd-2.0.35(gd库在安装的时候,除了需要配置安装路径,还需要将前面安装jpeg库和freetype库的路径也给附上)
./configure --prefix=/usr/local/lamp/gd2 --with-jpeg=/usr/local/lamp/jpeg8/ --with-freetype=/usr/local/lamp/freetype/
make && make install
以上是PHP所需的库文件的安装过程,接下来需要安装主要的代码包:
Apache (在安装apache 之前,为了保证成功,建议配置apr和apr-util,主要是将下载原来的源代码包放到apache 的源代码包的指定目录中去。同时还要编译安装pcre 包)
cp -r apr httpd-2.4.3/srclib/apr
cp -r apr-util httpd-2.4.3/srclib/apr-util
进入pcre目录
./configure --prefix=/usr/local/pcre
make && make install
进入apache目录
./configure --prefix=/usr/local/lamp/httpd/ --sysconfdir=/etc/httpd --with-included-apr --disable-userdir --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared --enable-static-support --with-pcre=/usr/local/pcre/
make && make install
mysql数据库的安装在http://www.cnblogs.com/Seanit/p/3706238.html 中已经说过,在此不做赘述。接下来便是安装PHP
./configure
--prefix=/usr/local/lamp/php/
--with-config-file-path=/usr/local/lamp/php/etc/ --with-apxs2=/usr/local/lamp/httpd/bin/apxs
--with-mysql=/usr/local/lamp/mysql/
--with-libxml-dir=/usr/local/lamp/libxml2/
--with-jpeg-dir=/usr/local/lamp/jpeg/
--with-freetype-dir=/usr/local/lamp/freetype/
--with-gd=/usr/local/lamp/gd2/
--with-mcrypt=/usr/local/lamp/libmcrypt/ --with-mysqli=/usr/local/lamp/mysql/bin/mysql_config
--enable-soap --enable-mbstring=all --enable-sockets
make && make install(此处可能会出错)
安装完成后,需要拷贝php.ini 文件到php的安装目录下
cp php.ini-dist(php.ini-production) /usr/local/lamp/php/etc/php.ini
最后,整合lamp 环境。Apache 和PHP安装完成之后,其实并没有相互关联,apache并没有加载PHP模块,所以并不能打开php。因此,接下来需要配置apache 加载php模块。
vi /etc/httpd/httpd.conf
在文件中加入如下语句:
AddType application/x-httpd-php .php .phtml
重启apache 服务器
/usr/local/lamp/apache2/bin/apachectl restart(注意,httpd 默认情况下开启的是80端口,可是linux默认情况下开启1024以内端口号,需要用到root权限,所以此处如果用普通账户可能会报bind错误。)
至此,Lamp的开发环境就搭建成功了
后期配置:
配置默认首页(在DirectoryIndex 中加入index.php):
vi /etc/httpd/httpd.conf
DirectoryIndex index.php index.Html index.html
以下是LZ 安装时曾经遇到过的错误以及解决方案:
1、安装php时出错:
In file included from /usr/local/src/php-5.4.6/ext/gd/gd.c:103:
/usr/local/src/php-5.4.6/ext/gd/gd_ctx.c: 在函数‘_php_image_stream_putc’中:
/usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:51: 错误:‘struct gdIOCtx’没有名为‘data’的成员
/usr/local/src/php-5.4.6/ext/gd/gd_ctx.c: 在函数‘_php_image_stream_putbuf’中:
/usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:58: 错误:‘struct gdIOCtx’没有名为‘data’的成员
/usr/local/src/php-5.4.6/ext/gd/gd_ctx.c: 在函数‘_php_image_stream_ctxfree’中:
/usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:67: 错误:‘struct gdIOCtx’没有名为‘data’的成员
/usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:68: 错误:‘struct gdIOCtx’没有名为‘data’的成员
/usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:69: 错误:‘struct gdIOCtx’没有名为‘data’的成员
In file included from /usr/local/src/php-5.4.6/ext/gd/gd.c:103:
/usr/local/src/php-5.4.6/ext/gd/gd_ctx.c: 在函数‘_php_image_output_ctx’中:
/usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:153: 错误:‘gdIOCtx’没有名为‘data’的成员
make: *** [ext/gd/gd.lo] 错误 1
这个是php5.4的一个bug,需要修改gd的一个文件
解决方法:
vi /usr/local/gd2/include/gd_io.h
typedef struct gdIOCtx
{
int (*getC) (struct gdIOCtx *);
int (*getBuf) (struct gdIOCtx *, void *, int);
void (*putC) (struct gdIOCtx *, int);
int (*putBuf) (struct gdIOCtx *, const void *, int);
int (*seek) (struct gdIOCtx *, const int);
long (*tell) (struct gdIOCtx *);
void (*gd_free) (struct gdIOCtx *);
void (*data);
}
gdIOCtx;
在该文件中加入红色字体的语句,在重新make即可
2、httpd 启动时错误
(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端口已被调用,需要kill掉进程即可
3、访问php 文件时打开下载窗口显示下载该PHP页面
这种情况是PHP模块未被加载的原因造成的
解决方案:
在httpd.conf 中查看是否存在以下语句:
LoadModule php5_module modules/libphp5.so
如果不存在,则添加,然后重启
4、http 无法加载模块错误
Httpd 启动的时候提示
Cannot load /usr/local/apache/modules/libphp5.so
这个显示的是httpd 无法加载libphp5.so模块,libphp5.so是php安装的时候生成的。
解决方案:
查看modules/libphp5.so 文件是否存在,如果不存在,既有可能是在配置php的时候出错了,可能在--with-apxs2=/usr/local/lamp/apache2/bin/apxs 上面出错,重新配置一下,在make 就能产生libphp5.so文件了。
5、编译PHP 时出现libtool 错误
libtool: link: `ext/date/lib/astro.lo' is not a valid libtool object
解决方案:重新安装libtool 然后make clean 再 make 即可
本文是在LZ参考了网络上的一些博文和视频之后实践后写的,主要参考了Lamp兄弟连视频教程和http://www.cnblogs.com/hanganglin/articles/3328223.html这篇文章,在此进行声明与感谢
编译搭建Lamp服务器的更多相关文章
- Ubuntu 搭建 LAMP 服务器
/******************************************************************** * Ubuntu 搭建 LAMP 服务器 * 说明: * 想 ...
- Centos搭建 LAMP 服务器教程
搭建 LAMP 服务 搭建 MySQL 数据库 安装 MySQL 使用 yum 安装 MySQL: yum install mysql-server -y 安装完成后,启动 MySQL 服务: ser ...
- CentOS下编译搭建LAMP环境
搭建LAMP环境须知 搭建LAMP环境时,需要安装的所有软件都要按照一定的顺序安装,我们按照Apache->MySQL->PHP的顺序安装.但是在安装PHP之前,应先安装PHP5需要的最新 ...
- AWS之EC2实例搭建LAMP服务器
在 Amazon Linux 2 上安装 LAMP Web 服务器 创建EC2实例,在安全组添加HTTP(80)规则 步骤 1:准备 LAMP 服务器 1.使用putty连接到你的EC2实例上(AMI ...
- Centos7.2 搭建Lamp服务器以及迁移WordPress个人博客详细过程
其实自己的博客搭了有段时间了,但是由于自己不太确定是不是一定要用wd的框架,以及实验室公网服务器的不稳定,就一直荒废着. 今天偶然间看到了腾讯云对于学生的优惠活动,毕业之前每月只要8元的云服务器(就算 ...
- CentOS 7运维管理笔记(5)----源代码安装Apache 2.4,搭建LAMP服务器
########################## 2016-07-07-Thu--20:34 补充 ##################### 编译安装OpenSSL笔记: 如果系统要使用 ...
- 源码编译搭建LAMP
环境版本信息: RHEL 5.3 Apache / 2.4.16 PHP / 5.4.45 mysql-5.5.45 源代码编译 安装方式 1: configure 配置 以及定制我们的软件包 2: ...
- 2-24-源码编译搭建LAMP环境-作业 ( By 小甘丶 )
安装上课的内容要求: 实验环境: VMware Virtual Machine : System Version: CentOS6.8 ( Gan35 ) IP Address : 192.168.3 ...
- CentOS 6.5 源码编译搭建LAMP(两台独立主机实现)
搭建前准备: 1.两台独立主机 httpd:192.168.1.105 php-fpm:192.168.1.105 mariadb:192.168.1.103 2.相关软件的源码包 httpd:htt ...
随机推荐
- UML六种关系
UML六种关系 基础之上,并对其进行了扩展.在程序中是通过继承类实现的.比如狗是对动物的具体描述,在面向对象设计的时候一般把狗设计为动物的子类. 表示方法:空心三角形箭头的实线,子类指向父类 实现 概 ...
- MyEclipse修改默认的workspace路径
在此只提供一个自己认为可行的办法(已验证可行) 已MyEclipse8.5为例 打开安装路径C:\Program Files\Genuitec\MyEclipse 8.5\configuration下 ...
- Excel 自定义函数
浅谈Excel开发:四 Excel 自定义函数 我们知道,Excel中有很多内置的函数,比如求和,求平均,字符串操作函数,金融函数等等.在有些时候,结合业务要求,这些函数可能不能满足我们的需求,比 ...
- 数据结构中的棧在C#中的实现
数据结构中的棧在C#中的实现 一.大致学习 棧是一种面向表的数据结构,棧中的数据只能在标的某一短进行添加和删除操作,是一种典型的(LIFO)数据结构. 现实生活中的理解:自助餐厅的盘子堆,人们总是从顶 ...
- MapXtreme+Asp.net 动态轨迹
MapXtreme+Asp.net 动态轨迹(请求大神指点) 功能简介:在MapXtreme+Asp.net的环境下实现轨迹回放功能,经过两天的努力基本实现此功能.但还有部分问题需要解决,求大神们 ...
- 黑马程序员:Java基础总结----网络编程
黑马程序员:Java基础总结 网络编程 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...
- spark单机部署及样例运行
spark单机运行部署 环境预装 需要预先下载jdk和spark.机器使用centos6.6(推荐).然后依次运行 [root@spark-master root]# cd /root #安装必要的软 ...
- jdk各版本新特性
只收纳常用的新特性 jdk1.4 1.引入断言 jdk5 1.引入泛型 2.引入枚举Enum 3.可以自动拆装箱 4.引入注解Annotation 5.引入新的迭代方式foreach 6.引入静态导入 ...
- 关于JavaMail
一.概述 1.邮件协议: SMTP:(Simple Mail Transfer Protocol,简单邮件传输协议)发邮件协议: POP3:(Post Office Protocol Version ...
- hdu1044
#include <cstdio> #include <cstring> #include <queue> using namespace std; const i ...