(源碼安裝)LNMP架構及應用部署

LNMP架構及應用部署

1、部署Nginx 軟件
2、安裝Mysql數據庫(源碼安裝)
3、安裝PHP解析環境
4、配置Nginx支持PHP環境
5、LNMP平臺中部署WEB應用

LNMP也稱爲LEMP,E來自於Nginx的發音[engine x]
LNMP就像構建LAMP平臺一樣,構建LNMP平臺也需要用到Linux服務器,MySQL數據庫,PHP解釋環境等應用。P(PHP、Perl、Python)

1、部署Nginx 軟件

1)安裝支持軟件:
Nginx的配置及運行需要pcre、zlib等軟件包的支持,因此應預先安裝這些軟件的開發包(devel),以便提供相應的庫和頭文件,確保Nginx的安裝順利完成。

[root@nginx ~]# systemctl stop firewalld
[root@nginx ~]# iptables -F
[root@nginx ~]# setenforce 0

[root@nginx ~]# yum -y install pcre-devel zlib-devel openssl-devel

2)創建運行用戶、組:
Nginx服務程序默認以nobody身份運行,建議爲其創建專門的用戶賬號,以便更準確地控制其訪問權限,增加靈活性、降低安全風險。如:創建一個名爲nginx的用戶,不建立宿主目錄,也禁止登錄到shell環境。

[root@nginx ~]# useradd -M -s /sbin/nologin nginx

3)編譯安裝nginx:
釋放nginx源碼包

[root@nginx ~]#rz 
nginx-1.14.2.tar.gz 

[root@nginx ~]# tar xf nginx-1.14.2.tar.gz -C /usr/src/

4)配置編譯:

[root@nginx ~]# cd /usr/src/nginx-1.14.2/
[root@nginx nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module && make && make install

注:配置前可以參考:./configure --help給出說明
–prefix 設定Nginx的安裝目錄
–user和–group 指定Nginx運行用戶和組
–with-http_stub_status_module 啓用http_stub_status_module模塊以支持狀態統計
–with-http_ssl_module 啓用SSL模塊
–with-http_flv_module 啓用FLV模塊,提供尋求內存使用基於時間的偏移量文件

爲了使Nginx服務器的運行更加方便,可以爲主程序nginx創建鏈接文件,以便管理員直接執行nginx命令就可以調用Nginx的主程序。

[root@nginx nginx-1.14.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
[root@nginx nginx-1.14.2]# ll /usr/local/bin/nginx 
lrwxrwxrwx 1 root root 27 12-29 07:24 /usr/local/bin/nginx -> /usr/local/nginx/sbin/nginx

5)Nginx的運行控制:
與Apache的主程序httpd類似,Nginx的主程序也提供了" -t “選項用來對配置文件進行檢查,以便找出不當或錯誤的配置。配置文件nginx.conf默認位於安裝目錄/usr/local/nginx/conf/目錄中。若要檢查位於其他位置的配置文件,可使用”-c"選項來指定路徑。

[root@nginx conf]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

6)啓動、停止Nginx–80端口:
直接運行nginx即可啓動Nginx服務器,這種方式將使用默認的配置文件,若要改用其他配置文件,需添加"-c 配置文件路徑"選項來指定路徑。需要注意的是,若服務器中已安裝有httpd等其他WEB服務軟件,應採取措施(修改端口,停用或卸載其他軟件)避免部突。

[root@nginx conf]# netstat -anpt |grep :80
[root@nginx conf]# nginx
[root@nginx conf]# netstat -anpt |grep :80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      6810/nginx: master  

通過檢查 Nginx程序的監聽狀態,或者在瀏覽器中訪問此WEB服務(默認頁面將顯示"Welcome to nginx!"),可以確認Nginx服務是否正常運行。
在這裏插入圖片描述

2、安裝Mysql數據庫–基於源碼方式安裝

1)基於源碼包安裝MySQL
檢查是否有rpm格式的安裝包

[root@nginx ~]# rpm -e mysql mysql-server mariadb mariadb-server --nodeps

安裝 ncurses-devel

root@nginx ~]# yum -y install ncurses-devel
[root@nginx ~]# rpm -q ncurses-devel
ncurses-devel-5.9-14.20130511.el7_4.x86_64

ncurses-devel是cmake的依賴包
建議採用yum安裝方式

[root@nginx ~]# yum -y install cmake
[root@nginx ~]# rpm -q cmake
cmake-2.8.12.2-2.el7.x86_64

創建運行用戶

[root@nginx ~]# useradd -M -s /sbin/nologin mysql

解包,配置,編譯,安裝

[root@nginx ~]# tar xf mysql-5.7.24.tar.gz -C /usr/src/
[root@nginx ~]# cd /usr/src/mysql-5.7.24/
[root@nginx mysql-5.7.24]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc && make && make install

解釋:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql //數據庫程序安裝目錄
-DDEFAULT_CHARSET=utf8 //指定字符集編碼
-DDEFAULT_COLLATION=utf8_general_ci //默認的字符集校對規則,utf8_general_ci適用於utf-8字符集的通用規則
-DWITH_EXTRA_CHARSETS=all //指定額外支持的字符集編碼
-DSYSCONFDIR=/etc //指定配置文件存放目錄

報錯處理:(無報錯則跳過)
------------------------------------------------------------------------------CMake Error at cmake/boost.cmake:81 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=

This CMake script will look for boost in . If it is not there,
it will download and unpack it (in that directory) for you.

If you are inside a firewall, you may need to use an http proxy:

export http_proxy=http://example.com:80

Call Stack (most recent call first):
cmake/boost.cmake:238 (COULD_NOT_FIND_BOOST)
CMakeLists.txt:507 (INCLUDE)

– Configuring incomplete, errors occurred!
See also “/usr/src/mysql-5.7.24/CMakeFiles/CMakeOutput.log”.
See also “/usr/src/mysql-5.7.24/CMakeFiles/CMakeError.log”.

解決辦法:
a.在/usr/local下創建一個名爲boost的文件夾

[root@nginx ~]# mkdir /usr/local/boost

b.進入目錄並下載boost

[root@nginx ~]# cd /usr/local/boost
[root@nginx boost]# wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

c.解壓boost

[root@nginx boost]# tar xf boost_1_59_0.tar.gz 

d.繼續cmake,添加上-DWITH_BOOST=/usr/local/boost

[root@nginx ~]# cd /usr/src/mysql-5.7.24/
[root@nginx mysql-5.7.24]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc -DWITH_BOOST=/usr/local/boost && make && make install

2)安裝後的調整
對數據庫目錄進行權限設置

[root@nginx ~]# cd /usr/local/mysql/
[root@nginx mysql]# chown -R mysql:mysql ./

建立配置文件(CentOS7系統默認支持MariaDB數據庫,系統默認的/etc/my.cnf配置文件是MariaDB的配置文件 )

[root@nginx mysql]# vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock

[mysqld_safe]
log-error=/usr/local/mysql/data/mysql.log
pid-file=/usr/local/mysql/data/mysql.pid

3)初始化數據庫–
記住生產的隨機密碼TvC:Rm1ZlxtG

[root@nginx mysql]# ./bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
2020-05-11 T01:51:39.798903Z 1 [Note] A temporary password is generated for root@nginx: TvC:Rm1ZlxtG

–basedir=/usr/local/mysql/ //指定安裝目錄(產品目錄)
–datadir=/usr/local/mysql/data //指定數據目錄
–user=mysql //指定用戶身份

4)設置環境變量

[root@nginx mysql-5.7.24]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
[root@nginx mysql-5.7.24]# . /etc/profile = source /etc/profile

5)添加系統服務

[root@localhost mysql-5.7.24]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql-5.7.24]# chmod +x /etc/init.d/mysqld
[root@localhost mysql-5.7.24]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/usr/local/mysql/data/mysql.log'.
 SUCCESS!

後期修改數據庫用戶的密碼:

[root@nginx ~]# mysqladmin -u root -p'TvC:Rm1ZlxtG' password '123456'

3、安裝PHP解析環境

較新版本(如5.6)的PHP已經自帶FPM(fastCGI process manager,FastCGI進程管理器)模塊,用來對PHP解析實例進行管理,優化解析效率,因此在配置PHP編譯選項時應添加"–enable-fpm"以啓用此模塊。

1)編譯安裝php

[root@nginx ~]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel
[root@nginx ~]#rz

[root@nginx ~]# tar xf php-5.6.39.tar.gz -C /usr/src/
[root@nginx ~]# cd /usr/src/php-5.6.39/
[root@nginx php-5.6.39]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib && make && make install

2)安裝後的調整

[root@nginx php-5.6.39]# cp php.ini-production /usr/local/php5/php.ini
[root@nginx php-5.6.39]# ln -s /usr/local/php5/bin/* /usr/local/bin/
[root@nginx php-5.6.39]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/

3)爲了提高PHP解析效率,建議將相應版本的ZendGuardLander也裝上。
安裝ZendGuardLander(注意:若是64位系統,該軟件得到其官網下載64位的相應軟件包,若用32位的就會報錯。下載地址:http://www.zend.com/en/products/guard/downloads

[root@nginx ~]#rz

[root@nginx ~]# tar xf zend-loader-php5.6-linux-x86_64_update1.tar.gz -C /usr/src/
[root@nginx ~]# cd /usr/src/zend-loader-php5.6-linux-x86_64/
[root@nginx zend-loader-php5.6-linux-x86_64]# cp ZendGuardLoader.so /usr/local/php5/lib/php/ 

[root@nginx zend-loader-php5.6-linux-x86_64]# vim /usr/local/php5/php.ini
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1

4、配置Nginx支持PHP環境–選用php-fpm模塊調用

若要讓Nginx能夠解析PHP網頁,有兩種方法可以選擇;其一:Nginx充當中介,將訪問PHP頁面的WEB請求轉交給其他服務器(LAMP)去處理;其二:通過使用PHP的FPM模塊來調用本機的PHP環境。

如果選用FPM方式,則需要先啓動php-fpm進程,以便監聽PHP解析請求。參考範例建立php-fpm.conf配置文件,並修改其中的PID文件、運行用戶、服務數(進程數量)等相關設置,然後啓動php-fpm程序即可(默認監聽本機的9000端口)

[root@nginx ~]# cd /usr/local/php5/etc/
[root@nginx etc]# cp php-fpm.conf.default php-fpm.conf
[root@nginx etc]# useradd -M -s /sbin/nologin php
[root@nginx etc]# vim php-fpm.conf
 25 pid = run/php-fpm.pid		//確認pid文件位置
 149 user = php				//運行用戶
 150 group = php				//運行組
 246 pm.start_servers = 20		//啓動時開啓的進程數
 251 pm.min_spare_servers = 5	//最少空閒進程數
 256 pm.max_spare_servers = 35	//最大空閒進程數
 241 pm.max_children = 50		//最多空閒進程數

[root@nginx etc]# /usr/local/sbin/php-fpm
[root@nginx etc]# netstat -anpt |grep php-fpm
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      23027/php-fpm.conf) 

在php-fpm.conf文件中,pid配置行指出了PID信息的存放位置,對應的實際路徑爲/usr/local/php5/var/run/php-fpm.pid,根據上述信息,可以修改Nginx服務腳本,以便在啓動/停止Nginx服務器時將php-fpm進程也自動啓動/停止。

[root@nginx etc]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: 2345 99 20
# description: Nginx Server Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
PROG_FPM="/usr/local/sbin/php-fpm"
PIDF_FPM="/usr/local/php5/var/run/php-fpm.pid"
case "$1" in
start)
	$PROG 
	$PROG_FPM
;;
stop)
	kill -s QUIT $(cat $PIDF)
	kill -s QUIT $(cat $PIDF_FPM)
;;
restart)
	$0 stop
	$0 start
;;
reload)
	kill -s HUP $(cat $PIDF)
;;
*)
	echo "Usage: $0 (start|stop|restart|reload)"
	exit 1
esac
exit 0

這樣,一旦啓動或關閉nginx服務,php-fpm程序也會隨之啓動或關閉,不需要額外再啓動或關閉php-fpm.

配置Nginx支持PHP解析:

無論是將PHP頁面交給LAMP服務器去解析,還是調用本機的php-fpm進程進行解析,都需要在"server{}"配置段中添加location設置,以便指定當訪問.php面頁時採取何種操作。

對於第二種方法(調用本機的php-fpm進程),使用的配置語句如下所示。在conf/目錄下的fastcgi.conf文件中已經包含必需的宏設置,可通過include語句添加進來。


[root@nginx etc]# vim /usr/local/nginx/conf/nginx.conf

server {
…… //省略部分信息
location / {
            root   html;
            index  index.php index.html index.htm;
        }
location ~ \.php$ { 				//訪問php頁面的配置段
root html; 					//PHP網頁文檔根目錄
fastcgi_pass 127.0.0.1:9000; 	//php-fpm的監聽地址
fastcgi_index index.php; 		//PHP首頁文件
include fastcgi.conf; 			//包括fastcgi.conf樣本配置
}
}

本文檔中我選擇的是第二種方法,完成修改後重新加載nginx服務即可生效。

[root@nginx etc]# killall -HUP nginx

在PHP文檔根目錄下創建一個測試網頁,以便測試PHP語名能否正常解析,以及能否訪問MYSQL數據庫。測試頁內容如下 :

[root@nginx ~]# vim /usr/local/nginx/html/php.php
<?php
phpinfo();
?>

在這裏插入圖片描述

[root@nginx etc]# vim /usr/local/nginx/html/mysql.php
<?php
$link=mysqli_connect('localhost','root','123456');	//連接mysql數據庫
if($link) echo "<h1>恭喜你,大功告成!!</h1>";	//連接成功則返回信息
mysqli_close();								//關閉數據庫連接
?>

在這裏插入圖片描述

5、LNMP平臺中部署WEB應用

LNMP平臺與LAMP平臺是非常相似的,區別主要在於所用WEB服務軟件的不同,而這與使用PHP開發的WEB應用程序並無太大關係,因此PHP應用的部署方法也是類似的。

部署ComsenzDiscuz BBS論壇系統
Discuz!社區論壇是一個採用PHP與MySQL等多種數據庫構建的性能優異,功能全面的且安全穩定的社區論壇(BBS)軟件,其官方網站爲http://www.discuz.net

[root@nginx ~]#rz

[root@nginx ~]# unzip ComsenzDiscuz-DiscuzX-master.zip 
[root@nginx ~]# cd DiscuzX/
[root@nginx DiscuzX]# ls upload/
admin.php api.php config crossdomain.xml favicon.ico group.php index.php m misc.php portal.php search.php static uc_client
api archiver connect.php data forum.php home.php install member.php plugin.php robots.txt source template uc_server

上傳bbs代碼:

[root@nginx DiscuzX]# mv upload/ /usr/local/nginx/html/bbs

瀏覽器訪問 http://192.168.200.111/bbs/install/index.php
在這裏插入圖片描述

設置權限及模板文件

[root@nginx ~]# cd /usr/local/nginx/html/bbs/config/
[root@nginx config]# cp config_global_default.php config_global.php
[root@nginx config]# cp config_ucenter_default.php config_ucenter.php

[root@nginx ~]# cd /usr/local/nginx/html/bbs
[root@nginx bbs]# chmod -R 777 config/ data/ uc_client/ uc_server/

在這裏插入圖片描述

準備數據庫並配置相關授權

[root@nginx ~]# mysql -uroot -p123456
mysql> create database bbs;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on bbs.* to 'bbs'@'localhost' identified by 'bbs123456';
Query OK, 0 rows affected, 1 warning (0.07 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> \q;

在這裏插入圖片描述

修改nginx的配置文件,使直接訪問ip即可進入論壇界面

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
user  nginx nginx;
worker_processes  2; //自身工作的核心數

error_log  logs/error.log;
pid        logs/nginx.pid;
worker_rlimit_nofile 102400;

events {
    use epoll;
    worker_connections  4096;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        charset utf-8;

        location / {
            root   html/bbs;
            index  index.php index.html index.htm;
        }

	location ~ \.php$ {
	    root html/bbs;
	    fastcgi_pass 127.0.0.1:9000;
	    fastcgi_index index.php;
            include fastcgi.conf;
	}

	location /status {
	    stub_status on;
	    access_log off;
	}
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

[root@nginx etc]# killall -HUP nginx

瀏覽器訪問http://192.168.200.111

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章