1. 程式人生 > >LNMP環境搭建(CentOS7+Nginx1.10.1+MySQL5.6.31+PHP5.6.22)

LNMP環境搭建(CentOS7+Nginx1.10.1+MySQL5.6.31+PHP5.6.22)

編譯 efault libraries src inux object 根目錄 service gef

零、準備工作

安裝wget:yum install wget -y

安裝gcc及g++:yum install gcc gcc-c++ -y

後續所有源代碼都下載到/usr/local/src目錄

防火墻更改配置及關閉selinux見另一篇文章《LAMP環境搭建》

一、安裝Nginx

Nginx依賴pcre(重寫rewrite)、zlib(網頁gzip壓縮)及openssl(加密傳輸)。

1、安裝pcre

[root]wget http://pilotfiber.dl.sourceforge.net/project/pcre/pcre/8.38/pcre-8.38.tar.gz

[root]tar -xvzf pcre-8.38.tar.gz

[root]cd pcre-8.38

[root] ./configure --prefix=/usr/local/pcre

[root]make && make install

2、安裝zlib

[root]wget http://zlib.net/zlib-1.2.8.tar.gz

[root]tar -xvzf zlib-1.2.8.tar.gz

[root]cd zlib-1.2.8

[root] ./configure --prefix=/usr/local/zlib

[root]make && make install

3、安裝openssl

[root]wget http://www.openssl.org/source/openssl-1.0.2h.tar.gz

[root]tar -xvzf openssl-1.0.2h.tar.gz

[root]cd openssl-1.0.2h

[root] ./config --prefix=/usr/local/openssl

[root]make && make install

4、安裝Nginx

為了安全起見,創建一個nginx賬號專門用於運行nginx,當然為了簡便直接用root賬號運行的話(不推薦),就不需要創建nginx賬號及將nginx相關文件開放權限給nginx賬號。

[root]groupadd nginx

[root]useradd -g nginx nginx -s /bin/false#該賬號只用於運行nginx及相關軟件,不能登錄

[root]wget http://nginx.org/download/nginx-1.10.1.tar.gz?

[root]tar -xvzf nginx-1.10.1.tar.gz?

[root]cd nginx-1.10.1

[root] ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.38 --with-zlib=/usr/local/src/zlib-1.2.8 --with-openssl=/usr/local/src/openssl-1.0.2h

[root]make && make install

提示:./configure --help可以查看編譯選項

註意這裏

http_image_filter_module是nginx提供的集成圖片處理模塊,需要gd-devel的支持,錯誤信息如下:

./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries.
  • 1
  • 2

解決方法:

yum -y install gd-devel

5、配置Nginx

1)修改配置文件

[root]vi /usr/local/nginx/conf/nginx.conf

若需要,則將http -> server -> server_name改為服務器的外網ip地址,或你的網站域名?

2)配置開機自啟動

方法一:在/etc/rc.d/rc.local文件最後增加一行腳本

[root]/usr/local/nginx/sbin/nginx

方法二:將Nginx加入服務,新增/etc/init.d/nginx腳本,內容請見nginx腳本,然後設置開機自啟動:

[root]chmod +x /etc/init.d/nginx

[root]chkconfig nginx on #設置開啟自啟動後會自動將其加入服務

3)啟動Nginx

若Nginx已加入服務,則用service命令啟動服務

[root]service nginx start

否則運行Nginx程序

[root]/usr/local/nginx/sbin/nginx

二、安裝MySQL

1、安裝ncurses-devel

[root]yum install ncurses-devel -y

2、安裝cmake

[root]wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz

[root]tar -xvzf cmake-3.5.2.tar.gz

[root]cd cmake-3.5.2

[root] ./configure --prefix=/usr/local/cmake

[root]make && make install

[root]export PATH=$PATH:/usr/local/cmake/bin#臨時加入PATH環境變量

3、安裝mysql

同nginx一樣,創建一個mysql賬號專門用於運行mysql

[root]groupadd mysql

[root]useradd -g mysql mysql -s /sbin/false

[root]wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.31.tar.gz

[root]tar -xvzf mysql-5.6.31.tar.gz

[root]cd mysql-5.6.31

[root]cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \#mysql安裝到的路徑

-DSYSCONFDIR=/etc \ #mysql配置文件(my.cnf)路徑

-DMYSQL_DATADIR=/usr/local/mysql/data \ #data目錄路徑

-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \ #sock存放路徑

-DDEFAULT_CHARSET=utf8 \ #默認字符集

-DDEFAULT_COLLATION=utf8_general_ci#默認字符集校驗

[root]make && make install

4、配置mysql

以下所有操作都在/usr/local/mysql路徑下執行。

1)初始化數據庫

[root]scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data

2)拷貝配置文件

[root]cp support-files/my-default.cnf /etc/my.cnf

3)啟動mysql

[root]cp support-files/mysql.server /etc/init.d/mysqld#服務名也可以取做mysql,隨你

[root]chkconfig mysqld on

[root]service mysqld start

4)修改mysql的root賬號密碼

[root]bin/mysql_secure_installation

然後設置密碼,並進行一些配置

5)登錄mysql

[root]mysql -uroot -p

然後輸入密碼登錄。若運氣不好的話(比如我),輸入密碼登錄,裏面關閉,並輸出segment fault提示,那麽就需要修改源代碼並重新編譯安裝了。打開/usr/local/src/php.5.6.31/cmd-line-utils/libedit/terminal.c,在terminal_set函數中:

a、註釋char buf[TC_BUFSIZE];一行

b、將area = buf改成area = NULL

然後重新編譯安裝。

三、安裝php

本文最小安裝php。

1、安裝php

[root]wget http://cn2.php.net/distributions/php-5.6.22.tar.bz2

[root]tar -xvjf php-5.6.22.tar.bz2

[root]cd php-5.6.22

[root] ./configure --prefix=/usr/local/php \ #php安裝路徑

--with-libdir=lib64 \ #64位操作系統需要

--enable-mysqlnd \

--with-mysqli=mysqlnd \

--with-pdo-mysql=mysqlnd \

--with-mysql_sock=/var/lib/mysql/mysql.sock \

--enable-fpm \

--enable-opcache \

--with-mhash \

--with-ldap#本人的項目用到,需yum install openldap-devel

[root]make && make install

2、配置php

以下命令都是在/usr/local/php路徑下執行。

1)查看php.ini文件存放路徑

[root]bin/php --ini

Configuration File (php.ini) Path: /usr/local/php/lib

[root]cp /usr/local/src/php-5.6.22/php.ini-production lib/php.ini

2)配置php.ini

a.關閉在http頭中顯示php版本信息?

? expose_php = Off

b. 設置時區

date.timezone = PRC?

3、配置php-fpm

以下命令都是在/usr/local/php路徑下執行。

[root]cp etc/php-fpm.conf.default etc/php-fpm.conf

1)去掉25行 ;pid = run/php-fpm.pid 前面的分號,使之生效

2)第148行改為 user = nginx 設置php-fpm運行賬號為nginx

3)第149行改為 group = nginx #設置php-fpm運行組為nginx

4)可選。php-fpm默認采用tcp通信,若需要采用unix socket通訊,則配置如下

listen = /dev/shm/php-fpm.sock?

listen.owner = nginx?

listen.group = nginx

4、啟動php-fpm

[root]cp /usr/local/src/php-5.6.22/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

[root]chmod +x /etc/init.d/php-fpm

[root]chkconfig php-fpm on

[root]service php-fpm start

5、配置nginx支持php

[root]vi /usr/local/nginx/conf/nginx.conf

1)頂部行改成 user nginx nginx;

2)將

location ?/ {

root html;

index index.html index.htm

}?

改為:

?location ?/ {

root /www;

index index.php index.html index.htm

}??

註:需要將web根目錄/www開放權限給nginx賬號:chown nginx:nginx /www

3)取消location ~ \.php$ { 一段的註釋,如下:

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

這是php-fpm采用tcp通信時的配置,若其采用unix socket通信,則fastcgi_pass一行需該為:

fastcgi_pass unix:/dev/shm/php-fpm.sock;

6、配置php支持mysql

其實到這一步,php已經支持mysqli及pdo_mysql了(由於mysql_connect等函數已經廢棄,所以在編譯php時沒有--with-mysql)。但是用mysqli_connect連接本機時,只能使用‘127.0.0.1‘,而不能使用‘localhost‘來連接,原因是:mysql通過tcp連接到127.0.0.1,通過unix socket連接到localhost。只要在php.ini設置mysqli及pdo_mysql的default_socket為/var/lib/mysql/mysql.sock即可。貌似在編譯php時帶上--with-mysql-sock=/var/lib/mysql/mysql.sock選項就不用配置php.ini中的default_socket了。

7、重啟php-fpm及nginx

[root]service php-fpm restart

[root]service nginx restart

8、測試nginx對php的支持

新建/www/info.php文件,內容如下:

<?php phpinfo(); ?>

在瀏覽器中查看:localhost/info.php

9、測試對mysqli及pdo_mysql的支持

新建/www/mysql.php文件,測試mysqli時內容為:

<?php var_dump(mysqli_connect(‘localhost‘, ‘root‘, ‘111111‘)); ?>

測試pdo_mysql時內容為:

<?php var_dump(new PDO(‘mysql:host=localhost;db=mysql‘, ‘root‘, ‘111111‘)); ?>

上面的root和111111為mysql賬號和密碼。

分別在瀏覽器中查看:localhost/mysql.php,正常時,顯示內容分別含”object(mysqli)“和”object(PDO)“。

LNMP環境搭建(CentOS7+Nginx1.10.1+MySQL5.6.31+PHP5.6.22)