配置應用伺服器

Bevis發表於2018-08-06

如果在開發過程或者部署程式碼用的不是 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

虛擬主機

  1. 建立 web 可訪問的目錄,切記前面我們用了deploy 進行設定 php-fpm,所以目錄的所有者應該是 deploy
  2. 新增虛擬主機的配置檔案

    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 的執行模式就大功告成啦

相關文章