部署LNMP應用平臺

来源:https://www.cnblogs.com/omgasw/archive/2019/05/15/10870660.html
-Advertisement-
Play Games

一、LNMP應用平臺概述 1.概述:LNMP代表的就是:Linux系統下Nginx+MySQL+PHP這種網站伺服器架構。Nginx是一個高性能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP代理伺服器。Mysql是一個小型關係型資料庫管理系統。PHP是一種在伺服器端執行的嵌入HTM ...


一、LNMP應用平臺概述

1.概述:LNMP代表的就是:Linux系統下Nginx+MySQL+PHP這種網站伺服器架構。Nginx是一個高性能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP代理伺服器。Mysql是一個小型關係型資料庫管理系統。PHP是一種在伺服器端執行的嵌入HTML文檔的腳本語言。這四種軟體均為免費開源軟體,組合到一起,成為一個免費、高效、擴展性強的網站服務系統。

2.優勢:穩定、高效、功能豐富、維護簡易;

二、內部實現原理

1.處理http請求流程:

第一步:瀏覽器發送http request請求到伺服器(Nginx),伺服器響應並處理web請求,將一些靜態資源(CSS,圖片,視頻等)保存伺服器上。

第二步:將php腳本通過介面傳輸協議(網關協議)PHP-FCGI(fast-cgi)傳輸給PHP-FPM(進程管理程式),PHP-FPM不做處理,然後PHP-FPM調用PHP解析器進程,PHP解析器解析php腳本信息。PHP解析器進程可以啟動多個,進行併發執行。

第三步:將解析後的腳本返回到PHP-FPM,PHP-FPM再通過fast-cgi的形式將腳本信息傳送給Nginx。

第四步:伺服器再通過Http response的形式傳送給瀏覽器。瀏覽器再進行解析與渲染然後進行呈現。

2.Nginx + FastCGI實現:

Nginx不支持對外部程式的直接調用或者解析,所有的外部程式(包括PHP)必須通過Fast-CGI介面來調用; 

wrapper:為了調用CGI程式,還需要一個Fast-CGI的wrapper(wrapper可以理解為用於啟動另一個程式的程式),這個wrapper綁定在某個固定socket上,如埠或者文件socket。當Nginx將CGI請求發送給這個socket的時候,通過Fast-CGI介面,wrapper接收到請求,然後Fork(派生)出一個新的線程,這個線程調用解釋器或者外部程式處理腳本並讀取返回數據;接著,wrapper再將返回的數據通過Fast-CGI介面,沿著固定的socket傳遞給Nginx;最後,Nginx將返回的數據(html頁面或者圖片)發送給客戶端。這就是Nginx+Fast-CGI的整個運作過程。

3.lamp與lnmp的區別:

Lamp:Apache一般是把PHP當做自己的一個模塊來啟動;

Lnmp:Ngnix則是把http請求變數轉發給PHP進程,即PHP獨立進程,與Nginx相獨立;

三、案例:搭建LNMP並測試項目

案例環境:

系統類型

IP地址

主機名

所需軟體

Centos 6.5

192.168.100.150

www.linuxfan.cn

nginx-1.6.2.tar.gz、

cmake-2.8.6.tar.gz、

mysql-5.5.22.tar.gz、

libmcrypt-2.5.8.tar.gz、

mhash-0.9.9.9.tar.gz、

mcrypt-2.6.8.tar.gz、

php-5.3.28.tar.gz、

SKYUC.v3.4.2.SOURCE.zip

 

 

 

 

 

 

 

 

 

 

 

 

 

案例步驟:

  • 安裝並配置Nginx服務;
  • 安裝mysql資料庫服務;
  • 配置初始化mysql及其優化;
  • 安裝php服務程式;
  • 優化調整php服務;
  • 配置nginx服務使用php的FPM模塊來調用php環境來處理php的頁面請求:
  • 配置Nginx支持php解析,編寫服務控制腳本:
  • 編輯測試頁面;
  • 客戶端訪問測試;
  • 發佈php項目:電影系統;
  • 客戶端訪問測試;

安裝並配置Nginx服務

[root@www ~]# yum -y install pcre-devel zlib-devel popt-devel openssl-devel openssl
[root@www ~]# useradd -M -s /sbin/nologin nginx
[root@www ~]# tar zxvf nginx-1.6.2.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/nginx-1.6.2/
[root@www nginx-1.6.2]#  ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-pcre && make && make install
[root@www nginx-1.6.2]# cd
[root@www ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@www ~]# nginx 
[root@www ~]# netstat -utlpn |grep 80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      5618/nginx

安裝mysql資料庫服務

[root@www ~]# rpm -e mysql  mysql-server  --nodeps
[root@www ~]# yum -y install ncurses ncurses-devel
[root@www ~]# tar zxvf cmake-2.8.6.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/cmake-2.8.6/
[root@www ~]# ./configure 
[root@www ~]# make &&make install
[root@www ~]# cd
[root@www ~]# tar zxvf mysql-5.5.22.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/mysql-5.5.22/
[root@www mysql-5.5.22]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc/
[root@www mysql-5.5.22]# make &&make install

配置初始化mysql及其優化

[root@www mysql-5.5.22]# groupadd mysql
[root@www mysql-5.5.22]# useradd -M -s  /sbin/nologin  -g mysql  mysql
[root@www mysql-5.5.22]# chown mysql:mysql /usr/local/mysql/ -R
[root@www mysql-5.5.22]# cp support-files/my-medium.cnf /etc/my.cnf
cp:是否覆蓋"/etc/my.cnf"? y
[root@www mysql-5.5.22]# cp support-files/mysql.server /etc/init.d/mysqld
[root@www mysql-5.5.22]# chmod +x /etc/init.d/mysqld
[root@www mysql-5.5.22]# chkconfig --add mysqld
[root@www mysql-5.5.22]# echo "PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
[root@www mysql-5.5.22]# source /etc/profile
[root@www mysql-5.5.22]# cd /usr/local/mysql/scripts/
[root@www scripts]# ./mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
OK
Filling help tables...
OK
[root@www scripts]# cd
[root@www ~]# /etc/init.d/mysqld start
Starting MySQL...                                [確定]
[root@www ~]# mysqladmin -uroot password 123123
[root@www ~]# mysql -uroot -p123123 
mysql> quit;

安裝php服務程式

[root@www ~]# rpm -e php --nodeps
[root@www ~]# tar zxvf /root/libmcrypt-2.5.8.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/libmcrypt-2.5.8/
[root@www ~]# ./configure &&make &&make install
[root@www ~]# ln -s /usr/local/lib/libmcrypt.* /usr/lib64/   
[root@www ~]# tar zxvf /root/mhash-0.9.9.9.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/mhash-0.9.9.9/
[root@www ~]# ./configure &&make &&make install
[root@www ~]# ln -s /usr/local/lib/libmhash* /usr/lib64/   
[root@www ~]# tar zxvf /root/mcrypt-2.6.8.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/mcrypt-2.6.8/
[root@www ~]# ./configure &&make &&make install

[root@www ~]# yum -y install libxml2-devel gd zlib-devel libpng-devel libjpeg-devel
[root@www ~]# tar zxvf php-5.3.28.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/php-5.3.28/
[root@www php-5.3.28]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm  --with-jpeg-dir=/usr/lib
註解:
--prefix=/usr/local/php5                     ##指定安裝位置
--with-gd                                 ##載入gd擴展庫工具
--with-zlib                                 ##載入壓縮工具
--with-mysql=/usr/local/mysql                 ##載入mysql資料庫的安裝位置
--with-config-file-path=/usr/local/php5         ##載入php的配置文件存放位置
--enable-mbstring                             ##載入多字元的支持
--enable-fpm                              ##載入fpm管理程式
--with-jpeg-dir=/usr/lib                        ##載入識別圖片格式

[root@www php-5. 3.28]# make &&make install
[root@www php-5. 3.28]# ls /usr/local/php5/
bin  etc  include  lib  php  sbin  var

優化調整php服務

[root@www php-5. 3.28]# cp php.ini-development /usr/local/php5/php.ini
[root@www php-5. 3.28]# cd
[root@www ~]# ln -s /usr/local/php5/bin/* /usr/local/bin/
[root@www ~]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/
[root@www ~]# tar zxvf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz            ##安裝ZendGuardLoader模塊
[root@www ~]# cp ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x/ZendGuardLoader.so  /usr/local/php5/
[root@www ~]# vi /usr/local/php5/php.ini            ##在最後位置添加以下內容:
[Zend Guard]
zend_extension=/usr/local/php5/ZendGuardLoader.so
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
註釋:
zend_extension=/usr/local/php5/ZendGuardLoader.so            ##載入模塊位置
zend_loader.enable=1                    ##開啟該模塊
zend_loader.disable_licensing=0            ##禁用許可證檢查(提高性能)
zend_loader.obfuscation_level_support=3        ##讓 Zend Guard Loader 支持混淆級別

配置nginx服務使用php的FPM模塊來調用php環境來處理php的頁面請求

[root@www ~]# cd /usr/local/php5/etc/
[root@www etc]# cp php-fpm.conf.default php-fpm.conf
[root@www etc]# vi php-fpm.conf              ##新建管理cgi介面的fpm模塊的配置文件
[global]
pid = run/php-fpm.pid
[www]
listen = 127.0.0.1:9000
user = nginx
group = nginx
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35 
:wq
解釋:
[global]                                ##全局配置區域
pid = run/php-fpm.pid                    ##指定程式運行時的pid文件
[www]                                ##www網站區域
listen = 127.0.0.1:9000                    ##fpm管理程式監聽的地址和埠
user = nginx                            ##運行的用戶和組
group = nginx    
pm = dynamic                            ##指定fpm進程池的模式,動態模式
pm.max_children = 50                   ##靜態方式下開啟的進程
pm.start_servers = 20                      ##動態方式下啟動時開始的進程數
pm.min_spare_servers = 5                ##動態最小進程數
pm.max_spare_servers = 35              ##動態最大進程數
[root@www ~]# /usr/local/sbin/php-fpm                   ##啟動php-fpm
[root@www ~]# netstat -utpln |grep php
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      5587/php-fpm

配置Nginx支持php解析,編寫服務控制腳本

[root@www ~]# vi /etc/init.d/lnmp
#!/bin/bash
# chkconfig: 35 95 30
# description: This script is for LNMP Management!
NGF=/usr/local/nginx/sbin/nginx
NGP=/usr/local/nginx/logs/nginx.pid
FPMF=/usr/local/php5/sbin/php-fpm
FPMP=/usr/local/php5/var/run/php-fpm.pid
case $1 in 
   start)
      $NGF &&echo "nginx is starting! "
      $FPMF && echo "php-fpm is starting! "
   ;;
   stop)
      kill -QUIT $(cat $NGP) &&echo "nginx is stoped! "
      kill -QUIT $(cat $FPMP) &&echo "php-fpm is stoped! "
   ;;
   restart)
      $0 stop
      $0 start
   ;;
   reload)
      kill -HUP $(cat $NGP) 
      kill -HUP $(cat $FPMP)
   ;;
   status)
      netstat -utpln |grep nginx &>/dev/null 
      if [  $? -eq 0 ]
      then
         echo "nginx is running! "
      else
         echo "nginx is not running! "
      fi
      netstat -upltn |grep php-fpm &>/dev/null 
      if [ $? -eq 0 ]
      then
         echo "php-fpm is runing! "
      else
         echo "php-fpm is not running! "
      fi
   ;;
   *)
      echo "Usage $0 {start|stop|status|restart}"
      exit 1
   ;;
esac
[root@www ~]# chmod +x /etc/init.d/lnmp 
[root@www ~]# chkconfig --add lnmp 
[root@www ~]# /etc/init.d/lnmp status
nginx is running! 
php-fpm is runing! 

[root@www conf]# vi /usr/local/nginx/conf/nginx.conf                  ##主配置文件如下
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.linuxfan.cn;
        charset utf-8;
        location / {
            root   /var/www/linuxfan/;
            index  index.html index.htm index.php;
        }
    location ~\.php {                          ##訪問.php頁面的配置段
        root /var/www/linuxfan/;             ##php網頁文檔根目錄,html代表安裝nginx的目錄下的html目錄
        fastcgi_pass 127.0.0.1:9000;            ##php-fpm的監聽地址和埠號
        fastcgi_index index.php;                ##指定php首頁文件
        include fastcgi.conf;                ##包括fastcgi.conf樣本配置
    }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
[root@www conf]# /etc/init.d/lnmp restart

編輯測試頁面

[root@www ~]# mkdir -p /var/www/linuxfan
[root@www ~]# vi /var/www/linuxfan/index.html
www.linuxfan.cn
[root@www ~]# vi  /var/www/linuxfan/testa.php 
<?php
phpinfo();
?>
[root@www ~]# vi  /var/www/linuxfan/testm.php 
<?php
$link=mysql_connect('localhost','root','123123');
if($link) echo "mysql ok!";
mysql_close();
?>

客戶端訪問測試:

http://www.linuxfan.cn

http://www.linuxfan.cn/testa.php

http://www.linuxfan.cn/testa.php

發佈php項目:電影系統

[root@www ~]# yum -y install unzip
[root@www ~]# unzip SKYUC.v3.4.2.SOURCE.zip 
[root@www ~]# cd SKYUC.v3.4.2.SOURCE/
[root@www ~]# cp -rf  wwwroot  /var/www/linuxfan/skyuc
[root@www ~]# cd  /var/www/linuxfan/skyuc
[root@www ~]# chown  -R  nginx:nginx  admincp/  data/  templates/  upload/
[root@www ~]#mysql -uroot -p123123
> create database skyucdb;
> grant all on skyucdb.* to 'runskyuc'@'localhost' identified by '123123';
> quit;

客戶端訪問測試:

http://www.linuxfan.cn/skyuc/install/index.php ##安裝該系統

http://www.linuxfan.cn/skyuc ##普通用戶訪問該系統

http://www.linuxfan.cn/skyuc/admincp ##後臺管理界面,用戶密碼為安裝時指定

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 反向代理是一個伺服器,它接收通過Web發出的請求,即http和https,然後將它們發送到後端伺服器(或伺服器)。後端伺服器可以是單個或一組應用伺服器 ,如Tomcat,wildfly或Jenkins等,或者甚至可以是其他Web伺服器,如Apache等。 我們已經討論過如何使用Nginx配置簡單的h ...
  • 環境; centos 7 192.168.10.10 master centos 7 192.168.10.129 minion 1、為了方便關閉防火牆 2、在192.168.10.10主機上安裝salt-master salt-master預設監聽2個埠: 4505:publish_port 提 ...
  • 本文是在ubuntu環境下安裝jenkins,jenkins運行在docker容器中,至於docker如何安裝,本文不再描述,大家可以上網查詢下,如何安裝docker,下麵先放上一個使用jenkins自動部署原理圖片(圖片是網上找的,感謝原創分享) 下麵介紹安裝jenkins步驟: 使用下麵的命令拉 ...
  • 在別人電腦已登錄Windows的情況下: 打開控制面板 -> 管理工具 -> 電腦管理 或者 對Win圖標單擊右鍵 -> 電腦管理 -> 本地用戶和組 -> 用戶 我們可以操作用戶組的所以成員,包括Administrator、Guest、當前的用戶賬號。 對某個賬號單擊右鍵 -> 設置密碼 -> ...
  • 一、nginx代理的概述 概述:nginx是一款自由的、開源的、高性能的HTTP伺服器和反向代理伺服器;同時也是一個IMAP、POP3、SMTP代理伺服器;nginx可以作為一個內部網路代理上網的代理伺服器,另外nginx可以作為反向代理進行負載均衡的實現。 二、nginx之正向代理 解析:在如今的 ...
  • 在該文件夾下新建一個txt文件,輸入: ren *原尾碼名 *新尾碼名 保存,將此txt文件的尾碼改為.bat,雙擊運行,ok。 說明: ren 是rename(重命名)的縮寫。第一個參數指定 要匹配的部分,第二個參數指定 要替換為的文本。 示例:ren *.txt *.zip 將此文件夾中,所有後 ...
  • 找到其快捷方式 -> 右鍵 -> 屬性 -> 快捷方式 -> 快捷鍵 ...
  • 1、 PrintScreen 整個屏幕 Alt+PrintScreen 當前程式的視窗 Win+Shift+S 可選擇截圖範圍,但不能進行編輯。 以上方式均只是將截圖放到了系統剪貼板,需要在圖像處理工具、QQ輸入框等地方Ctrl+V,截圖才會顯示出來。 2、 Win+PrintScreen 自動截取 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...