从零搭建LNMP环境

Posted だā简ゑ箪ャ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零搭建LNMP环境相关的知识,希望对你有一定的参考价值。

  • Linux就是环境所在的操作系统;
  • Nginx则是一个「高性能的HTTP和反向代理服务器」,官网地址:http://nginx.org/
  • MySQL则是一个方便地对数据进行增删改查的数据库管理系统,官网地址:http://www.mysql.com/
  • PHP则是用来处理具体请求的脚本语言,官网地址:http://www.php.net/

运用这4件工具,最简单直接的一个用途就是搭建一个网站,例如现在我的个人网站就是在「LNMP」上面跑的

其实在nginx开始受到关注之前,「LAMP」是搭建网站比较流行的选择,即LinuxApacheMySQLPHP

这里我们使用的不是LNMP的一键安装包,而是难度稍微高「一点」的逐个安装,这样做或许能让你对这个环境的细节有更好的理解,而且对各部分的定制程度可以达到最高。

  1. 要安装什么程序?——php,NGINX,mysql
  2. 安装的这个程序,在编译时需要哪些扩展或者哪些库?(例如PHP安装OpenSSL,NGINX安装openssl);
  3. 下载这些扩展和库,下载完压缩包后解压缩得到这些库的代码,或者进一步地编译这些库并安装到一个指定的路径下;
  4. 编译程序,将需要的库、扩展添加到编译选项中,指定程序的安装路径;
  5. 安装完成,测试。

因此下面的内容就是上面这5步的循环。那么,开始吧。

在开始前,先安装一些通常来说应该已经有的组件,不过以防没有可以检查并安装一下。对于使用CentOS的用户在root权限下输入命令:

yum -y install gcc automake autoconf libtool make gcc-c++ glibc

 安装PHP

为了开启PHP的一些功能(例如对png格式的支持等),首先需要安装一些库,CentOS命令如下:

yum -y install libmcrypt-devel mhash-devel libxslt-devel \\
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \\
zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel \\
ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \\
krb5 krb5-devel libidn libidn-devel openssl openssl-devel

#错误:

yum [Errno 256] No more mirrors to try 解决方法
  • 输入下面的命令即可解决问题:
  • yum clean all

库已经安装好了,要注意的是在编译PHP时可能会说缺少其中的几个库,到时候请各位在百度(或者谷歌)搜一下这个库的官网,使用wget下载然后解压然后安装到你指定的一个目录,最后在编译PHP时指定这个库安装后的路径即可。为了方便演示,接下来碰到这个问题时,我默认使用以下的几个路径:

所有下载的压缩包放在「/home/download/」这个文件夹下;

所有的压缩包解压后的路径也是「/home/download/」,即如果压缩包名字是「openssl-1.0.1e.tar.gz」,那么解压后「/home/download/」下会有一个名字为「openssl-1.0.1e」的文件夹;

所有的库安装路径都是「/home/reetsee/environment/lib/」,指定安装路径的方法下面会有。

要注意的是:如果你也使用「/home/xxx/…」 这样的格式,最好保证这个「xxx」不是用户名,或者说「/home/xxx」不是用户目录。比较好的做法是你在/home下创建一个目录并使用这个目 录,例如在/home下使用mkdir xxx。具体原因会在Nginx的安装部分会提到403 Forbidden的时候讲解。

现在可以开始尝试安装PHP了,首先我下载了PHP 5.4.29,不下载最新版的原因是我担心它和某些库会有兼容性问题(但我没有查证过这种问题是否存在)。在命令行下我先把当前目录切换到「/home/download/」,然后输入下面的命令进行下载:

 

wget http://cn2.php.net/get/php-5.4.29.tar.gz/from/this/mirror

 

下载后执行解压操作,并切换到PHP的代码目录:

tar zxvf mirror
cd php-5.4.29

执行以下命令对PHP的安装进行设置:

./configure --prefix=/home/reetsee/environment/php  --enable-fpm --with-mcrypt \\
--enable-mbstring --disable-pdo --with-curl --disable-debug  --disable-rpath \\
--enable-inline-optimization --with-bz2  --with-zlib --enable-sockets \\
--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \\
--with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli \\
--with-gd --with-jpeg-dir --with-openssl

对上面的命令作一下简单的说明:

    从总体来看就是设置安装的PHP需要或不需要哪些功能,安装目录是什么, 需要哪些库

    –prefix=/home/reetsee/environment/php :把PHP安装在「/home/reetsee/environment/php」目录下

    –enable-fpm :为了让Nginx和PHP能够互相「交谈」,需要一个叫做FastCGI的工具,因此PHP需要使用PHP-FPM来管理FastCGI。

    –with-openssl :安装OpenSSL库

    其它的「–with-xxx」即需要xxx库,「–enable-yyy」即开启yyy的支持,「–disable-zzz」即禁用zzz。

在这一步,Ubuntu或者CentOS的用户十有八九会出现类似 「configure: error: mcrypt.h not found. Please reinstall libmcrypt.」的问题,这是因为缺少了mcrypt这个库(对于Ubuntu用户缺少的可能是其它库),那么接下来就把它下载并安装。

下载并安装缺失的库——以mcrypt为例:

在搜索引擎得知mcrypt的官网,进入源码下载的页面,复制「libmcrypt-2.5.7.tar.gz」的下载地址,切换到目录「/home/reetsee/download/」执行下载并安装的操作:

wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
tar zxvf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure --prefix=/home/reetsee/environment/lib/mcrypt
make && make install

这样就把mcrypt安装到「/home/reetsee/environment/lib/mcrypt」下了

在PHP的源码目录进行「./configure …」时,将原本的「–with-mcrypt」更改为「–with-mcrypt=/home/reetsee/environment/lib/mcrypt」,粗体部分就是你安装mcrypt的目录

———— mcrypt安装结束 ————

回到PHP源码的目录重新configure,这次输入的命令要将mcrypt的安装路径添加进去,具体命令变为:

 

./configure --prefix=/home/reetsee/environment/php  --enable-fpm --with-mcrypt=/home/reetsee/environment/lib/mcrypt \\
--enable-mbstring --disable-pdo --with-curl --disable-debug  --disable-rpath \\
--enable-inline-optimization --with-bz2  --with-zlib --enable-sockets \\
--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \\
--with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli \\
--with-gd --with-jpeg-dir --with-openssl

 

最后配置成功会出现「Thank you for using PHP.」

 

+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.

config.status: creating php5.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/fpm/php-fpm.conf
config.status: creating sapi/fpm/init.d.php-fpm
config.status: creating sapi/fpm/php-fpm.service
config.status: creating sapi/fpm/php-fpm.8
config.status: creating sapi/fpm/status.html
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands
View Code

 

如果你是用Ubuntu,会遇到很多编译依赖问题,例如上面的mcrypt的缺失,可以参考这篇博客:http://www.cnblogs.com/alexqdh/archive/2012/11/20/2776017.html

配置完就输入以下命令进行安装:

make && make install

安装需要一段时间,可以喝杯茶~

安装完后还有一点收尾工作,首先是配置php-fpm,首先是切换到php的安装目录下的etc文件夹:

cd /home/reetsee/environment/php/etc/

然后执行下面的命令:

cp php-fpm.conf.default php-fpm.conf

再对php-fpm.conf的内容进行修改,将「user = nobody」,「group = nobody」分别改为「user = www-data」,「group = www-data」,即如下图所示:

保存后需要保证名为「www-data」的用户以及组存在,因此在命令行执行下列语句:

 

groupadd www-data
useradd -g www-data www-data

 

这样PHP的安装配置工作就大体完成了 <p>以上是关于从零搭建LNMP环境的主要内容,如果未能解决你的问题,请参考以下文章</p> 
<p > <a style=max php环境搭建

LNMP环境的搭建

lnmp环境搭建之编译安装php-5.3.27.tar.gz

搭建 LNMP 环境

PHP之开发环境搭建

搭建LNMP+CI环境