如果在開發過程或者部署程式碼用的不是 PaaS ,那麼就必須先配置 VPS 伺服器或其他伺服器資源,使其支援執行 PHP 應用。文章採用舊電腦安裝 Ubuntu-16.04.4-desktop.amd64,並使用另外一臺電腦遠端登入,模擬實際場景,配置 Nginx + PHP-FPM.
約定
- 裝有 ubuntu 環境的電腦,下文稱為伺服器。另外一臺電腦稱為本機。
- 伺服器 環境下的命令列提示為
$
,在本機的 命令列提示使用>
題外話
在這裡之所以採用 desktop
版本而不是 server
版本,原因是安裝失敗。在這裡留一個快速通道,以便我後續
解決時,可以從這裡傳送。
ubuntu 的硬體引數
- 型號:聯想 z480 i5
- 記憶體:8GB
- 硬碟:ATA 128G SSD
- 安裝方法:U盤啟動盤安裝
安裝語言需要選擇英語,否則在後續
安裝系統
這個步驟會出現一個 busybox 的安裝失敗錯誤。
amd64
amd64 版本問題主要出現在無法讀取光碟的資料,根據提示與資料查閱,目前還不能解決問題。
- 嘗試一 : 使用 Win32 Disk Image 等燒錄工具代替 軟碟通,並換新的U盤。
- 嘗試二 : 嘗試手動掛載映象檔案到
/cdrom
,並使用 md5 校驗映象完整性。 - 嘗試三 :使用
grubinst
,並從官網手動下載引導。 - 嘗試四 :使用指令碼檔案,修改映象。
i386 安裝成功但是其中出了問題,安裝應用的時候找不到驅動器,雖然這個好修復,但強迫症的我,還是拋棄了32 位,如果有好的安裝 64 位方法,請一定要告訴我,我會非常感謝你的。
相關資源:
登入
如果使用 VPS 伺服器的讀者,可以跳過此步驟,購買空間時,就已經安裝好 SSH 服務。此步驟是為了建立登入使用者,配置使其支援遠端登入。
安裝 Openssh
$ apt-get update
$ apt-get upgrade
$ apt-get install openssh-server
建立非根使用者
根使用者擁有最高的許可權,能夠執行任何可以執行的命令。我們應該儘量避免別人使用根使用者賬號進行遠端登入。
$ adduser deploy // 建立賬號
$ usermod -a -G sudo deploy // 加入sudo 使用者組
$ passwd deploy // 設定使用者密碼
配置SSH
修改配置檔案,禁用根使用者登入,允許指定使用者,並指定埠。
$ vim /etc/ssh/sshd_config
# 在檔案末尾新增以下幾行
Port 22
PermitRootLogin no
AllowUsers deploy
$ service sshd restart
如果對安全性有更高的要求,可以使用 ssh 金鑰對認證,通過驗證客戶端證照,免密登入,防止密碼的暴力破解。
登入
檢視伺服器地址 ip ,就可以遠端登入,當然在這之前確保防火牆是否有攔掉該埠,這是一個好習慣。
···
ssh deploy@192.168.1.150
···
安裝PHP-FPM
php-fpm 是程式管理軟體,用於接收和處理來自 web 伺服器的請求。每個程式存在的時間比單個 HTTP 請求,可以處理更多的請求。關於為什麼使用 php-fpm ,請點選 [傳送門]()
安裝
> sudo apt-get install python-software-properties // 安裝軟體擴充套件包的工具
> sudo add-apt-repository ppa:ondrej/php // 安裝PHP 7.2 的源,ppa 是ubuntu 系統裡的個人軟體源
> sudo apt-get update
> sudo apt install php7.2-fpm php7.2-mysql php7.2-curl php7.2-gd php7.2-mbstring php7.2-xml php7.2-xmlrpc php7.2-zip php7.2-opcache -y
> sudo sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php/7.2/fpm/php.ini
在 ubuntu 16 中,建議可以用 apt 代替 apt-get,apt 比起 apt-get 有高亮 和進度條的功能,其他基本一致,最後一條命令列是為了支援 php-fpm 在呼叫時可支援 pathinfo 路由特性。
配置
如果你想讓失效的子程式超過 一定的數量 就重啟 php-fpm 你可以這樣設定
> sudo vi sudo vi /etc/php/7.2/fpm/php-fpm.conf
// 修改以下選項
emergency_restart_threhold = 100 // 100個子程式失效
emergency_restart_ubterval = 5m // 指定五分鐘
根據我們的業務配置程式池
> sudo vi sudo vi /etc/php/7.2/fpm/pool.d/www.conf
// 這裡的配置主要是
user = deploy
group = deploy
listen = 127.0.0.1:8000
pm.max_children = 20
更多詳細配置,就不在再描述,需要根據我們的應用設計來配置
$ sudo service php7.2-fpm restart
Nginx
在效能調優這塊, Nginx
+ php-fpm
常常被用來優化 php 。
安裝
> sudo apt install nginx
虛擬主機
- 建立 web 可訪問的目錄,切記前面我們用了deploy 進行設定 php-fpm,所以目錄的所有者應該是 deploy
-
新增虛擬主機的配置檔案
server { listen 80; server_name example.com; index index.php; client_max_body_size 50M; error_log /home/liaobw/apps/logs/example.error.log; access_log /home/liaobw/apps/logs/example.access.log; root /home/liaobw/apps/example.com/current/public; location / { try_files $uri $uri /index.php$is_args$args; } location ~ \.php { try_files $uri = 404; fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_index index.php; fastcgi_pass 127.0.0.1:8000; } }
重啟服務
> sudo service nginx restart
結束語
由此,nginx 結合 php-fpm 的執行模式就大功告成啦