Centos编译安装LAMP环境

时间: 2015-04-11 23:57 栏目: Linux 浏览: 10624 赞: 17 踩: 0 字体:

以下为本篇文章全部内容:

本博客这几天从迁移到阿里云,备案已经迁移过来了,就想把博客给转移过来,今天有空就把环境给编译了一下,顺便给大家写一篇自己编译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

   安装依赖扩展.png

     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添加到系统服务并创建链接和设置开机自动启动

编译apache完成设置.png

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

如果出现下图错误mysql错误2.png

则需要编辑 /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();

php5.6安装完成.png

访问出现上图的信息则说明我们的编译成功了,其他配置就得大家自行去了解如何配置了。例如配置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

mysql配置phpmyadmin.png

谢谢大家对本博客的支持,本站专注原创技术文章,更新博文不容易,请转载带上本文链接注明出处。

扫二维码快速加群:

qun.png

如果大家有什么疑问可以加我QQ327388905进行解答,也可以加入交流群ThinkPHP交流群