lnmp编译安装教程

我们为什么采用LNMP这种架构?
采用Linux、PHP、MySQL的优点我们不必多说。

Nginx是一个小巧而高效的Linux下的Web服务器软件,是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,已经在一些俄罗斯的大型网站上运行多年,目前很多国内外的门户网站、行业网站也都在是使用Nginx,相当的稳定。

Nginx相当的稳定、功能丰富、安装配置简单、低系统资源……
lnmp_logo.jpg
Linux采用的是centos,软件包统一放在/usr/local/src目录下.由于 centos源比较老,而且更新起来也比较慢,此处建议你换成163源。提示:如果你真打算采用这种编译安装php的话,请至少安排半天时间来完成。如果是在虚拟机里测试的话,建议调大内存以让时间更短,我本机给了虚拟机2G内存。在安装完成后可以再设置小点内存跑.安装的时候请按顺序安装。

更改yum源

更换到163源 cd /etc/yum.repos.d/

wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS6-Base-163.repo CentOS-Base.repo

先更新一下

yum clean all
yum makecache
yum update(这步比较慢,建议先不要运行)
准备lnmp安装环境

先采用yum包安装一些依赖的东西

yum -y install gcc gcc-c++ autoconf 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 openldap openldap-devel nss_ldap openldap-clients openldap-servers make cmake libtool* git tree

下载一些软件都放在/usr/local/src下
使用wget命令下载即可
附上软件包地址(软件包都是我一个一个在网上找的,可能软件包下载地址会失效,你可以给我发邮件或者你百度搜一个)
所需要的软件包:

mhash-0.9.9.9
http://jaist.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz

mcrypt-2.6.8
http://jaist.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz

ncurses
http://down1.chinaunix.net/distfiles/ncurses-5.9.tar.gz

pcre-8.31.tar.bz2
http://exim.mirror.fr/pcre/pcre-8.31.tar.bz2

zlib-1.2.8.tar.gz
http://iweb.dl.sourceforge.net/project/libpng/zlib/1.2.8/zlib-1.2.8.tar.gz

freetype-2.3.5.tar.bz2
http://down1.chinaunix.net/distfiles/freetype-2.3.5.tar.bz2

openssl-1.0.1c.tar.gz
http://down1.chinaunix.net/distfiles/openssl-1.0.1c.tar.gz

php-5.5.29.tar.bz2
http://cn2.php.net/distributions/php-5.5.29.tar.bz2
安装libiconv

cd /usr/local/src
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 
make && make install

在我make && make install的时候出现错误了error: ‘gets’ undeclared here (not in a function)。如果你不要遇到遇到,如果遇到请做如下修改:(国外的这文章记录了http://www.itkb.ro/kb/linux/patch-libiconv-pentru-glibc-216

cd libiconv-1.14/srclib

编辑stdio.in.h文件,搜索这句话

_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");

把这句删除换成如下几句

#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
#endif

然后

cd ..
make && make install

下载并安装libmcrypt

cd /usr/local/src
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
make 
make install 
cd libltdl/ 
./configure --enable-ltdl-install 
make 
make install

安装mbash

cd /usr/local/src
tar -jxvf mhash-0.9.9.9.tar.bz2
cd mhash-0.9.9.9
./configure
make 
make install 

下载并安装mcript

 cd /usr/local/src
tar zxvf mcrypt-2.6.8.tar.gz 
cd mcrypt-2.6.8/ 

注意一下这步运行下,不然下面可能报错

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
./configure 
make 
make install

ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la 
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so 
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4 
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8 
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a 
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la 
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so 
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2 
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1 
ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config

安装mysql(mysql5.6.13)

先检查一下mysql是否已经存在了,如果存在就删除mysql

rpm -qa | grep mysql

我的显示如下(如果没有任何显示就表示没有mysql呢)

mysql-libs-5.1.73-3.el6_5.i686

如果存在就卸载mysql

rpm -e mysql-libs-5.1.73-3.el6_5.i686 --nodeps

此时再运行

rpm -qa | grep mysql

发现没有任何显示

添加一个mysql用户(nologin用户并且没有家目录)

useradd -M -s /sbin/nologin mysql

初次编译mysql的时候时间比较长,请耐心等待吧

cd /usr/local/src
tar -zxf mysql-5.6.13.tar.gz
cd mysql-5.6.13

注意下面是cmake .注意点

cmake .
make && make install

复制mysql配置文件

cp support-files/my-default.cnf /etc/my.cnf

创建系统数据库表

cd /usr/local/mysql
scripts/mysql_install_db --user=mysql

更改权限

cd /usr/local/mysql
chown -R root:mysql .
chown -R mysql:mysql data

把mysql添加到系统服务中去

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

启动mysql启动的时候,一直不动的话按下enter.,就行了

/usr/local/mysql/bin/mysqld_safe --user=mysql &

查看mysql是否启动

netstat -tunpl | grep 3306

或者pstree,看到有mysqld进程也行

修改mysql密码

/usr/local/mysql/bin/mysqladmin -u root password "xxxxx"

进入mysql中删除空密码和匿名用户

/usr/local/mysql/bin/mysql -u root -p
select host,user,password from mysql.user;
delete from mysql.user where password="" or user="";
flush privileges;

也可以在mysql修改用户密码(只是说明一下)

set password form 'root'@'localhost' = password('123456');

关闭mysql的时候可以使用

/usr/local/mysql/bin/mysqladmin -u root -p shutdown

把mysql添加到开机启动

vim /etc/rc.local

在最后再加一行

/usr/local/mysql/bin/mysqld_safe --user=mysql &

最后做一个软链接方便使用mysql

ln -s /usr/local/mysql/bin/mysql /usr/bin/

nginx安装

nginx安装前编译安装pcre zlib openssl[openssl安装用./config]

pcre安装

cd /usr/local/src
tar -jxf pcre-8.31.tar.bz2
cd pcre-8.31
./configure
make && make install

zlib安装

cd /usr/local/src
tar -zxf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make && make install

openssl安装

cd /usr/local/src
tar -zxf openssl-1.0.1c.tar.gz
cd openssl-1.0.1c
./config
make && make install

安装Nginx

cd /usr/local/src
useradd -M -s /sbin/nologin nginx

解压Nginx

tar -zxf nginx-2.0.1.tar.gz
cd tengine-2.0.1

注意的是with-pcre这些都指向/usr/local/src这种目录

./configure --with-pcre=/usr/local/src/pcre-8.31 --with-http_ssl_module --with-zlib=/usr/local/src/zlib-1.2.8 --with-openssl=/usr/local/src/openssl-1.0.1c

make && make install

做软链接方便nginx启动

ln -s /usr/local/nginx/sbin/nginx /usr/bin/

修改nginx配置文件

vim /usr/local/nginx/conf/nginx.conf
把#user nobody 改成 user nginx;

测试一下nginx配置文件

nginx -t

启动nginx

nginx

说一下nginx启动的一些事情

一般来说在nginx的配置文件修改后进行如下操作,nginx -t检测一下配置文件是否正确,如果正确的话

再使用nginx -s reload 使nginx平滑启动

把nginx添加到开机启动

vim /etc/rc.local

在最后新加一行

/usr/local/nginx/sbin/nginx

查看nginx是否启动

netstat -tunpl | grep 80
pstree 看下有没有nginx就行了

安装php

cd /usr/local/src
useradd -M -s /sbin/nologin php
tar -jxf php-5.5.12.tar.bz2
cd php-5.5.12
./configure --enable-opcache --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring=all --with-pdo-mysql --enable-sockets --enable-mbstring --enable-fpm --with-curl --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --enable-xml --with-gd --with-mcrypt --with-libxml-dir=/usr --enable-xml --with-openssl --with-iconv=/usr/local/iconv
make ZEND_EXTRA_LIBS='-liconv'
make install
cp php.ini-development /usr/local/php/etc/php.ini

配置php-fpm

cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf


`user = nobody
group = nobody`
改为
`user = php
group = php`

启动php-fpm

/usr/local/php/sbin/php-fpm

把php-fpm添加到开机启动

vim /etc/rc.local

最后一行加上

/usr/local/php/sbin/php-fpm

修改nginx配置文件使之支持php

vim /usr/local/nginx/conf/nginx.conf
#location ~ \.php$ {
#    root           html;
#    fastcgi_pass   127.0.0.1:9000;
#    fastcgi_index  index.php;
#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#    include        fastcgi_params;
#}

修改为

location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

也顺便把gzip给开启下吧

gzip on前面的#去掉

修改完配置之后
nginx -s reload

ok,现在来测试一下环境

cd /usr/local/nginx 
cd html
vim test.php

写上

<?php 
phpinfo();

然后访问一下localhost/test.php,正常的话,就一切正常了

如果出问题的话,请看nginx有没有启动,php-fpm有没有启动

注明几个问题如果修改php配置文件的时候,需要重启php-fpm就可以了

先关闭php-fpm

pkill php-fpm

然后运行

/usr/local/php/sbin/php-fpm

就可以了可以看到php-fpm就启动了pstree可以看到这个进程

pstree

为了更方便的使用php和php-fpm,我做了两个链链接

ln -s /usr/local/php/sbin/php-fpm /usr/bin/
ln -s /usr/local/php/bin/php /usr/bin/

nmp安装就彻底完成了,有什么问题可以联系我QQ1017109588 [这里没没讲到如何优化一些配置的问题,以后可以会写文章分析]

在些也特别说明一下nginx如何支持path_info这种形式。配置文件中可以这样写。当然可能对你不需要

location ~ ^(.+\.php)(.*)$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
 
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param        PATH_INFO                $fastcgi_path_info;
        fastcgi_param        PATH_TRANSLATED        $document_root$fastcgi_path_info;
        include        fastcgi_params;
    }

LNMP环境搭建完成 你还可以装一些扩展 例如memcache redisd等

总结

  1. 总结:编译安装的过程中 操作系统环境不同 软件包依赖 可能会出现一些报错

  2. 遇到报错不要慌张 可以去Google一下 大部分的问题都可以解决

  3. 还可以在文章下面评论 贴上你的报错信息 博主可以帮你看看哦

原文地址https://wujunze.com/lnmp_compile_install.jsp转载请保留原文链接

参考

Nginx官方文档
MySQL官方文档
PHP官方文档
等技术文档


代码与远方
生活不止眼前的苟且,还有代码和远方。

一个程序猿,喜欢学习技术,喜欢交流技术

3.4k 声望
1.2k 粉丝
0 条评论
推荐阅读
Hackintosh (黑苹果) 折腾
EFI 引导文件可以去 git clone https://github.com/wujunze/ASRock-Z370-Pro4-9900K-Hackintosh

CodeCloud1阅读 2.1k

Nginx 一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...
早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增...

民工哥23阅读 1k

封面图
如何选择适合你的微服务 API 网关:对比 Kong、APISIX、Tyk、Apigee 和其他网关
API 网关并非一个新兴的概念,在十几年前就已经存在了,它的作用主要是作为流量的入口,统一的处理和业务相关的请求,让请求更加安全、快速和准确的得到处理。它有以下传统的功能:

API7_技术团队8阅读 8.6k评论 2

PHP转Go实践:xjson解析神器「开源工具集」
我和劲仔都是PHP转Go,身边越来越多做PHP的朋友也逐渐在用Go进行重构,重构过程中,会发现php的json解析操作(系列化与反序列化)是真的香,弱类型语言的各种隐式类型转换,很大程度的减低了程序的复杂度。

王中阳Go11阅读 2.7k评论 4

封面图
Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...

王中阳Go6阅读 2.9k评论 4

封面图
图片防盗链破解 解决图片防盗链问题 反向代理
当客户端(浏览器)向服务器请求内容的时候,会提交一个header,这个header中包含了如:浏览器信息、cookie等内容,那么有一个叫referer的东东,也包含在这里面。

TANKING7阅读 11.7k评论 5

Hyperf 3.0 发布,PHP 新时代
在过去的一年半时间里,Hyperf 2.2 共发布了 35 个小版本,使 Hyperf 达到了一个前所未有的高度,这里也获得了一些不错的数据反馈。

huangzhhui4阅读 1.5k评论 1

封面图

一个程序猿,喜欢学习技术,喜欢交流技术

3.4k 声望
1.2k 粉丝
宣传栏