概括
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模塊
編譯安裝
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
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等不可用時候都可按用此方法解決
常用命令
- create schema [數(shù)據(jù)庫名稱] default character set utf8 collate utf8_general_ci;--創(chuàng)建數(shù)據(jù)庫
采用create schema和create database創(chuàng)建數(shù)據(jù)庫的效果一樣扫尺。
- 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)上可以搜到)
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ù)庫flush privileges ;--立即啟用修改
revoke all on . from tester;--取消用戶所有數(shù)據(jù)庫(表)的所有權(quán)限
delete from mysql.user where user='tester';--刪除用戶
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