从1搭建LNMP环境
「LNMP」即Linux,Nginx,MySQL,PHP。我个人的理解是:
Linux就是环境所在的操作系统;
Nginx则是一个「高性能的HTTP和反向代理服务器」,官网地址:http://nginx.org/;
MySQL则是一个方便地对数据进行增删改查的数据库管理系统,官网地址:http://www.mysql.com/;
PHP则是用来处理具体请求的脚本语言,官网地址:http://www.php.net/。
运用这4件工具,最简单直接的一个用途就是搭建一个网站,例如现在我的个人网站就是在「LNMP」上面跑的,然后博客(我使用WordPress)、新闻等其它内容也可以放到网站中。
其实在Nginx开始受到关注之前,「LAMP」是搭建网站比较流行的选择,即Linux,Apache,MySQL,PHP。
本文的目的就是介绍一下如何从零开始搭建一个LNMP环境,然后初步让一个网页能够通过浏览器走HTTP请求访问。
这里我们使用的不是LNMP的一键安装包,而是难度稍微高「一点」的逐个安装,这样做或许能让你对这个环境的细节有更好的理解,而且对各部分的定制程度可以达到最高。
1 开始前的一些Tips
下面给出的操作步骤对于Linux来说是通用的,缺什么就安装什么,只是不同的Linux所输入的内容可能有些不同而已。
我是直接在阿里云ECS上面操作的,Linux的版本是CentOS 6.3 64位,各位可以直接在阿里云的首页点击右上角的「免费试用」,选择CentOS 6.3 64位系统,然后通过SSH直接登陆到主机进行操作,这样是最方便的。
另外一个选择是自己安装一个Linux然后在上面进行操作,这种方法也可以。现在我也下载了一个CentOS 6.5 64位把下面的步骤走一遍。在自己的系统上操作有个麻烦的地方:
如果你把系统搞坏了那么恢复起来可能要费点事,直接重装也需要一些时间,哪怕是在虚拟机上面操作,但是ECS上面直接点击重置就可以了;
在下载一些系统的依赖包时(例如使用wget命令下载MySQL)如果你的网速比较慢那么下载会比较久,但是阿里云ECS下载这些资源的速度嗖嗖地,非常快就下载完了。
有不少人会使用Ubuntu,我之前也使用过Ubuntu搭建LNMP,最终搭建成功了,只是安装依赖时有一些些麻烦,下面会讲到。
在文中我会在必要地方添加图片,但是会以文字为主,因为实在没有太多图片好添加。其实下面的所有内容都是按照这个这几个流程写的:
要安装什么程序?——PHP,NGINX,MYSQL;
安装的这个程序,在编译时需要哪些扩展或者哪些库?(例如PHP安装OpenSSL,NGINX安装openssl);
下载这些扩展和库,下载完压缩包后解压缩得到这些库的代码,或者进一步地编译这些库并安装到一个指定的路径下;
编译程序,将需要的库、扩展添加到编译选项中,指定程序的安装路径;
安装完成,测试。
因此下面的内容就是上面这5步的循环。那么,开始吧。
2 安装Linux
首先最基本的自然是你需要安装了Linux的操作系统,如果你只是尝试一下,可以安装在虚拟机里面,或者如果你已经在使用阿里云ECS那么系统就已经安装好了。
为了重新走一次所有的步骤, 我下载并在虚拟机安装了CentOS 6.5 64位的系统。当然你也可以使用其它的Linux发行版例如Ubuntu等,在接下来要输入命令的地方不同的Linux按需进行修改即可。
在开始前,先安装一些通常来说应该已经有的组件,不过以防没有可以检查并安装一下。对于使用CentOS的用户在root权限下输入命令:
1 | yum -y install gcc automake autoconf libtool make gcc-c++ glibc |
对于使用Ubuntu的用户,如果没记错则是将「yum -y install」替换为「sudo apt-get install」就可以了,原则就是把上面列出来的「gcc automake autoconf libtool make gcc-c++ glibc」这几个东西安装一下。
3 安装PHP
为了开启PHP的一些功能(例如对png格式的支持等),首先需要安装一些库,CentOS命令如下:
1 | yum -y install libmcrypt-devel mhash-devel libxslt-devel \ |
2 | libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \ |
3 | zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2 -devel \ |
4 | ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \ |
5 | krb5 krb5-devel libidn libidn-devel openssl openssl-devel |
Ubuntu 12.04(其它版本我没有测试过)用户在这里可以先不行动,因为我试过即便在这里使用「sudo apt-get install …」,后面在编译PHP的时候还是会提示找不到对应的库,原因可能是编译时的默认查找路径不正确。解决办法从理论上来说有2个:
找到PHP编译时查找库的路径,然后修改为「sudo apt-get install …」安装后的路径;
手动下载其中缺少的库,然后你自己安装到自己知道的一个目录,在编译PHP时手动指定这个库的路径(我当时用的就是这种方法,累死不偿命啊,建议能折腾的研究一下第一个方法,然后把解决方案共享出来)。
库已经安装好了,要注意的是在编译PHP时可能会说缺少其中的几个库,到时候请各位在百度(或者谷歌)搜一下这个库的官网,使用wget下载然后解压然后安装到你指定的一个目录,最后在编译PHP时指定这个库安装后的路径即可。为了方便演示,接下来碰到这个问题时,我默认使用以下的几个路径:
所有下载的压缩包放在「/home/reetsee/download/」这个文件夹下;
所有的压缩包解压后的路径也是「/home/reetsee/download/」,即如果压缩包名字是「openssl-1.0.1e.tar.gz」,那么解压后「/home/reetsee/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/reetsee/download/」,然后输入下面的命令进行下载:
1 | wget http: //cn2 .php.net /get/php-5 .4.29. tar .gz /from/this/mirror |
下载的场面大概是这样的:
下载后执行解压操作,并切换到PHP的代码目录:
1 | tar zxvf php-5.4.29. tar .gz |
2 | cd php-5.4.29 |
执行以下命令对PHP的安装进行设置:
1 | . /configure --prefix= /home/reetsee/environment/php -- enable -fpm --with-mcrypt \ |
2 | -- enable -mbstring --disable-pdo --with-curl --disable-debug --disable-rpath \ |
3 | -- enable -inline-optimization --with-bz2 --with-zlib -- enable -sockets \ |
4 | -- enable -sysvsem -- enable -sysvshm -- enable -pcntl -- enable -mbregex \ |
5 | --with-mhash -- enable -zip --with-pcre-regex --with-mysql --with-mysqli \ |
6 | --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/」执行下载并安装的操作:
1 | wget ftp : //mcrypt .hellug.gr /pub/crypto/mcrypt/libmcrypt/libmcrypt-2 .5.7. tar .gz |
2 | tar zxvf libmcrypt-2.5.7. tar .gz |
3 | cd libmcrypt-2.5.7 |
4 | . /configure --prefix= /home/reetsee/environment/lib/mcrypt |
5 | 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的安装路径添加进去,具体命令变为:
1 | . /configure --prefix= /home/reetsee/environment/php -- enable -fpm --with-mcrypt= /home/reetsee/environment/lib/mcrypt \ |
2 | -- enable -mbstring --disable-pdo --with-curl --disable-debug --disable-rpath \ |
3 | -- enable -inline-optimization --with-bz2 --with-zlib -- enable -sockets \ |
4 | -- enable -sysvsem -- enable -sysvshm -- enable -pcntl -- enable -mbregex \ |
5 | --with-mhash -- enable -zip --with-pcre-regex --with-mysql --with-mysqli \ |
6 | --with-gd --with-jpeg- dir --with-openssl |
最后配置成功会出现「Thank you for using PHP.」,如下图: