以下为本篇文章全部内容:
本博客这几天从迁移到阿里云,备案已经迁移过来了,就想把博客给转移过来,今天有空就把环境给编译了一下,顺便给大家写一篇自己编译LAMP环境的博文。帮助一下大家在学习如何在Centos下编译LAMP环境来放我们的网站程序。我所编译的环境是Apache2.29+MySQL5.6+PHP5.6,跟着我的步骤来看看我是怎么编译的。
1、准备工作
a、阿里云服务器一台(Centos系统的)
b、安装编译时候需要用到的工具
通过centos自带的yum来安装php需要的依赖和编译器:
yum -y install gcc gcc-c++ make automake autoconf kernel-devel ncurses-devel libxml2-devel openssl-devel curl-devel libjpeg-devel libpng-devel pcre-devel libtool-libs freetype-devel gd zlib-devel file bison patch mlocate flex diffutils readline-devel glibc-devel glib2-devel bzip2-devel gettext-devel libcap-devel libmcrypt-devel
c、下载Apache2.29、PHP5.6、MySQL5.6的源代码包
源代码下载地址:
apache: http://httpd.apache.org/download.cgi mysql:http://mysql.com/downloads/mysql/ php:http://php.net/downloads.php
以上都是官方的下载地址,本文用到的下载绝对地址:
apache: http://mirrors.hust.edu.cn/apache/httpd/httpd-2.2.29.tar.gz mysql: http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16.tar.gz php: http://cn2.php.net/distributions/php-5.6.7.tar.gz
因为个人习惯问题,我会把所有源代码下载到/tmp这个目录下面
2、开始安装apache
cd /tmp wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.2.29.tar.gz #下载apache源码包 tar -zxvf httpd-2.2.29.tar.gz cd httpd-2.2.29 ./configure --prefix=/usr/local/apache --enable-mods-shared=all --enable-so --enable-deflate=shared --enable-expires=shared --enable-headers=shared --enable-rewrite=shared --enable-static-support make && make install
编译参数解释:
--prefix=/usr/local/apache:指定安装目录 --enable-mods-shared=all:安装所有模块 --enable-so:允许运行时加载DSO模块,打开 so 模块 --enable-deflate=shared:将deflate模块编译为DSO,支持网页压缩 --enable-expires=shared:将expires模块编译为DSO,支持 http 控制 --enable-headers=shared:将headers模块编译为DSO --enable-rewrite=shared:将rewrite模块编译为DSO,支持 url 重写 --enable-static-support:使用静态连接(默认为动态连接)编译所有二进制支持程序
将apache添加到系统服务并创建链接和设置开机自动启动
cp build/rpm/httpd.init /etc/init.d/httpd #还是在/tmp/httpd-2.2.29这个目录里面,使用init脚本管理httpd chmod 755 /etc/init.d/httpd //增加执行权限 chkconfig --add httpd #添加httpd到服务项 chkconfig httpd on #设置开机启动 ln -fs /usr/local/apache/ /etc/httpd ln -fs /usr/local/apache/bin/httpd /usr/sbin/httpd ln -fs /usr/local/apache/bin/apachectl /usr/sbin/apachectl ln -fs /usr/local/apache/logs /var/log/httpd #设置软链接以适应init脚本
启动apache
service httpd start
然后在浏览器上输入服务器ip地址,如果能看到页面显示 It works! 那就说明apache安装成功
3、安装MySQL5.6
在编译MySQL之前我们先通过yum安装一下cmake,因为MySQL5.5之后支持了cmake来编译,所以这次用cmake,编译的过程比较久,需要耐心等待。
yum install -y cmake cd /tmp wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16.tar.gz tar -zxvf mysql-5.6.16.tar.gz cd mysql-5.6.16 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data/ -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci make && make install
编译参数解释:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql #指定安装路径 -DMYSQL_DATADIR=/usr/local/mysql/data/ #数据存放的路径 -DSYSCONFDIR=/etc #配置文件(my.cnf)目录 -DWITH_MYISAM_STORAGE_ENGINE=1 #支持MyIASM引擎 -DWITH_INNOBASE_STORAGE_ENGINE=1 #支持InnoDB引擎 -DWITH_MEMORY_STORAGE_ENGINE=1 #支持Memory引擎 -DWITH_READLINE=1 #快捷键功能 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock #连接数据库socket路径 -DMYSQL_TCP_PORT=3306 #端口 -DENABLED_LOCAL_INFILE=1 #允许从本地导入数据 -DWITH_PARTITION_STORAGE_ENGINE=1 #安装支持数据库分区 -DEXTRA_CHARSETS=all #安装所有的字符集 -DDEFAULT_CHARSET=utf8 #默认字符 -DDEFAULT_COLLATION=utf8_general_ci
配置MySQL数据库信息:
cp ./support-files/my-default.cnf /etc/my.cnf #在源码路径下执行该命令 groupadd mysql useradd -g mysql mysql -d /home/mysql -s /sbin/nologin #添加新用户,禁止登录shell chown -R mysql:mysql /usr/local/mysql #安装的路径 chmod 777 /usr/local/mysql/data -R #给数据库存放目录权限,防止出错
上面步骤完成,我们就需要对/etc/my.cnf进行配置了
[client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock skip-external-locking log-error=/usr/local/mysql/data/error.log key_buffer_size = 16M max_allowed_packet = 1M table_open_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M innodb_buffer_pool_size = 128M log-bin=mysql-bin binlog_format=mixed server-id = 1 datadir=/usr/local/mysql/data pid-file=/usr/local/mysql/data/mysql.pid user=mysql tmpdir=/tmp sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout
初始化数据库:
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/mysql.pid --tmpdir=/tmp
如果出现下面错误:
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
在/etc/my.cnf中加入:
explicit_defaults_for_timestamp = true
初始化数据库完成之后,修改目录的权限:
chown -R root /usr/local/mysql #把安装目录所属用户改成root用户 chown -R mysql /usr/local/mysql/data #数据库存放目录改成mysql用户
修改完成之后我们执行:
/usr/local/mysql/bin/mysqld_safe --user=mysql --explicit_defaults_for_timestamp=1 &
添加MySQL到系统服务并设置开机启动:
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld chmod 700 /etc/init.d/mysqld chkconfig --add mysqld chkconfig mysqld on PATH=/usr/local/mysql/bin:$PATH export PATH source /etc/profile
启动MySQL服务:
service mysqld start 或者 /etc/init.d/mysqld start
如果出现下图错误
则需要编辑 /etc/my.cnf的[mysqld]添加下面信息再启动
default-storage-engine=myisam default-tmp-storage-engine=myisam
如果添加上面信息启动成功,过一段时间mysql自动关闭,启动还出现上图错误的话,极有可能就是内存不足了,MySQL5.6比较消耗资源。可以尝试修改/etc/my.cnf来解决这一问题,如果还是没有办法解决那就只能升级服务器内存了。
innodb_buffer_pool_size = 128M
我上面配置信息给出默认的是128M,大家可以一点一点的调小来测试能不能启动。实在不行,只能建议各位升级服务器内存,512M内存不建议跑这么高版本,容易出问题。按照上面步骤修改了还会出现下面错误的话。大家就需要注意一点了。
需要查看一下my.cnf的问题,我出现了这个问题就是因为/etc下面有了一个my.cnf在/usr/local/mysql 下面也有一个,但是我启动的时候发现不走/etc下面的,我就纳闷了,照理说应该是走/etc下面的才对的,然后去
ls -l /etc/my.cnf
发现是权限过高了,在/etc/下面的my.cnf需要用644的权限来运行,这样就不会去/usr/local/mysql找my.cnf了,只要执行下面的命令就行了。
chmod 644 /etc/my.cnf
MySQL安装完成之后默认是没有密码的,可以通过下面命令来设置密码
/usr/local/mysql/bin/mysqladmin -uroot password sunny #sunny为密码
4、安装PHP5.6
在安装之前我们需要先把依赖给解决了
libiconv库为需要做转换的应用提供了一个iconv()的函数,以实现一个字符编码到另一个字符编码的转换。 错误提示:configure: error: Please reinstall the iconv library.
cd /tmp wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar -zxvf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure --prefix=/usr/local/libiconv make && make install
libmcrypt是加密算法扩展库。 错误提示:configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.
cd /tmp wget http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz tar -zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8 ./configure make && make install
Mhash是基于离散数学原理的不可逆向的php加密方式扩展库,其在默认情况下不开启。 mhash的可以用于创建校验数值,消息摘要,消息认证码,以及无需原文的关键信息保存 错误提示:configure: error: “You need at least libmhash 0.8.15 to compile this program. http://mhash.sf.net/”
cd /tmp wget http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz tar -zxvf mhash-0.9.9.9.tar.gz cd mhash-0.9.9.9 ./configure make && make install
mcrypt 是 php 里面重要的加密支持扩展库,Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原。
cd /tmp wget http://downloads.sourceforge.net/mcrypt/mcrypt-2.6.8.tar.gz tar -zxvf mcrypt-2.6.8.tar.gz cd mcrypt-2.6.8 ./configure make && make install
依赖安装好了之后,我们正式开始安装php
cd /tmp wget http://cn2.php.net/distributions/php-5.6.7.tar.gz tar –zxvf php-5.6.7.tar.gz cd php-5.6.7 ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-openssl --with-zlib --enable-bcmath --with-bz2 --with-curl --enable-ftp --with-gd --enable-gd-native-ttf --with-gettext --with-mhash --enable-mbstring --with-mcrypt --enable-soap --enable-zip --with-iconv=/usr/local/libiconv --with-mysql=/usr/local/mysql --without-pear make && make install
编译参数解释:
--prefix=/usr/local/php:设置安装路径 --with-apxs2=/usr/local/apache/bin/apxs:编译共享的 Apache 2.0 模块 --with-config-file-path=/etc:指定配置文件php.ini地址 --with-config-file-scan-dir=/etc/php.d:指定额外的ini文件目录 --with-openssl:编译OpenSSL支持 --with-zlib:编译zlib支持 --enable-bcmath:启用BC风格精度数学函数 --with-bz2:BZip2支持 --with-curl:CRUL支持 --enable-ftp:FTP支持 --with-gd:GD支持 --enable-gd-native-ttf:启用TrueType字符串函数 --with-gettext:启用GNU gettext支持 --with-mhash:mhash支持 --enable-mbstring:启用支持多字节字符串 --with-mcrypt:编译mcrypt加密支持 --enable-soap:SOAP支持 --enable-zip:启用zip 读/写支持 --with-iconv=/usr/local/libiconv:iconv支持 --with-mysql=/usr/local/mysql:启用mysql支持 --without-pear:不安装PEAR
在源代码目录复制php.ini-development到etc下
cp php.ini-development /etc/php.ini vim /etc/httpd/conf/httpd.conf
添加:
Addtype application/x-httpd-php .php
让apache支持解析php,添加完成完成之后我们需要重启一下apahce
service httpd restart
新建一个php文件看看能否解析
vim /etc/httpd/htdocs/index.php
index.php代码:
<?php phpinfo();
访问出现上图的信息则说明我们的编译成功了,其他配置就得大家自行去了解如何配置了。例如配置php.ini之类的。
如果有朋友需要安装phpMyAdmin发现登陆的时候提示无法登陆服务器,那是因为MYSQL_SOCKET和服务器上MySQL的配置不一样,因为我们上面的/etc/my.cnf里有一句指定了mysql.sock的存放位置,从上图找到下图红色框画出来的地方,会发现和我们在/etc/my.cnf里面定义的不一样
socket = /tmp/mysql.sock
解决方法是创建一个软连接(创建一个链接到/var/lib/mysql/mysql.sock就行了):
ln -fs /tmp/mysql.sock /var/lib/mysql/mysql.sock
谢谢大家对本博客的支持,本站专注原创技术文章,更新博文不容易,请转载带上本文链接注明出处。
扫二维码快速加群:
如果大家有什么疑问可以加我QQ327388905进行解答,也可以加入交流群
总赞数量:18274
总踩数量:128087
文章数量:29