1. 程式人生 > >PHP全棧工程師實戰經驗(運維篇)

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 phpwhich php 都沒有資訊。我們需要查詢 whereis php71which 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 掉的程序。