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