lnmp服務(wù)器環(huán)境搭建(一)源碼安裝

概括

lnmp環(huán)境=linux+nginx+mysql+php饥悴。
國內(nèi)小公司用的最多的服務(wù)器環(huán)境是lamp或者lnmp蒿秦,目前nginx以其高并發(fā)的特點(diǎn)贏得更多人的青睞烤镐,之前有使用過一鍵安裝的集成環(huán)境,也用過虛擬機(jī)從配置網(wǎng)關(guān)從頭開始折騰過棍鳖,裝系統(tǒng)環(huán)境對大多數(shù)后端開發(fā)者來說都是不陌生的炮叶。
有一點(diǎn)不同的是在LNMP結(jié)構(gòu)里php會啟動一個服務(wù):php-fpm,而LANP中php只是作為Apache的一個模塊存在渡处。Nginx會把用戶的動態(tài)請求交給php服務(wù)去處理镜悉,這個php服務(wù)就會去和數(shù)據(jù)庫進(jìn)行交互。用戶的靜態(tài)請求Nginx會直接處理骂蓖,Nginx處理靜態(tài)請求的速度要比Apache快很多性能上要好积瞒,所以Apache和Nginx在動態(tài)請求處理上區(qū)別不大,但如果是靜態(tài)請求處理的話就會明顯發(fā)現(xiàn)Nginx要快于Apache登下,而且Nginx能承受的并發(fā)量要比Apache大茫孔,可以承受好幾萬的并發(fā)量叮喳,所以大一些的網(wǎng)站都會使用Nginx作為web服務(wù)器。
今天我記錄一下我從0開始在線上服務(wù)器安裝lnmp環(huán)境缰贝,不像很多博客那么詳細(xì)的教程馍悟,本篇只記錄自己一步步搭環(huán)境遇到的問題和怎樣搭建一個服務(wù)器。

PHP-FPM(FastCGI Process Manager:FastCGI進(jìn)程管理器)是一個PHPFastCGI管理器剩晴,對于PHP 5.3.3之前的php來說锣咒,是一個補(bǔ)丁包 ,旨在將FastCGI進(jìn)程管理整合進(jìn)PHP包中赞弥。如果你使用的是PHP5.3.3之前的PHP的話毅整,就必須將它patch到你的PHP源代碼中,在編譯安裝PHP后才可以使用绽左。

服務(wù)器:百度云悼嫉。操作系統(tǒng)CentOS7.5。
yum拼窥、wget等工具的安裝不再贅述戏蔑,因為是線上百度云自帶的centos,所以這些常用的工具都裝好了鲁纠。
由于眾所周知的原因总棵,可自行選擇去官網(wǎng)下載或者國內(nèi)鏡像下載
搜狐開源鏡像站:http://mirrors.sohu.com/
網(wǎng)易開源鏡像站:http://mirrors.163.com/
開源中國:http://mirrors.oschina.net/
首都在線科技股份有限公司:http://mirrors.yun-idc.com/
阿里云開源鏡像:http://mirrors.aliyun.com/
LUPA:http://mirror.lupaworld.com/
常州貝特康姆軟件技術(shù)有限公司(原cn99):http://centos.bitcomm.cn/

安裝前準(zhǔn)備:
如果下列安裝順序不同,請注意添加用戶組和用戶改含,否則會有報錯

 groupadd nginx
 useradd -M -g nginx -s /sbin/nologin nginx
 groupadd mysql
 useradd -M -g mysql -s /sbin/nologin mysql
 groupadd www-data
 useradd -M -g www-data -s /sbin/nologin www-data

一情龄、nginx的安裝

1. 安裝nginx所需環(huán)境

你可以選擇一步安裝或者單個安裝

yum install gcc gcc-c++ openssl openssl-devel cyrus-sasl-md5

gcc 安裝

nginx是c語言開發(fā),所以需要安裝c相關(guān)編譯環(huán)境

yum install gcc-c++

PCRE pcre-devel 安裝

PCRE(Perl Compatible Regular Expressions) 是一個Perl庫候味,包括 perl 兼容的正則表達(dá)式庫刃唤。nginx 的 http 模塊使用 pcre 來解析正則表達(dá)式,所以需要在 linux 上安裝 pcre 庫白群,pcre-devel 是使用 pcre 開發(fā)的一個二次開發(fā)庫。nginx也需要此庫硬霍。而且關(guān)于路由重寫也是需要Perl庫帜慢。

yum install -y pcre pcre-devel

zlib 安裝

zlib 庫提供了很多種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的內(nèi)容進(jìn)行 gzip 唯卖,所以需要在 Centos 上安裝 zlib 庫粱玲。

yum install -y zlib zlib-devel

OpenSSL 安裝

OpenSSL 是一個強(qiáng)大的安全套接字層密碼庫,囊括主要的密碼算法拜轨、常用的密鑰和證書封裝管理功能及 SSL 協(xié)議抽减,并提供豐富的應(yīng)用程序供測試或其它目的使用。
nginx 不僅支持 http 協(xié)議橄碾,還支持 https(即在ssl協(xié)議上傳輸http)卵沉,所以需要在 Centos 安裝 OpenSSL 庫颠锉。

yum install -y openssl openssl-devel

以上環(huán)境或擴(kuò)展安裝都也會提示你現(xiàn)在已經(jīng)安裝并且是最新版本。

已安裝過

2.編譯安裝nginx

下載安裝包

wget  http://nginx.org/download/nginx-1.8.0.tar.gz

解壓

tar -zxvf nginx-1.8.0.tar.gz -C /usr/src/

配置

cd /usr/src/nginx-1.8.0
//設(shè)置編譯路徑為 /usr/local/nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_gzip_static_module  --with-http_stub_status_module  --with-http_ssl_module

configure編譯配置參數(shù)說明:
--prefix # 用于指定Nginx編譯后的安裝目錄
--user # 設(shè)置Nginx運(yùn)行的用戶身份(默認(rèn) - nobody)
--group # 設(shè)置Nginx運(yùn)行的用戶組(默認(rèn) - nobody)
--add-module # 為添加的第三方模塊史汗,此次添加了fdfs的Nginx模塊
--with..._module # 表示啟用的Nginx模塊琼掠,如此處啟用了http_ssl_module模塊

配置nginx

編譯安裝

make && make install
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
./nginx -s reload

開機(jī)自啟動

//文件本來為空
vim /lib/systemd/system/nginx.service
# 添加文件內(nèi)容如下:
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

啟動nginx

systemctl start nginx.service
//查看是否啟動成功
lsof -i:80

成功

成功訪問

配置nginx文件

其實(shí)以上過程是可以正常訪問,但是有些配置需要你安裝完其他服務(wù)后再進(jìn)行的停撞。如php-fpm
以下操作是在php和mysql安裝完成后再寫入配置的

//編輯配置文件
vim /usr/local/nginx/conf/nginx.conf
# 設(shè)置參數(shù)如下:
  2 user  nginx nginx;   # 運(yùn)行用戶和組
  3 worker_processes  1;   # 啟動ngnix的服務(wù)的工作進(jìn)程數(shù)
  5 error_log  logs/error.log;   # 打開注釋瓷蛙,錯誤日志以及日志等級
  9 pid        logs/nginx.pid;   # 打開注釋,pid文件
 12 events {
 13     worker_connections  65535;   # 每個進(jìn)程允許打開的并發(fā)連接數(shù)
 14 }
 17 http {
 18     include       mime.types;
 19     default_type  application/octet-stream;
 27     sendfile        on;
 28     tcp_nopush     on;   # 打開注釋
 31     keepalive_timeout  65;   # 打開注釋
 33     gzip  on;
 35     server {
 36         listen       80;   # 監(jiān)聽的端口
 37         server_name  localhost;   # 主機(jī)名或者IP(自行定義)
 39         charset utf-8;   # 字符集
 43         location / {
 44             root   /web;   # 根目錄戈毒,可以使用相對路徑(/usr/local/nginx)艰猬,也可以使用絕對路徑,去掉location{ }
45             index index.php index.html index.htm;    # 主頁文件
46         }
65         location ~ \.php$ {
 66         fastcgi_connect_timeout 300;
67         fastcgi_read_timeout 300;
68         fastcgi_send_timeout 300;
69         fastcgi_pass    unix:/var/run/fastcgi/fastcgi.socket;   # 對應(yīng)配置php-fpm.conf里的設(shè)置
70             fastcgi_index  index.php;
71             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;   # 把/scripts改成$document_root,表示家目錄下的.php文件也當(dāng)會以php來執(zhí)行埋市,否則可能出現(xiàn)白面
72             include        fastcgi.conf;
73         }

3. nginx相關(guān)命令

因為CentOs7使用systemd 來管理系統(tǒng)服務(wù)的姥宝,所以我們用主要命令systemctl來操作。以下 相關(guān)命令只需替換成nginx即可恐疲。(相對于其他安裝的系統(tǒng)服務(wù)也適用:firewall等)

systemd 是 Linux 下的一款系統(tǒng)和服務(wù)管理器腊满,兼容 SysV 和 LSB 的啟動腳本。systemd 的特性有:支持并行化任務(wù)培己;同一時候採用 socket 式與 D-Bus 總線式激活服務(wù)碳蛋;按需啟動守護(hù)進(jìn)程(daemon)。利用 Linux 的 cgroups 監(jiān)視進(jìn)程省咨;支持快照和系統(tǒng)恢復(fù)肃弟。維護(hù)掛載點(diǎn)和自己主動掛載點(diǎn)。各服務(wù)間基于依賴關(guān)系進(jìn)行精密控制零蓉。
檢視和控制systemd的主要命令是systemctl笤受。

馬上激活單元:
systemctl start <單元>

馬上停止單元:
systemctl stop <單元>

重新啟動單元:
systemctl restart <單元>

又一次載入配置:
systemctl reload <單元>

輸出單元執(zhí)行狀態(tài):
systemctl status <單元>

檢查單元是否配置為自己主動啟動:
systemctl is-enabled <單元>

開機(jī)自己主動激活單元:
systemctl enable <單元>

取消開機(jī)自己主動激活單元:
systemctl disable <單元>

禁用一個單元(禁用后,間接啟動也是不可能的):
systemctl mask <單元>

取消禁用一個單元:
systemctl unmask <單元>

顯示單元的手冊頁(必須由單元文件提供):
systemctl help <單元>

又一次載入 systemd敌蜂,掃描新的或有變動的單元:
systemctl daemon-reload

更多關(guān)于systemd 的信息請參考【https://www.cnblogs.com/lxjshuju/p/7183689.html

二箩兽、mysql安裝

tips:如果先安裝php,那么在編譯配置php一些配置項的時候關(guān)于mysql的一系列有關(guān)項會報錯章喉,需要重新編譯一次汗贫,所以在安裝php前先安裝mysql


提示mysql有關(guān)項需要重新編譯

1. 安裝MySQL依賴包

//查詢是否存在mysql
find / -name mysql
whereis mysql
//如果之前有安裝過mysql的話,先停止mysql后卸載
yum -y remove mariadb
yum -y remove mysql
rm -rf /usr/local/mysql
rm -rf /usr/src/mysql-5.7.18/
rm -rf /var/lib/mysql/
rm /etc/my.cnf
//安裝
yum –y install libevent* libtool* autoconf* libstd* ncurse* bison* openssl*
// MySQL 5.5之后的版本需要cmake(c語言編譯器)來進(jìn)行編譯安裝
yum -y install cmake

2. 安裝boost類庫

//MySQL 5.7 之后的版本秸脱,cmake編譯需要boost類庫
//下載  ps:整個過程十分漫長落包,我下了十幾分鐘。主要沒找到國內(nèi)鏡像摊唇,誰有找到評論告訴我下咐蝇。
wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
//解壓
tar zxvf boost_1_59_0.tar.gz -C /usr/local/
//重命名
mv /usr/local/boost_1_59_0/ /usr/local/boost/

3. 下載mysql包

wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.23.tar.gz
//解壓到/usr/src/目錄
tar zxvf mysql-5.7.23.tar.gz -C /usr/src/

4. 編譯安裝

//進(jìn)入編譯目錄
cd /usr/src/mysql-5.7.23/
//編譯
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql57 -DMYSQL_DATADIR=/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql57/mysql57.socket -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=/usr/local/boost
//安裝
make && make install
**cmake編譯配置參數(shù)說明:**
-DCMAKE_INSTALL_PREFIX=dir_name   # 安裝的主目錄
-DMYSQL_DATADIR=dir_name MySQL   # 文件目錄的路徑,這個參數(shù)也可以在啟動MySQL的時候帶上--datadir參數(shù)進(jìn)行設(shè)置
-DSYSCONFDIR=dir_name my.cnf   # 參數(shù)文件的路徑
-DWITH_INNOBASE_STORAGE_ENGINE=1   # 將INNODB存儲引擎編譯進(jìn)去
-DWITH_MYISAM_STORAGE_ENGINE=1   # 將INNODB存儲引擎編譯進(jìn)去
-DWITH_MEMORY_STORAGE_ENGINE=1   # 安裝memory存儲引擎
-DWITH_READLINE=bool   # 是否使用readline庫
-DMYSQL_UNIX_ADDR=file_name Unix socket   # 文件的路徑巷查,socket文件用于服務(wù)器監(jiān)聽連接有序,這個參數(shù)必須是絕對路徑
-DMYSQL_TCP_PORT=port_num   # 服務(wù)器監(jiān)聽TCP/IP連接的端口抹腿,默認(rèn)是3306
-DENABLED_LOCAL_INFILE=1   # 是否打開LOAD DATA INFILE的LOCAL參數(shù)
-DWITH_PARTITION_STORAGE_ENGINE=1   # 將分區(qū)存儲引擎編譯進(jìn)去
-DEXTRA_CHARSETS=all   # 安裝所有擴(kuò)展字符集
-DDEFAULT_CHARSET   # 字符集,默認(rèn)字符集是latin1
-DDEFAULT_COLLATION=collation_name   # 服務(wù)校對笔呀,默認(rèn)的是latin1_swedish_ci幢踏,可以通過SHOW COLLATION語句查看哪個校對匹配的字符集
-DWITH_BOOST   # boost類庫所在目錄
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1   # 將FEDERATED存儲引擎編譯進(jìn)去
-DWITH_BLACKHOLE_STORAGE_ENGINE=1   # 將BLACKHOLE存儲引擎編譯進(jìn)去
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1   # 不編譯EXAMPLE存儲引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1   # 將Performance Schema(性能視圖)存儲引擎編譯進(jìn)去
-DCOMPILATION_COMMENT=string   # 編譯環(huán)境描述
-DENABLED_PROFILING=bool   # 是否開啟profiling代碼的查詢(用于SHOW PROFILE and SHOW PROFILES語句)
-DWITH_EXTRA_CHARSETS=name   # 指定額外的字符集,默認(rèn)是all许师,包含所有的字符集房蝉。
-DINSTALL_BINDIR=dir_name   # 安裝用戶程序的路徑,默認(rèn)路徑是DCMAKE_INSTALL_PREFIX/bin
-DINSTALL_DOCDIR=dir_name   #安裝文檔的路徑,默認(rèn)路徑是DCMAKE_INSTALL_PREFIX/doc
-DINSTALL_INCLUDEDIR=dir_name   #安裝頭文件的路徑微渠,默認(rèn)路徑是DCMAKE_INSTALL_PREFIX/include
-DINSTALL_LIBDIR=dir_name   # 安裝庫文件的路徑搭幻,默認(rèn)路徑是DCMAKE_INSTALL_PREFIX/lib
-DINSTALL_MANDIR=dir_name   #安裝幫助手冊的路徑,默認(rèn)路徑是DCMAKE_INSTALL_PREFIX/man
-DINSTALL_PLUGINDIR=dir_name   # 安裝插件的路徑逞盆,默認(rèn)路徑是DCMAKE_INSTALL_PREFIX/lib/plugin
-DINSTALL_SBINDIR=dir_name   # 安裝mysqld服務(wù)端啟動腳本的路徑檀蹋,默認(rèn)路徑是DCMAKE_INSTALL_PREFIX/bin
-DINSTALL_SCRIPTDIR=dir_name   # 初始化MySQL數(shù)據(jù)庫的數(shù)據(jù)文件路徑的mysql_install_db腳本路徑,默認(rèn)路徑是DCMAKE_INSTALL_PREFIX/scripts
-DINSTALL_SQLBENCHDIR=dir_name   # 安裝sql-bench的路徑云芦,默認(rèn)路徑是DCMAKE_INSTALL_PREFIX
-DINSTALL_SUPPORTFILESDIR=dir_name   # 安裝支持文件的路徑俯逾,默認(rèn)路徑是DCMAKE_INSTALL_PREFIX/support-files
# 如若要編譯進(jìn)其它功能,如SSL等舅逸,則可使用類似如下選項來實(shí)現(xiàn)編譯時使用某庫或不使用某庫:
-DWITH_READLINE=1
-DWITH_SSL=system
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0

Ps:也許在編譯安裝的過程中桌肴,你們會遇到這樣的報錯:c++: internal compiler error: Killed (program cc1plus)
查詢原因是內(nèi)存不足引起的,服務(wù)器內(nèi)存才1G琉历。請參考【http://www.reibang.com/p/901399e0e44b】坠七。
沒遇到請?zhí)^。

5. 配置MySQL

由于上一步編譯安裝有部分目錄是提前設(shè)置的旗笔,但是服務(wù)器并沒有這些目錄彪置,所以需要手動創(chuàng)建這些目錄。比如DMYSQL_UNIX_ADDR=/var/lib/mysql57/mysql57.socket

//新增mysql用戶組
groupadd mysql
//新增mysql用戶
useradd -M -g mysql -s /sbin/nologin mysql
//如果用戶和用戶組已存在會報已存在

//配置my.cnf
vim /etc/my.cnf
# 修改為以下內(nèi)容蝇恶,其它全部刪掉
[mysqld]
port=3306
datadir=/data
pid-file=/var/run/mysql57/mysql57.pid
socket=/var/lib/mysql57/mysql57.socket
log-error=/var/log/mysql57/mysql57.log
user=mysql

[client]
socket=/var/lib/mysql57/mysql57.socket

這一步和編譯過程都用到了cmake中的-DMYSQL_DATADIR和-DMYSQL_UNIX_ADDR設(shè)置的路徑,現(xiàn)在就需要我們來創(chuàng)建這個目錄拳魁。

mkdir /data/
mkdir /var/lib/mysql57/
mkdir /var/run/mysql57
mkdir /var/log/mysql57/
//修改權(quán)限
chown -R mysql:mysql /usr/local/mysql57/  /data/  /var/lib/mysql57/  /var/log/mysql57/  /var/run/mysql57
//初始化設(shè)置
cd /usr/local/mysql57/
./bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57/  --datadir=/data/
/usr/local/mysql57/support-files/mysql.server start
//每次使用mysql服務(wù)相關(guān)命令需要 加一長串或者cs到這個server所在目錄,操作不便艘包,所以才有了下一步

6. 設(shè)置MySQL為系統(tǒng)服務(wù)

//新增編輯linux中systemd文件
vim /lib/systemd/system/mysql57.service
//打開為空

# 添加文件內(nèi)容如下:
[Unit]
Description=mysql
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/mysql57/support-files/mysql.server start
ExecStop=/usr/local/mysql57/support-files/mysql.server stop
ExecRestart=/usr/local/mysql57/support-files/mysql.server restart
ExecReload=/usr/local/mysql57/support-files/mysql.server reload
PrivateTmp=true

[Install]
WantedBy=multi-user.target

7. 開機(jī)啟動的猛、啟動服務(wù)

具體命令請參照本篇 《一、nginx的安裝 中 3. nginx相關(guān)命令》想虎,在centos7中命令大乎于此

systemctl enable mysql57.service

8. mysql數(shù)據(jù)庫配置相關(guān)命令

//更改密碼
/usr/local/mysql57/bin/mysql
mysql> update mysql.user set authentication_string=password('root') where user='root' and host = 'localhost';
Query OK, 1 row affected, 1 warning (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

以上是直接使用mysql所在目錄連接。此時使用mysql -u root會發(fā)現(xiàn)有報錯-bash: mysql: command not found叛拷。
這是由于系統(tǒng)默認(rèn)會查找/usr/bin下的命令舌厨,如果這個命令不在這個目錄下,當(dāng)然會找不到命令忿薇,我們需要做的就是映射一個鏈接到/usr/bin目錄下裙椭,相當(dāng)于建立一個快捷方式躏哩。

 cd /usr/local/bin
 ln -fs /usr/local/mysql57/bin/mysql mysql

還有其它常用命令mysqladmin、mysqldump等不可用時候都可按用此方法解決

常用命令

  1. create schema [數(shù)據(jù)庫名稱] default character set utf8 collate utf8_general_ci;--創(chuàng)建數(shù)據(jù)庫

采用create schema和create database創(chuàng)建數(shù)據(jù)庫的效果一樣扫尺。

  1. create user '[用戶名稱]'@'%' identified by '[用戶密碼]';--創(chuàng)建用戶

密碼8位以上姑曙,包括:大寫字母啼染、小寫字母、數(shù)字、特殊字符

%:匹配所有主機(jī)粗梭,該地方還可以設(shè)置成‘localhost’,代表只能本地訪問,例如root賬戶默認(rèn)為‘localhost‘

數(shù)據(jù)庫中密碼策略有不同這里也許會報錯
Your password does not satisfy the current policy requirements
可以改變自己的密碼策略(具體方法網(wǎng)上可以搜到)

  1. grant select,insert,update,delete,create on [數(shù)據(jù)庫名稱].* to [用戶名稱];--用戶授權(quán)數(shù)據(jù)庫
    grant all on [數(shù)據(jù)庫名稱].* to [用戶名稱];--全部權(quán)限
    grant all privileges on [數(shù)據(jù)庫名稱].* to '[用戶名稱]'@'%';
    *代表整個數(shù)據(jù)庫

  2. flush privileges ;--立即啟用修改

  3. revoke all on . from tester;--取消用戶所有數(shù)據(jù)庫(表)的所有權(quán)限

  4. delete from mysql.user where user='tester';--刪除用戶

  5. drop database [schema名稱|數(shù)據(jù)庫名稱];--刪除數(shù)據(jù)庫

9. 使用navicate連接

端口3306默認(rèn)是不向外部開放边酒,一般root用戶不要開啟外界訪問權(quán)限氓涣,新建多個用戶分配不同的權(quán)限即可
防火墻iptables得開啟請參考我寫的另一篇文章https://blog.csdn.net/qq_37246351/article/details/88313418

三赴背、PHP安裝

1. 下載php依賴包

yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel

2. 下載php壓縮包解壓

wget http://cn2.php.net/distributions/php-7.2.5.tar.gz
tar zxvf php-7.2.5.tar.gz -C /usr/src/
龜速下載中

3. 編譯安裝

//進(jìn)入解壓目錄
cd /usr/src/php-7.2.5/
//編譯一大堆
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-config-file-scan-dir=/usr/local/php/etc/php.d --with-mysqli=/usr/local/mysql57/bin/mysql_config --with-iconv-dir=/usr/local --enable-mysqlnd --with-pdo-mysql=/usr/local/mysql57 --with-pcre-dir=/usr/local/ --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-gd --with-iconv --with-zlib --with-libxml-dir=/usr --enable-xml --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-ftp --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache --enable-bcmath
//安裝
make && make install

4. 配置php-fpm

php-fpm即php-Fastcgi Process Manager.
php-fpm是 FastCGI 的實(shí)現(xiàn),并提供了進(jìn)程管理的功能沉御。
進(jìn)程包含 master 進(jìn)程和 worker 進(jìn)程兩種進(jìn)程试疙。
master 進(jìn)程只有一個,負(fù)責(zé)監(jiān)聽端口祝旷,接收來自 Web Server 的請求非春,而 worker 進(jìn)程則一般有多個(具體數(shù)量根據(jù)實(shí)際需要配置)柱徙,每個進(jìn)程內(nèi)部都嵌入了一個 PHP 解釋器缓屠,是 PHP 代碼真正執(zhí)行的地方奇昙。
php-fpm工作原理:
www.example.com
|
|
Nginx
|
|
路由到www.example.com/index.php
|
|
加載nginx的fast-cgi模塊
|
|
fast-cgi監(jiān)聽127.0.0.1:9000地址
|
|
www.example.com/index.php請求到達(dá)127.0.0.1:9000
|
|
php-fpm 監(jiān)聽127.0.0.1:9000
|
|
php-fpm 接收到請求,啟用worker進(jìn)程處理請求
|
|
php-fpm 處理完請求敌完,返回給nginx
|
|
nginx將結(jié)果通過http返回給瀏覽器

# sysconfigdir參數(shù)決定的(因為储耐,指定安裝路徑為/usr/local/php,所以就要拷到/usr/local/php/etc/目錄下)
cp /usr/src/php-7.2.5/php.ini-development /usr/local/php/etc/php.ini
vim /usr/local/php/etc/php.ini
# 修改以下內(nèi)容
1013 pdo_mysql.default_socket=/var/lib/mysql57/mysql57.socket  # 對應(yīng)的socket文件地址
1154 mysqli.default_port = 3306  # 改成對應(yīng)的MySQL的端口
1159 mysqli.default_socket = /var/lib/mysql57/mysql57.socket  # 對應(yīng)的socket文件地址

//配置php-fpm配置文件(配置fastcgi)
# 先改名滨溉,把.default去掉
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

vim /usr/local/php/etc/php-fpm.d/www.conf
# 修改以下內(nèi)容什湘,并把注釋“;”去掉
23 user = www-data
24 group = www-data
36 listen = /var/run/fastcgi/fastcgi.socket
47 listen.owner = www-data
48 listen.group = www-data
49 listen.mode = 0660
113 pm.max_children = 64
118 pm.start_servers = 20
123 pm.min_spare_servers = 5
128 pm.max_spare_servers = 35
139 pm.max_requests = 3000
344 rlimit_files = 65535
420 php_flag[display_errors] = on

//給這個文件權(quán)限'/var/run/fastcgi/fastcgi.socket'
groupadd www-data
useradd -M -g www-data -s /sbin/nologin www-data
mkdir /var/run/fastcgi
chown -R nginx.nginx /var/run/fastcgi/

5. php-fpm的相關(guān)命令(啟動晦攒,停止)

/usr/local/php/sbin/php-fpm
//啟動過后闽撤,就可以在/var/run/fastcgi/目錄下找到socket文件
ll /var/run/fastcgi/
//文件信息如下:
total 0
srw-rw---- 1 www-data www-data 0 Mar 18 14:32 fastcgi.socket
//查看相關(guān)進(jìn)程
ps -ef | grep fpm
//由于我們配置的是20個進(jìn)程,所以當(dāng)前總量為20
root     22815     1  0 14:32 ?        00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www-data 22816 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22817 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22818 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22819 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22820 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22821 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22822 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22823 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22824 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22825 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22826 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22827 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22828 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22829 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22830 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22831 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22832 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22833 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22834 22815  0 14:32 ?        00:00:00 php-fpm: pool www
www-data 22835 22815  0 14:32 ?        00:00:00 php-fpm: pool www
root     23405 12811  0 14:42 pts/0    00:00:00 grep --color=auto fpm

//終止php-fpm
pkill php-fpm

6. 設(shè)置php-fpm為系統(tǒng)服務(wù)脯颜、開機(jī)啟動

vim /etc/systemd/system/php-fpm.service
//添加文件內(nèi)容如下:
[Unit]
Description=php-fpm
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
PrivateTmp=True

[Install]
WantedBy=multi-user.target

systemctl enable php-fpm.service
systemctl start php-fpm.service
//如果啟動失敗報錯哟旗,可嘗試使用pkill php-fpm 關(guān)閉再啟動

四、總結(jié)

總的來說栋操,安裝過程無非都是先yum安裝擴(kuò)展包闸餐,wget下載安裝包,tar解壓到/usr/src/矾芙,進(jìn)入安裝目錄舍沙,編譯配置項,make && make install進(jìn)行安裝剔宪。大多離不開這幾步拂铡。
使用CentOs7要求能了解systemctl 命令,對服務(wù)進(jìn)行重啟葱绒,熱加載配置文件等操作感帅。
配置mysql數(shù)據(jù)庫能學(xué)習(xí)怎么添加用戶組,添加用戶哈街,給用戶分配權(quán)限等操作留瞳。
至此,一次源碼安裝服務(wù)器環(huán)境的總過程結(jié)束了骚秦。文中大部分安裝指令是博主多方考究她倘,結(jié)合實(shí)際,整理出來作箍,并非攻略教學(xué)硬梁。只是記錄自己一次安裝經(jīng)歷,供以后自己或者有同樣問題的道友提供幫助胞得。如果有錯或者侵權(quán)忘請指出荧止,留言評論我都會看到。

【參考】
https://blog.51cto.com/13525470/2117048
https://www.cnblogs.com/zoulongbin/p/6287167.html
https://segmentfault.com/a/1190000000375848
https://www.cnblogs.com/liujuncm5/p/6713784.html
https://www.cnblogs.com/lxjshuju/p/7183689.html
https://blog.csdn.net/u012498149/article/details/78772058
https://www.cnblogs.com/jr1260/p/6590860.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市跃巡,隨后出現(xiàn)的幾起案子危号,更是在濱河造成了極大的恐慌,老刑警劉巖素邪,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件外莲,死亡現(xiàn)場離奇詭異,居然都是意外死亡兔朦,警方通過查閱死者的電腦和手機(jī)偷线,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沽甥,“玉大人声邦,你說我怎么就攤上這事“谥郏” “怎么了亥曹?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盏檐。 經(jīng)常有香客問我歇式,道長,這世上最難降的妖魔是什么胡野? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任材失,我火速辦了婚禮,結(jié)果婚禮上硫豆,老公的妹妹穿的比我還像新娘龙巨。我一直安慰自己,他們只是感情好熊响,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布旨别。 她就那樣靜靜地躺著,像睡著了一般汗茄。 火紅的嫁衣襯著肌膚如雪秸弛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天洪碳,我揣著相機(jī)與錄音递览,去河邊找鬼。 笑死瞳腌,一個胖子當(dāng)著我的面吹牛绞铃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嫂侍,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼儿捧,長吁一口氣:“原來是場噩夢啊……” “哼荚坞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起菲盾,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤颓影,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亿汞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞭空,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年疗我,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片南捂。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吴裤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出溺健,到底是詐尸還是另有隱情麦牺,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布鞭缭,位于F島的核電站剖膳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏岭辣。R本人自食惡果不足惜吱晒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沦童。 院中可真熱鬧仑濒,春花似錦、人聲如沸偷遗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氏豌。三九已至喉酌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泵喘,已是汗流浹背泪电。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涣旨,地道東北人歪架。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像霹陡,于是被迫代替她去往敵國和親和蚪。 傳聞我的和親對象是個殘疾皇子止状,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容