主頁 > 軟體設計 > 電商平臺 lnmp 架構之 nginx mysql php 的部署(1)

電商平臺 lnmp 架構之 nginx mysql php 的部署(1)

2021-04-20 11:06:48 軟體設計

電商平臺 lnmp 之 nginx mysql php 部署(1)

    • 1. nginx 部署
    • 2. mysql 的部署
    • 3. php 部署

1. nginx 部署

在 nginx 官網下載 nginx 的原始碼包;此處我們選擇的是穩定版 nginx-1.18.0.tar.gz ;

在這里插入圖片描述

  1. 解壓
[root@server1 ~]# ls
nginx-1.18.0.tar.gz 
[root@server1 ~]# tar zxf nginx-1.18.0.tar.gz 	##解壓
[root@server1 ~]# ls
nginx-1.18.0  nginx-1.18.0.tar.gz 
[root@server1 ~]# cd nginx-1.18.0
[root@server1 nginx-1.18.0]# ls		
##解壓之后,如果看到里面有 configure 腳本,
表示是 gmake,gmake:GNU組織的 make,是開源的;
cmake:商業化 ##
auto     CHANGES.ru  configure  html     man     src
CHANGES  conf        contrib    LICENSE  README
  1. 編譯
    在編譯前,可以在原始碼包中輸入./configure - - help來獲得編譯幫助;幫助里的 - -without代表默認有的選項,如果在腳本后加上這個引數,代表把它去掉,- -with代表沒有激活的功能,

在這里插入圖片描述
輸入命令 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with http_stub_status_module來開始編譯;
其中--prefix=/usr/local/nginx表示自定義安裝目錄, -- with-XXX_ module選項表示指明安裝對應的模塊,--without-XXX_ module選項表示指明不安裝對應的模塊;

注意:如果在配置的時候不設定安裝路徑,默認情況下會自動安裝到/usr/local/目錄下,將相關資訊分布在該目錄下的其他目錄中;為了方便查找與使用,我們可以在配置的時候自定義路徑/usr/local/nginx,

開始編譯之后會提示一些出現的問題,缺少依賴性軟體;只需根據提示依次安裝即可;
1)yum install -y gcc安裝 gcc ,解壓后的原始碼 nginx 是C語言,原始碼編譯就需要安裝 gcc;
安裝完成之后再次編譯: ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with http_stub_status_module

2)PCRE library不符合要求,這個庫用于網站的重寫,重定向;

在這里插入圖片描述

比如:curl -I 163.com,在訪問域名時,重定向到www上;

在這里插入圖片描述

根據錯誤,安裝 yum install -y pcre-develpcre-devel庫檔案,在Redhat 里,所有的開發庫檔案都是以-devel結尾;
安裝完成之后再次編譯: ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with http_stub_status_module

3) http狀態監控需要Openssl library的支持,在Linux上都是用openssl來做加密的;

在這里插入圖片描述
根據錯誤, yum install openssl-devel -y安裝openssl-devel庫;
安裝完成之后再次編譯: ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with http_stub_status_module

沒有報錯完成之后,configure命令是為了在當前環境生成 Makefile檔案;

在這里插入圖片描述

configure 配置的所有引數,最終都會寫入/nginx-1.18.0/Makefile檔案中;

在這里插入圖片描述

4) make
接下的 make ,是按照 Makefile 檔案來進行編譯,編譯完成之后會在當前目錄生成符合當前系統的二進制程式;
: make進行編譯,編譯后如果出現問題,可以使用make clean將編譯引數清空然后重新編譯,

5) make install
然后 make install,編譯好的程式會在/nginx-1.18.0/objs/nginx 中,同時會拷貝到剛才指定的位置 /usr/local/nginx/sbin 中 ;

在這里插入圖片描述

6) 安裝完成后,進入/usr/local/nginx/目錄下的sbin里面存放的是nginx,在該目錄下輸入./nginx即可啟動:

/usr/local/nginx/ 目錄下各個檔案的含義:
conf:存放nginx的組態檔;
html:是默認提供的web服務的根目錄;
logs:是nginx日志的存放目錄;
sbin:存放nginx的二進制檔案,可以使用nginx二進制檔案啟動nginx.
  1. 優化二進制程式
    這個二進制程式有點大,要進行優化,把bug去掉

此處可以洗掉之前的 nginx 的目錄,關閉 debug 然后再次 configure 、make 、 make install,也可以執行 make clean 命令,清理編譯的內容,
此處有原始碼包存在,直接洗掉之前的解壓后的包,再次編譯即可,

關閉debug

[root@server1 nginx-1.18.0]# cd
[root@server1 ~]# ls
nginx-1.18.0  nginx-1.18.0.tar.gz
[root@server1 nginx-1.18.0]# vim auto/cc/gcc 
# debug
#CFLAGS="$CFLAGS -g"

如圖所示:

在這里插入圖片描述

然后重新make make install;
再次編譯完成之后,查看大小:

在這里插入圖片描述

  1. nginx 的啟動腳本
    nginx 二進制程式編譯完成之后默認在 /usr/local/nginx/sbin下,如果要啟動 nginx ,就要甬道絕對路徑的方式來啟動或者進入到該目錄中執行該腳本,就顯得很麻煩;可以將其寫在系統的PATH環境里面;

在這里插入圖片描述
添加完環境變數之后,輸入命令 source .bash_profile來讓其生效;
然后就可以直接執行 nginx 來啟動 nginx;啟動之后,可以來查看 nginx 的行程狀態,

在這里插入圖片描述
輸入命令netstat -antlp來查看埠資訊,nginx 的80 埠是我們所需要的;

在這里插入圖片描述

:此處要安裝yum install net-tools -y埠查詢工具,

  1. 測驗
    輸入命令 curl localhost本地測驗;

在這里插入圖片描述
也可以網頁訪問 172.25.25.1該 IP 為安裝 nginx 的主機 ip ,

在這里插入圖片描述

  1. 目錄介紹
    nginx 的默認發布目錄在/usr/local/nginx/html下;
    可以通過人為方式來更改默認發布的內容,編輯檔案,更改發布內容;

在這里插入圖片描述
查看測驗效果,訪問測驗檔案172.25.25.1/tes/html,效果如下所示:

在這里插入圖片描述

  1. nginx 的常用命令
[root@server1 ~]# nginx 					##開啟
[root@server1 ~]# nginx -s reload		##多載
[root@server1 ~]# nginx -s stop			##關閉

: 一旦開啟就不要再次重復開啟,否則會報如下的錯誤,

在這里插入圖片描述

2. mysql 的部署

在mysql 官網 https://www.mysql.com/downloads/ 下載官方社區版本原始碼包的,要帶有 boost ,此處安裝 mysql-5.7.31 的版本;

在這里插入圖片描述

在這里插入圖片描述

  1. 解壓
[root@server1 ~]# ls
mysql-5.7.31               nginx-1.18.0        
mysql-boost-5.7.31.tar.gz  nginx-1.18.0.tar.gz  
[root@server1 ~]# cd mysql-5.7.31/
[root@server1 mysql-5.7.31]# ls
boost           configure.cmake      libbinlogevents      mysql-test  regex             support-files
BUILD           dbug                 libbinlogstandalone  mysys       scripts           testclients
client          Docs                 libmysql             mysys_ssl   source_downloads  unittest
cmake           Doxyfile-perfschema  libmysqld            packaging   sql               VERSION
CMakeLists.txt  extra                libservices          plugin      sql-common        vio
cmd-line-utils  include              LICENSE              rapid       storage           win
config.h.cmake  INSTALL              man                  README      strings           zlib
  1. 原始碼編譯
    在解壓之后生成的目錄中可以看到,mysql 與 nginx 不同,沒有configure;因為MySQL屬于Oracle公司的產品,使用的是cmake;
    編譯時,一定要在原始碼目錄的頂級路徑里面,
[root@server1 mysql-5.7.31]# cd boost/
[root@server1 boost]# ls
boost_1_59_0
[root@server1 boost]# cd boost_1_59_0/
[root@server1 boost_1_59_0]# ls
boost
[root@server1 boost_1_59_0]# pwd
/root/mysql-5.7.31/boost/boost_1_59_0				##boost 路徑
[root@server1 mysql-5.7.31]# yum install cmake -y
## 由于mysql 安裝需要用到 cmake 所以要先下載
[root@server1 mysql-5.7.31]# cmake \		
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \			##安裝目錄
-DMYSQL_DATADIR=/usr/local/mysql/data \				##資料庫存放目錄
-DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock \##Unix socket 檔案路徑
-DWITH_INNOBASE_STORAGE_ENGINE=1 \					##安裝 innodb 存盤引擎
-DDEFAULT_CHARSET=utf8 \							##使用 utf8 字符
-DDEFAULT_COLLATION=utf8_general_ci \				##校驗字符
-DEXTRA_CHARSETS=all	\							##安裝所有擴展字符集
-DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0	##制定 boost 路徑

開始編譯
在這里插入圖片描述

輸入命令 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0開始編譯,在編譯的程序中會出現一些依賴性需要解決,依次安裝需要的包即可;

第一次出現的問題:

在這里插入圖片描述
根據錯誤, yum install ncurses-devel -y安裝ncurses-devel庫;
然后再次編譯: cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0

在這里插入圖片描述

根據提示洗掉快取:rm -fr CMakeCache.txt
然后再次編譯: cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0

第二次出現問題:

在這里插入圖片描述
根據錯誤, yum install gcc-c++ -y
安裝完成之后根據提示洗掉快取:rm -fr CMakeCache.txt
然后再次編譯: cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0

第三次出現問題:

在這里插入圖片描述
根據錯誤, yum install bison -y
安裝完成之后根據提示洗掉快取:rm -fr CMakeCache.txt
然后再次編譯: cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0

直至編輯不再報錯:

在這里插入圖片描述

make :此程序時間的長短會根據 cpu 的能力,往往都需要較長的時間

在這里插入圖片描述

當出現如圖所示的提示時,說明 make 成功;

在這里插入圖片描述
然后執行 make install 向向/usr/local/mysql中連續寫入資料即可編譯完成,當編譯完成之后便會生成/usr/local/mysql這個目錄,

cmake在編譯的程序中有顏色,有進度,

  1. mysql 啟動腳本和環境變數設定

生成啟動腳本

[root@server1 mysql-5.7.31]# cd /usr/local/mysql/
[root@server1 mysql]# du -sh
1.9G	.
[root@server1 mysql]# ls
bin  docs  include  lib  LICENSE  man  mysql-test  README  README-test  share  support-files
[root@server1 mysql]# cd support-files/
[root@server1 support-files]# ls
magic  mysqld_multi.server  mysql-log-rotate  mysql.server
[root@server1 support-files]# cp mysql.server /etc/init.d/mysql			##復制腳本到啟動目錄
[root@server1 support-files]# ll /etc/init.d/mysqld		##腳本一定要有可執行的權限
-rwxr-xr-x 1 root root 10576 Apr 17 23:14 /etc/init.d/mysqld
[root@server1 mysql-5.7.31]# cd mysql-test/
[root@server1 mysql-test]# ls
asan.supp            CTestTestfile.cmake  Makefile              mysql-test-run.pl  std_data
CMakeFiles           extra                mtr                   r                  suite
cmake_install.cmake  include              mtr.out-of-source     README             t
CMakeLists.txt       lib                  mysql-stress-test.pl  README.gcov        valgrind.supp
collections          lsan.supp            mysql-test-run        README.stress
[root@server1 mysql-test]# vim /etc/my.cnf
[root@server1 mysql-test]# cat /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data				##資料目錄
socket=/usr/local/mysql/data/mysql.sock		##編譯的路經
symbolic-links=0

添加環境變數

[root@server1 bin]# pwd
/usr/local/mysql/bin		##MySQL的指令都在/usr/local/mysql/bin目錄里
[root@server1 bin]# ls
innochecksum       mysqlcheck                  mysql_embedded             mysqltest_embedded
lz4_decompress     mysql_client_test           mysqlimport                mysql_tzinfo_to_sql
myisamchk          mysql_client_test_embedded  mysql_install_db           mysql_upgrade
myisam_ftdump      mysql_config                mysql_plugin               mysqlxtest
myisamlog          mysql_config_editor         mysqlpump                  perror
myisampack         mysqld                      mysql_secure_installation  replace
my_print_defaults  mysqld_multi                mysqlshow                  resolveip
mysql              mysqld_safe                 mysqlslap                  resolve_stack_dump
mysqladmin         mysqldump                   mysql_ssl_rsa_setup        zlib_decompress
mysqlbinlog        mysqldumpslow               mysqltest

配置環境變數如圖所示:

在這里插入圖片描述

  1. mysql 初始化

在/usr/local/mysql下沒有資料目錄,需要做一個初始化;

在這里插入圖片描述

[root@server1 ~]# mysqld --verbose --help |less  		##查看幫助
[root@server1 ~]# useradd -u 1000 -M -d /usr/local/mysql/data -s /sbin/nologin mysql
##創建用戶,原始碼不會像rpm包會自動創建相應的用戶,需要我們自己創建
##不創建家目錄,制定資料目錄為 /usr/local/mysql/data
[root@server1 mysql]# mysqld --verbose --help |less
[root@server1 mysql]# mysqld --initialize --user=mysql	##生成資料庫密碼,自動讀取/etc/my.cnf,生成臨時密碼,初始化密碼只允許登陸,

初始化

在這里插入圖片描述

更改資料庫密碼

[root@server1 mysql]# /etc/init.d/mysqld start		##開啟資料庫,資料庫在開啟之后就不要重復開啟,以免 socket 沖突
Starting MySQL.Logging to '/usr/local/mysql/data/server1.err'.
 SUCCESS! 
[root@server1 mysql]# netstat -antlp | grep :3306		##查看資料庫開啟之后的埠3306
tcp6       0      0 :::3306                 :::*                    LISTEN      11280/mysqld        

輸入 mysql_secure_installatin修改資料庫密碼;

在這里插入圖片描述

在這里插入圖片描述注:改密碼,不要檢查密碼的強壯度,否則校驗過不去,

在修改密碼之后,用更改的密碼成功登陸資料庫,至此資料庫編譯結束,

在這里插入圖片描述

3. php 部署

在 php 官網 https://www.php.net 下載所需要的原始碼包,此處我們下載的為 php-7.4.12.tar.bz2版本;

在這里插入圖片描述

  1. 解壓
[root@server1 ~]# yum search bzip				##由于 php 包為 bz2 的壓縮格式,需要下載 bzip 的解壓工具
[root@server1 ~]# ls
mysql-5.7.31               nginx-1.18.0.tar.gz  
mysql-boost-5.7.31.tar.gz  php-7.4.12.tar.bz2
nginx-1.18.0               
[root@server1 ~]# tar jxf php-7.4.12.tar.bz2	##解壓
[root@server1 ~]# ls
mysql-5.7.31               nginx-1.18.0.tar.gz
mysql-boost-5.7.31.tar.gz  php-7.4.12   
nginx-1.18.0               php-7.4.12.tar.bz2
  1. 原始碼編譯

1)創建用戶

此處安裝的 php 是為了和前面安裝的 nginx 構成 lnmp 架構,所以應該和 nginx 的用戶保持一致;
由于前面沒有為 nginx 創建用戶,需要在此處創建用戶;

在這里插入圖片描述

創建一個名為 nginx 的用戶,PHP和nginx都使用這個用戶;
修改mysql的用戶和用戶組

[root@server1 php-7.4.12]# nginx 			##開啟 nginx
[root@server1 php-7.4.12]# useradd -M -d /usr/local/nginx/ -s /sbin/nologin nginx		##不指定用戶的家目錄,資料目錄為/usr/local/nginx/ 
[root@server1 php-7.4.12]# id nginx
uid=1001(nginx) gid=1001(nginx) groups=1001(nginx)
[root@server1 nginx]# cd /usr/local/nginx/conf/
[root@server1 conf]# ls
fastcgi.conf            koi-utf             nginx.conf           uwsgi_params
fastcgi.conf.default    koi-win             nginx.conf.default   uwsgi_params.default
fastcgi_params          mime.types          scgi_params          win-utf
fastcgi_params.default  mime.types.default  scgi_params.default
[root@server1 conf]# vim nginx.conf		
[root@server1 conf]# head -n 5 nginx.conf

user nginx nginx;							##編輯檔案內容,將用戶和組都更改為 nginx;
worker_processes  1;
#error_log  logs/error.log;
[root@server1 conf]# nginx -s reload 		##重新加載 nginx
[root@server1 conf]# ps aux
nginx     3833  0.0  0.0  46420  2024 ?        S    21:14   0:00 nginx: worker process
root      3842  0.0  0.0 155360  1880 pts/1    R+   21:15   0:00 ps aux
  1. 編譯
    在 /php-7.4.12 里存在configure,屬于gmake;可以用 ./configure - -help 查看其引數幫助;
[root@server1 php-7.4.12]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc 
--enable-mysqlnd 		##驅動
--with-pdo-mysql --with-mysqli 
--with-openssl-dir 		##加密
--enable-gd			##開啟圖形
 --with-zlib-dir 		##壓縮
--with-curl 			##支持curl 命令
--with-pear 			##php 重要擴展
--enable-inline-optimization 	##優化選項
--enable-soap 			##動態編譯支持
--enable-sockets 		##socket 支持
--enable-mbstring 
--enable-fpm 			##fpm 觀念器
--with-fpm-user=nginx 		##用戶身份,用什么身份運行,盡量和nginx 一致
--with-fpm-group=nginx 		##用戶組身份
--with-fpm-systemd

開始編譯
在 /php-7.4.12目錄中執行 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd,會遇到一些依賴性需要解決;

在這里插入圖片描述

第一個問題:需要libsystemd的版本高于209;

根據錯誤,yum install systemd-devel.x86_64 -y安裝 systemd-devel 安裝包;
安裝完成之后再次執行 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd繼續編譯;

第二個問題:

在這里插入圖片描述

根據錯誤,yum install libxml2-devel -y
安裝 systemd-devel 安裝包;
安裝完成之后再次執行 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd繼續編譯;

第三個問題:

在這里插入圖片描述

根據錯誤,yum install sqlite-devel.x86_64 -y
安裝 systemd-devel 安裝包;
安裝完成之后再次執行 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd繼續編譯;

第四個問題:

在這里插入圖片描述
根據錯誤,yum install libcurl-devel.x86_64 -y
安裝 systemd-devel 安裝包;
安裝完成之后再次執行 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd繼續編譯;

第五個問題:

在這里插入圖片描述
根據錯誤,yum install libpng-devel.x86_64 -y
安裝 systemd-devel 安裝包;
安裝完成之后再次執行 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd繼續編譯;

第六個問題:此處的依賴性的解決 Redhat 本身沒有可以支持的安裝包,需要去網上下載下來然后再安裝;

根據錯誤,yum install oniguruma-6.8.2-1.el7.x86_64.rpm oniguruma-devel-6.8.2-1.el7.x86_64.rpm -y
安裝 systemd-devel 安裝包;
安裝完成之后再次執行 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-mysqlnd --with-pdo-mysql --with-mysqli --with-openssl-dir --enable-gd --with-zlib-dir --with-curl --with-pear --enable-inline-optimization --enable-soap --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-fpm-systemd繼續編譯;

當沒有錯誤時,編譯完成之后的效果如圖所示:

在這里插入圖片描述

make
make 完成之后的效果如圖所示:

在這里插入圖片描述

make install

在這里插入圖片描述

  1. 通過腳本多載 php
    在編譯時,configure 后加了systemd,默認會生成 systemctl 的啟動后臺,但是默認的位置并不是想要的需要更改;
    在 php 的原始碼中將啟動 systemd 的腳本/php-7.4.12/sapi/fpm/init.d.php-fpm 拷貝到 /etc/init.d /下,給定執行權限;
    這種啟動方式是在 systemd 以前,最常用的;
[root@server1 fpm]# pwd
/root/php-7.4.12/sapi/fpm
[root@server1 fpm]# ls
config.m4  init.d.php-fpm     Makefile.frag  php-fpm.8.in     php-fpm.service     status.html.in  www.conf.in
CREDITS    init.d.php-fpm.in  php-fpm        php-fpm.conf     php-fpm.service.in  tests
fpm        LICENSE            php-fpm.8      php-fpm.conf.in  status.html         www.conf
[root@server1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm	##復制啟動腳本到對應的位置
[root@server1 fpm]# chmod +x /etc/init.d/php-fpm 			##給腳本執行的權限
[root@server1 fpm]# /etc/init.d/php-fpm 					##直接呼叫該腳本,系統會列印相應的幫助
Usage: /etc/init.d/php-fpm {start|stop|force-quit|restart|reload|status|configtest}

補充
cgi 和 fcgi 區別:
php 無法平滑加載
cgi 的更改修改每次重啟 apache 才可以生效,沒有后臺;
fcgi 可以平滑加載有后臺;呼叫腳本 reload 就可以了,

  1. 組態檔
    在安裝路徑中的 php-fpm.conf.default 是 php 控制器的組態檔模板;
    復制成組態檔;
    組態檔中全部都是注釋的內容,注釋后面是否有默認值,該有的不能為空,
[root@server1 etc]# pwd
/usr/local/php/etc
[root@server1 etc]# ls
pear.conf  php-fpm.conf.default  php-fpm.d
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf		##生成組態檔
[root@server1 etc]# vim php-fpm.conf
 13 [global]
 14 ; Pid file
 15 ; Note: the default prefix is /usr/local/php/var
 16 ; Default Value: none		##默認值為空就需要更改
 17 pid = run/php-fpm.pid		#修改組態檔中PID的位置

在這里插入圖片描述

在 /root/php-7.4.12/etc/php-fpm.d/ 目錄下有 www.conf.default ;將其復制成 www.conf 組態檔;

[root@server1 php-fpm.d]# ls
www.conf.default
[root@server1 php-fpm.d]# cp www.conf.default www.conf
 23 user = nginx				##用戶身份正常,說明編譯成功
 24 group = nginx
---
 36 listen = 127.0.0.1:9000		##默認監聽的是本機127.0.0.1:9000埠;需要遠程連接就需要打開該埠
---
---
114 pm.max_children = 5			##默認開啟的服務數量最大是 5
115 
116 ; The number of child processes created on startup.
117 ; Note: Used only when pm is set to 'dynamic'
118 ; Default Value: (min_spare_servers + max_spare_servers) / 2
119 pm.start_servers = 2		##默認開啟2個,;此值的修改根據自己的生產環境設定,此處的實驗不做更改
120 
121 ; The desired minimum number of idle server processes.
122 ; Note: Used only when pm is set to 'dynamic'
123 ; Note: Mandatory when pm is set to 'dynamic'
124 pm.min_spare_servers = 1	##默認最小空閑1個

如下圖所示;

  1. 啟動 php
    php.ini-productionPHP的生產檔案
    PHP組態檔的命名方式一定是php.ini
[root@server1 ~]# cd php-7.4.12
[root@server1 php-7.4.12]# ls
appveyor             config.log       ext         Makefile             php.ini-production  travis
azure                config.nice      EXTENSIONS  Makefile.fragments   README.md           TSRM
azure-pipelines.yml  config.status    include     Makefile.objects     README.REDIST.BINS  UPGRADING
build                configure        libs        modules              run-tests.php       UPGRADING.INTERNALS
buildconf            configure.ac     libtool     NEWS                 sapi                win32
buildconf.bat        CONTRIBUTING.md  LICENSE     pear                 scripts             Zend
CODING_STANDARDS.md  docs             main        php.ini-development  tests
[root@server1 php-7.4.12]# cp php.ini-production /usr/local/php/etc/php.ini		##生成php組態檔,組態檔一定是 php.ini 命名方式
[root@server1 php-7.4.12]# /etc/init.d/php-fpm start		##開啟 php 
Starting php-fpm  done

開啟之后過濾,查看埠資訊:

在這里插入圖片描述
可以用 ps aux查看行程狀態資訊,php 的用戶為 nginx

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/278058.html

標籤:其他

上一篇:淺談軟體開發模型之瀑布開發和敏捷開發

下一篇:中科院博士論文致謝部分走紅,感動無數網友,其實沉下心來,你我何嘗不是前程萬里

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more