首页 > 系统 > Linux >

linux系统下LNMP环境搭建教程

2017-06-08

linux系统下LNMP环境搭建教程。1, configure 通过指定参数,来确认你想要安装的软件安装在哪里,加上哪些功能和去掉哪些功能(如果这一步报错,基本都是缺少依赖包。

linux系统下LNMP环境搭建教程。

编译软件的过程与经验:

1,./configure 通过指定参数,来确认你想要安装的软件安装在哪里,加上哪些功能和去掉哪些功能(如果这一步报错,基本都是缺少依赖包;

解决方法:使用yum去安装,一般来说,rhel做为一个成熟的linux操作系统,常见的底层依赖包都自带了,所以去安装下面这两个组,一般都会有你所需要的依赖包。

# yum groupinstall "Development tools" -y

# yum groupinstall "Desktop Platform Development" -y

如果缺少依赖包在rhel的yum源里找不到,则上网下载第三方的软件,先编译第三方软件,再编译本软件

2,make 相当于是把你上一步定义好的,把这个软件给做出来(这一步一般很少出错,如果出错,问题都比较麻烦。可能是一些兼容性的问题等等,你可以尝试上网查询解决方法,如果查不到,只能换个环境或者换个软件版本或者换些编译参数重新编译)

3, make install 把做好的软件,安装到你第一步所指定的安装目录里(这一步几

乎不会出错的)

--------------------------------

讨论1:

关于./configure参数选择的基本方法:

./configure --help 查看所有的编译参数

第一个重要参数

--prefix= 此参数指定安装目录(一般安装到/usr/local/或者/usr/local/软件名下)

第二类重要参数:

--enable-xxx 打开一个功能(默认是关闭的)

--disable-xxx 关闭一个功能(默认是打开的)

如果你是新手,你就不加任何功能参数,全部使用默认值。但又如果你怕少了功能造成以后需要重编,你可以加上所有的enable参数(但加得越多,错误概率也越大,因为调用的依赖会多,有可能会因为少包而报错)

第三类参数:

--with-xxx=DIR 指定一个目录,调用此目录的功能

讨论2:

假设一个软件abc,安装到/usr/local和安装到/usr/local/abc之间的区别?

安装到/usr/local下:

优点:此软件的命令一般会安装到/usr/local/bin或/usr/local/sbin等;这些路径都默认在$PATH里,所以安装的命令可以直接用,而不用使用绝对路径。

库文件一般都会安装到/usr/local/lib下,所以把它加入ldconfig,以后所有安装在此目录的库文件都可以被找到。

缺点:不方便删除,因为很多软件都安装到/usr/local下

安装到/usr/local/abc下:

优缺点与上面正好相反

最终建议:小软件一般默认安装/usr/local/;大软件安装/usr/local/软件名/下

讨论3:

关于ldconfig,一个软件的库文件是有可能被其它软件所调用,那么其它软件能否找到你的库文件呢?

一般来说,库文件安装到/lib,/lib64,/usr/lib/,/usr/lib64等,都可以被找得到.那么如果一个软件abc把库文件安装到/usr/local/abc/lib,别人想要找到,你就要把这个路径加入到ldconfig可以找到的路径列表里面去。

做法为:

# vim /etc/ld.so.conf --在这个主配置文件里加上一行,写上让别人要查找库文件的路径

include ld.so.conf.d/*.conf --或者在这里的任意.conf结尾的子配置文件里加上一行也可以

/usr/local/abc/lib

# ldconfig --上面加入路径后,就使用此命令让其生效

=====================================================================

lamp->lnmp

nginx

survey.netcraft.net

查看各大网站使用的web服务器,使用下面的命令

curl -I www.sina.com

结论:现在大型网站几乎统一都使用nginx或nginx做二次开发的版本(如tengine,OpenResty等)

nginx相对于apache的优势?

资源占用少

支持大并发

===============================================

搭建lnmp的方法

1,直接rpm版,安装方法大概为 yum install nginx* mysql* php*

2,lnmp.org一键安装包

3,比如买阿里云主机,可以在镜像市场选择一个合适的lnmp环境

4,自定义lnmp

=============================================

linux+nginx+mysql+php(fastcgi)

lnmp搭建过程

(nginx,mysql,php这三个软件用新的编译方法编译顺序无所谓)

编译lnmp所有的软件包在

笔记目录/program/lnmp_soft/

Discuz_X3.2_SC_UTF8.zip mysql-5.6.26.tar.gz

ImageMagick-6.7.8-9.tar.gz nginx-1.6.2.tar.gz

imagick-3.1.2.tgz nginx-1.8.0.tar.gz

libevent-1.4.11-stable.tar.gz ngx_cache_purge-2.3.tar.gz

libiconv-1.13.tar.gz pcre-7.9.tar.gz

libmcrypt-2.5.8.tar.bz2 php-5.6.12.tar.bz2

mcrypt-2.6.6.tar.gz phpMyAdmin-4.4.11-all-languages.zip

memcache-2.2.7.tgz phpredis-2.2.7.tar.gz

memcached-1.4.22.tar.gz redis-3.0.7.tar.gz

mhash-0.9.9.9.tar.bz2 webbench-1.5.tar.gz

编译安装前准备,先确认编译所需要的依赖软件包已经安装

# yum groupinstall "Desktop Platform Development" -y

# yum groupinstall "Development tools" -y

# yum install curl-devel ncurses-devel net-snmp-* *icu* libxml2-devel pcre-devel -y

第一大步:

编译mysql

mysql-5.6.26.tar.gz

# rm /mysqldata56 -rf

# rm /usr/local/mysql -rf

# rm /usr/src/mysql-*/ -rf

--删除以前编译过的,重新编译

# yum install cmake

# tar xvf mysql-5.6.26.tar.gz -C /usr/src/

# cd /usr/src/mysql-5.6.26/

# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=gbk,gb2312 -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1

# make ;make install

安装后

1,手动编写my.cnf配置文件

# mkdir /usr/local/mysql/etc

# vim /usr/local/mysql/etc/my.cnf --新建此文件,并写上下面一段

[mysqld]

port=3307

datadir=/mysqldata56

pid-file=/mysqldata56/mysql56.pid

socket=/mysqldata56/mysql56.socket

log-error=/mysqldata56/mysql56-err.log

user=mysql

[client]

socket=/mysqldata56/mysql56.socket

2:创建相关目录,并修改权限

# useradd -u 27 mysql

# mkdir /mysqldata56

# chown mysql.mysql /mysqldata56 /usr/local/mysql/ -R

3:初始化数据库

# /usr/local/mysql/scripts/mysql_install_db --defaults-file=/usr/local/mysql/etc/my.cnf --basedir=/usr/local/mysql/

4:启动服务

# /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/etc/my.cnf &

5:登录

# /usr/local/mysql/bin/mysql

第二大步:编译安装php

编译之前,确认把以前编译过的给删除

# rm -rf /usr/src/lnmp

# rm -rf /usr/local/php

1,在安装php之前,先安装php扩展包,这些包是rpm里没有自带,所以这里还是编译一下

libiconv-1.13.tar.gz --语言编码转换

# mkdir /usr/src/lnmp/ --我这里自己专门建立一个目录存放lnmp项目的所有源码

# tar xvf libiconv-1.13.tar.gz -C /usr/src/lnmp/

# cd /usr/src/lnmp/libiconv-1.13/

# ./configure ;make ;make install

# echo /usr/local/lib > /etc/ld.so.conf.d/lnmp.conf

# /sbin/ldconfig

# tar xf php-5.6.12.tar.bz2 -C /usr/src/lnmp/

# cd /usr/src/lnmp/php-5.6.12/

# ./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --enable-mysqlnd --with-pcre-dir --enable-opcache

# make ZEND_EXTRA_LIBS='-liconv'

# make install

-上面的编译参数要注意的几点;

一,php安装路径这一次不是默认的/usr/local,我换成了/usr/local/php,你不换也是可以的,我这里只是不想去覆盖以前的lamp编译到/usr/local下的php

二,with-pcre-dir是指定pcre库的路径,因为我前面使用的是编译版本的pcre,路径装到/usr/local/下

三,with-pdo-mysql是指定php与mysql的连接,以前pdo-mysql是得去php官网单独下载安装的,较新的php版本都自带了,用这个参数指定mysql的路径就可以了

四,with-config-file-path这是指定php.ini配置文件的路径,没有使用默认的路径,这一步也是可选的,无论你指定到哪,后面的过程要使用php.ini,路径与你现在编译的对应好就行

五:--enable-fpm参数是支持php的fastcgi模式

六:关于--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd

三个参数的说明

传统的安装php的方式中,我们在编译PHP时,一般需要指定以下几项:

--with-mysql=/usr/local/mysql

--with-mysqli=/usr/local/mysql/bin/mysql_config

--with-pdo-mysql=/usr/local/mysql

这实际上就是使用了mysql官方自带的libmysql驱动, 这是比较老的驱动, PHP 5.3开始已经不建议使用它了, 而建议使用mysqlnd

因为mysqlnd内置于PHP源代码,故你在编译安装php时就不需要预先安装mysql server也可以提供mysql client API (mysql_connect, pdo , mysqli),这样就可以实现不用安装mysql,也可以编译php(上次讲lamp时讲的先装mysql,再编php,最后不用mysql,而用远程的另一个mysql的做法为老的做法)

把上面的三个参数换为--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 就可以了

2,php成功安装后,继续安装php第三方模块

安装缓存模块memcache

# tar xvf memcache-2.2.7.tgz -C /usr/src/lnmp/

# cd /usr/src/lnmp/memcache-2.2.7/

# /usr/local/php/bin/phpize --用phpize生成编译的configure文件。注意使用的路径要为编译的/usr/local/php的路径;

phpize prepare a PHP extension for compiling

如果你不用phpize,你的这个目录里根本就没有configure这个文件

# ./configure --with-php-config=/usr/local/php/bin/php-config

# make ;make install

注意安装信息

Libraries have been installed in:

/usr/src/lnmp/memcache-2.2.7/modules

Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

# echo /usr/src/lnmp/memcache-2.2.7/modules/ >> /etc/ld.so.conf.d/lnmp.conf

# /sbin/ldconfig

安装绘图引擎模块imagemagick,与GD类似

# tar xf ImageMagick-6.7.8-9.tar.gz -C /usr/src/lnmp/

# cd /usr/src/lnmp/ImageMagick-6.7.8-9/

# ./configure

# make;make install

# /sbin/ldconfig

安装imagick(连接php与imagemagick的通道)

# tar xf imagick-3.1.2.tgz -C /usr/src/lnmp/

# cd /usr/src/lnmp/imagick-3.1.2/

# /usr/local/php/bin/phpize

# ./configure --with-php-config=/usr/local/php/bin/php-config

# make;make install

注意安装的库路径的模块路径信息

Libraries have been installed in:

/usr/src/lnmp/imagick-3.1.2/modules

Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

# echo /usr/src/lnmp/imagick-3.1.2/modules >> /etc/ld.so.conf.d/lnmp.conf

# /sbin/ldconfig

到此,与nginx之前要编译的所有软件及扩展模块完成

验证此目录里有三个安装模块,表示安装OK

# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

imagick.so memcache.so opcache.so opcache.a

--------------------------------------------

3,拷贝并配置php配置文件,加上前面所编译的模块支持

# cp /usr/src/lnmp/php-5.6.12/php.ini-production /usr/local/php/etc/php.ini

--拷配置文件,拷的路径是根据编译时的--sysconfigdir参数决定的(因为,我指定安装路径为/usr/local/php,所以就要拷到/usr/local/php/etc/)

配置php.ini文件加上前面安装的扩展的模块支持

# vim /usr/local/php/etc/php.ini

--直接在最后加上下面一段

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/"

extension = "memcache.so"

extension = "imagick.so"

[opcache]

zend_extension = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/opcache.so"

opcache.enable=1

opcache.enable_cli=1

opcache.memory_consumption=128

opcache.optimization_level=1

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=4000

opcache.revalidate_freq=60

opcache.fast_shutdown=1

opcache.save_comments=0

关于上面的几个参数的说明

opcache.memory_consumption=128 --共享内存大小, 这个根据你们的需求可调

opcache.interned_strings_buffer=8 --interned string的内存大小, 也可调

opcache.max_accelerated_files=4000 --最大缓存的文件数目

opcache.revalidate_freq=60 --60s检查一次文件更新

opcache.fast_shutdown=1 --打开快速关闭, 打开这个在PHP Request Shutdown的时候回收内存的速度会提高

opcache.save_comments=0 --不保存文件或函数的注释

------------------------------------------------------

第三大步:编译安装nginx

--今天使用的是稳定版1.8.0版本的nginx来做

# useradd -r -d /dev/null -s /sbin/nologin nginx --我这里建立一个用户来跑nginx,不做也可以,它默认是用daemon用户来跑

# id nginx --nginx的uid,gid无所谓是多少

uid=493(nginx) gid=487(nginx) groups=487(nginx)

# tar xf nginx-1.8.0.tar.gz -C /usr/src/lnmp/

# cd /usr/src/lnmp/nginx-1.8.0/

# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module

--with-http_stub_status_module模块记得要加,后面做查看nginx状态需要这个模块

# make ;make install

# ls /usr/local/nginx --看到这些文件,则表示nginx安装成功

conf html logs sbin

========================================================================

第四大步:配置优化php的fastcgi配置文件,并启动fastcgi模式的php

配置php-fpm配置文件 (配置fastcgi)

# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

--先改名,把.default去掉

要在些配置文件配置的选项有:

监听的IP,端口或者socket

初始化的进程数

执行身份

错误是否显示

打开的资源限制等

# vim /usr/local/php/etc/php-fpm.conf

164 listen = /var/run/fastcgi/fastcgi.socket

534 php_flag[display_errors] = on

149 user = nginx

150 group = nginx

235 pm.max_children = 64

240 pm.start_servers = 20

245 pm.min_spare_servers = 5

250 pm.max_spare_servers = 35

261 pm.max_requests = 3000

458 rlimit_files = 65535

175 listen.owner = nginx

176 listen.group = nginx

177 listen.mode = 0660 --这三行记得把前面的;去掉(有;是注释)

--这三行是控制启动fastcgi之后的socket文件的权限(特别是新版本的php,修复了以前socket访问权限的bug,所以这里指好权限,那么nginx才能有权限读取socket来访问fastcgi)

pm = dynamic #对于专用服务器,pm可以设置为static。

如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定:

pm.max_children #,子进程最大数

pm.start_servers #,启动时的进程数

pm.min_spare_servers #,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程

pm.max_spare_servers #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理

# mkdir /var/run/fastcgi

# chown nginx.nginx /var/run/fastcgi/

启动php fastcgi进程

# /usr/local/php/sbin/php-fpm -D -y /usr/local/php/etc/php-fpm.conf

--启动fastcgi,直接这样启动,5.3.3版本之前的php需要加start参数来启动

ls /var/run/fastcgi/ --启动过后,就可以在/var/run/fastcgi/目录下找到socket文件

fastcgi.socket

# ps -ef |grep fpm --也可以用此命令来查看php的factcgi的进程,有20个进程,因为我在前面配置pm.start_servers = 20

--如果要关闭fpm,可以直接pkill fpm就可以了

=================================================================================

--nginx的配置文件的一个基本结构如下:

常见基本配置(如跑服务进程的用户,启动进程数,log,pid等)

events {

事件(优化并发数,网络IO模型选择)

}

http {

针对所有server的全局配置

server {

虚拟主机一

}

server {

虚拟主机二

}

}

--------------------------------------------

第五大步:

配置nginx.conf主配置文件

# vim /usr/local/nginx/conf/nginx.conf

user nginx nginx; --运行用户和组

worker_processes 4; --启动ngnix的服务的工作进程数

error_log logs/error.log info; --错误日志以及日志等级

pid logs/nginx.pid; --pid文件

events {

use epoll; --epoll工作模式

worker_connections 65535; --每个进程允许打开的并发连接数

}

http {

include mime.types;

default_type application/octet-stream;

server_tokens off;

sendfile on;

tcp_nopush on;

keepalive_timeout 65;

gzip on;

server {

listen 8000; --监听的端口

server_name 10.1.1.9; --域名或者IP

charset utf8; --字符集

root /lnmp/web; --家目录

index index.php index.html index.htm; --主页文件

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

location ~ .*\.php$ {

fastcgi_pass unix:/var/run/fastcgi/fastcgi.socket;--对应php-fpm.conf里的设置

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; --把/scripts改成$document_root,表示家目录下的.php文件也当会以php来执行

include fastcgi_params;

}

}

}

# mkdir /lnmp/web -p --把定义的网站家目录也创建出来

# ulimit -SHn 65535 --把linux系统的文件描述符限制临时调大

启动nginx

# /usr/local/nginx/sbin/nginx

reload的方法

# /usr/local/nginx/sbin/nginx -s reload

关闭的方法

# /usr/local/nginx/sbin/nginx -s stop

最基本的验证:

# vim /lnmp/web/index.html --建立一个主页,去访问它

# vim /lnmp/web/test.php --和以前lamp时一样,在家目录下建立一个php测试页面来测试

使用http://10.1.1.9:8000/test.php能验证支持php,说明整个基本的lnmp搭建完成

=====================================================================

安装Discuz论坛

Discuz_X3.2_SC_UTF8.zip

# unzip Discuz_X3.2_SC_UTF8.zip -d /lnmp/web/

# cd /lnmp/web

# mv upload/* .

# rm upload/ -rf

然后使用firefox用下面的路径来安装

http://10.1.1.9:8000/install/

环境检查这一步,有些目录和文件权限需要修改

# chown nginx.nginx /lnmp/web/ -R

数据库授权

# /usr/local/mysql/bin/mysql

mysql> create database lnmp_discuz; --创建一个库,用于存放将要安装的discuz论坛的表

mysql> grant all on lnmp_discuz.* to 'lnmpdiscuz'@'localhost' identified by '123'; --授权一个用户,用于discuz论坛程序连接mysql

mysql> flush privileges;

安装会出现下面的报错

数据库连接错误

No such file or directory

解决方法1:

把mysql的配置socket路径改成/tmp/mysql.sock

# vim /usr/local/mysql/etc/my.cnf

[mysqld]

port=3307

datadir=/mysqldata56

pid-file=/mysqldata56/mysql56.pid

socket=/tmp/mysql.sock

log-error=/mysqldata56/mysql56-err.log

[client]

socket=/tmp/mysql.sock

改完后,重启mysql

解决方法2:

如果不想改,可以把原来的socket做一个软链接到/tmp/mysql.sock

# ln -s /mysqldata56/mysql56.socket /tmp/mysql.sock

解决方法3:

不使用socket连接,直接在安装界面填mysql的host为127.0.0.1:3307指定以tcp/ip协议的3307端口来连接。

相关文章
最新文章
热点推荐