lnmp環(huán)境是我們大型WEB服務(wù)器常用的一個環(huán)境了,在這里我來給各位整理了一篇非常詳細的lnmp環(huán)境編譯安裝步驟,希望下文可以幫助到各位.
linux采用的是centos,軟件包統(tǒng)一放在/usr/local/src目錄下.由于 centos源比較老,而且更新起來也比較慢,此處建議你換成163源,提示:如果你真打算采用這種編譯安裝php的話,請至少安排半天時間來完成,如果是在虛擬機里測試的話,建議調(diào)大內(nèi)存以讓時間更短,我本機給了虛擬機2G內(nèi)存,在安裝完成后可以再設(shè)置小點內(nèi)存跑.安裝的時候請按順序安裝.
更改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安裝環(huán)境:先采用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下,安裝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的時候出現(xiàn)錯誤了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 網(wǎng)址:http://mhash.sourceforge.net/,下載下來之后用winscp這種工具傳到linux的/usr/local/src目錄下:
- 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是否已經(jīng)存在了,如果存在就刪除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
- #發(fā)現(xiàn)沒有任何顯示
添加一個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
- #創(chuàng)建系統(tǒng)數(shù)據(jù)庫表
- cd /usr/local/mysql
- scripts/mysql_install_db --user=mysql
- #更改權(quán)限
- cd /usr/local/mysql
- chown -R root:mysql .
- chown -R mysql:mysql data
- #把mysql添加到系統(tǒng)服務(wù)中去
- 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');
- #關(guān)閉mysql的時候可以使用
- /usr/local/mysql/bin/mysqladmin -u root -p shutdown
- //Vevb.com
- #把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改版的tengine,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
- //注意這時我安裝tengine了,如果你用nginx,完全參照安裝就行
- cd /usr/local/src
- useradd -M -s /sbin/nologin nginx
- #如果是nginx,請把這里換成nginx
- tar -zxf tengine-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 --with-http_concat_module=shared(注:如果是nginx的話不需要 --with-http_concat_module=shared)
- 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,現(xiàn)在來測試一下環(huán)境.
- cd /usr/local/nginx
- cd html
- vim test.php
寫上:<?php phpinfo();?>
然后訪問一下localhost/test.php,正常的話,就一切正常了,如果出問題的話,請看nginx有沒有啟動,php-fpm有沒有啟動,注明幾個問題如果修改php配置文件的時候,需要重啟php-fpm就可以了.
- #先關(guān)閉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/
lnmp安裝就徹底完成了,有什么問題可以聯(lián)系我,這里沒沒講到如何優(yōu)化一些配置的問題,以后可以會寫文章分析.
在這里也特別說明一下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;
- }
新聞熱點
疑難解答
圖片精選