PHP全棧工程師實戰經驗(運維篇)
php工程師在工作中經常遇到環境配置問題,本文主要通過Centos7 中的yum對環境Nginx+Php+MySQL環境的搭建與配置,希望給看到這篇文章的同學節省一些時間。同時也能為還不清楚如何搭建環境的同學提供一個搭建的思路。文章中的技術要點不是很全面,可根據思路自己拓展技術點。
PHP全棧工程師實戰經驗(運維篇)
linux伺服器(CentOS 7)
檢視IP地址
ip addr
新安裝好的 Centos7 系統用上面的命令檢視ip地址,先用ssh [email protected]地址的+輸入密碼的方式登入
SSH 免密登入
ssh-keygen -t rsa
在home目錄下執行 ssh-keygen -t rsa
一路回車,在home/root 下生成了 .ssh 資料夾。目錄下有 id_rsa id_rsa.pub 兩個檔案。實現免密登入需要本地的公鑰放在伺服器上的 authorized_keys 檔案中。如果.ssh 目錄下沒有 authorized_keys 檔案手動建立一個。注意 authorized_keys 檔案的許可權必須是600,如果許可權不對會影響登入。
touch authorized_keys
chmod 600 authorized_keys
我以我自己的電腦操作,在本地機的home下和伺服器上同樣的操作執行 ssh-keygen -t rsa
一路回車,也生成id_rsa id_rsa.pub 兩個檔案。
將本地的 id_rsa.pub
檔案中的內容複製到伺服器上的 authorized_keys 檔案中。
此時,exit 在本地退出伺服器的 ssh 連線。再執行 ssh [email protected] 地址登入已不需要輸入密碼。
如果還覺得比較麻煩可以在本地 .ssh 目錄下建立一個 config 檔案。配置如下:
# Host 自定義連線伺服器名稱
Host Serv5
# HostName 連線伺服器IP
HostName 10.211.55.34
# Port 伺服器 ssh 對外開放的埠
Port 22
# 登入伺服器的使用者
User root
# 本地伺服器金鑰檔案地址
IdentityFile ~/.ssh/id_rsa
我們只需要在本地執行 ssh Serv5
便可登入遠端伺服器
檢視linux是什麼作業系統
cat /etc/redhat-release
yum管理
當我們想查詢是否有 php71 軟體包的時候,我們會執行 yum search php71
,此時得到的結果也許是 警告:沒有匹配 php71 的軟體包
。所有我們第一件事要做的就是軟體包的升級。
軟體包倉庫升級
安裝 epel-release 已是最新版本無須任何處理,但還是找不到 php71 的軟體包
yum install -y epel-release
Nginx安裝源:rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
PHP安裝源: rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
執行 yum makecache
將伺服器軟體資訊儲存在本地,提高搜尋安裝效率。
搜尋php71相關的軟體包 yum search php71
Nginx
安裝
新安裝的系統沒有yum倉庫映象來安裝nginx,會有如下提示:
預設情況Centos7中沒有Nginx的安裝源,Nginx官網提供了Centos的源地址:
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
執行完上面的新增源命令,在執行yum install -y nginx
便會安裝。下圖便是nginx的安裝目錄和版本資訊。
管理nginx服務
# 開機啟動
systemctl enable nginx.service
# 開啟
systemctl start nginx.service
# 停止
systemctl stop nginx.service
# 重啟
systemctl restart nginx.service
# 平滑重啟
systemctl reload nginx.service
啟動nginx伺服器
此時我們在瀏覽器中訪問伺服器的ip,無法訪問。是應為伺服器防火牆開啟且沒有開放80埠。
Nginx 自定義Server
nginx -t
檢視 nginx 的配置問題
進入 /etc/nginx/conf.d
複製 default.conf 為 myhost.conf
配置 myhost.conf
本地配置hosts指向伺服器IP,10.211.55.35 www.myhost.me
這是瀏覽器訪問 www.myhost.me 應該能能訪問nginx歡迎頁。然而頁面提示 403
403 Forbidden 參考資料:https://blog.csdn.net/onlysunnyboy/article/details/75270533
如何訪問PHP檔案
按照下面的php部分安裝成功並啟動php-fpm服務後配置:開啟紅框部分程式碼。便訪問成功。
root /workspace/myhost
被定義了兩次,所以可以將兩處合併到最上面的紅色字型部分。
訪問效果:
防火牆 firewalld
# 新增埠 --permanent永久生效,沒有此引數重啟後失效
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 重新載入
firewall-cmd --reload
開放 80 埠重新載入防火牆配置規則,再重新整理瀏覽器成功訪問。
CentOS7防火牆參考資料:https://blog.csdn.net/simplexingfupeng/article/details/84561290
MySQL
安裝
參考資料:https://blog.csdn.net/simplexingfupeng/article/details/84580511
php
檢視 php 命令位置
都沒有找到php的安裝位置,進行安裝
php71 yum源
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
安裝
執行 yum install -y php71
安裝完成之後我們執行 whereis php
和 which php
都沒有資訊。我們需要查詢 whereis php71
和 which php71
的資訊。
php 版本資訊
php71 -v
我們每次都需要執行 php71 然後加引數,我們可以加一個連結後用 php -v
檢視 php 版本。
php 版本切換
https://blog.csdn.net/simplexingfupeng/article/details/79456166
php 配置檔案問題
php --ini
紅框框起來的便是 php 的配置檔案
安裝 php-fpm
yum search php71
查到 fpm 資訊並執行命令 yum install -y php71-php-fpm
安裝
執行 yum install -y php71-php-fpm
並安裝成功
php 服務管理
啟動php服務 :systemctl start php71-php-fpm
停止php服務 :systemctl stop php71-php-fpm
重啟php服務 :systemctl restart php71-php-fpm
檢視php程序 :ps -ef | grep php
php 擴充套件安裝
以 swoole 擴充套件為例:
查詢 yum search php71 | grep swoole
安裝 yum install -y php71-php-pecl-swoole
檢視擴充套件是否安裝 php -m | grep swoole
安裝 redis gd bcmath 等擴充套件都是按照此方法安裝。
php 連線資料庫並查詢資料庫資料
安裝 php-mysql 擴充套件
yum install -y php71-php-pecl-mysql
# 重啟php服務
systemctl restart php71-php-fpm
程式碼實踐:https://blog.csdn.net/simplexingfupeng/article/details/84583650
按關鍵字批量殺死程序
在伺服器上操作上,如果我們要停止伺服器的程序,只需執行 php 服務管理中的停止 php 服務即可。假如我們又開啟了 php-WebSocket 程序伺服器。按照 swoole 官網的文件新建swoole服務。
<?php
$server = new swoole_websocket_server("127.0.0.1", 9502);
$server->on('open', function($server, $req) {
echo "connection open: {$req->fd}\n";
});
$server->on('message', function($server, $frame) {
echo "received message: {$frame->data}\n";
$server->push($frame->fd, json_encode(["hello", "world"]));
});
$server->on('close', function($server, $fd) {
echo "connection close: {$fd}\n";
});
$server->start();
在任意位置新建 swoole-server.php 檔案
後臺啟動服務 php swoole-server.php &
檢視swoole服務程序 ps -ef | grep php
此時我們看到 php 的 swoole-server.php 程序。加入我們按照停止php伺服器的方式停止我們看一下截圖:
php 程序被殺死了,swoole-server.php 服務還在,完全沒有按照我們的設想結束程序。我們再重新啟動php服務。
當然我們可以根據程序號 id 一個一個 kill 掉。這裡主要說明按照關鍵字批量殺死程序。
根據上圖我們連續執行的一系列的命令,進行說明。
# 檢視 php 的程序
ps -ef | grep php
# 檢視 swoole 的程序
ps -ef | grep swoole
# 檢視 swoole 的程序並排除 grep 執行的程序
ps -ef | grep swoole | grep -v grep
# 列印要殺死的程序id
ps -ef | grep swoole | grep -v grep | awk '{print "kill -9 " $2}'
# 殺死指定程序
ps -ef | grep swoole | grep -v grep | awk '{print "kill -9 " $2}'|sh
# 檢視 swoole 的程序並排除 grep 執行的程序
ps -ef | grep swoole | grep -v grep
# 檢視 swoole 的程序
ps -ef | grep swoole
# 檢視 php 的程序
ps -ef | grep php
命令執行完畢後我們能夠分析出,swoole 程序已被全部殺死,php程序正常執行。真正操作中,只需執行中間最長的一行程式碼,把 swoole 換成你想 kill 掉的程序。