1. 程式人生 > >如何在Ubuntu16.04 中安裝Linux, Nginx, MySQL, PHP (LEMP 棧)

如何在Ubuntu16.04 中安裝Linux, Nginx, MySQL, PHP (LEMP 棧)

介紹

LEMP 棧是用來開發動態網頁和web 應用程式的一系列軟體集合,LEMP描述的是Linux作業系統,Nginx web 伺服器,以及後端資料儲存MySQL/MariaDB資料庫和伺服器端動態指令碼語言PHP.

在此教程中,我們將會演示如何在Ubuntu 16.04 伺服器中安裝一個完整的LEMP棧。首先你需要一個執行良好的Ubuntu作業系統,我採用了在虛擬機器VirtualBox中安裝的Ubuntu 16.04 LTS系統。下面,我來介紹其他元件如何安裝和配置。


前置條件

在完成本教程之前,你應該在Ubuntu系統中具有的常規的非root賬戶,以及'sudo'許可權。您可以通過學習一下教程

使用Ubuntu 16.04伺服器的的初始化設定.瞭解如何設定此型別的賬戶。

在您的普通使用者賬戶可用後,使用此賬戶登入您的伺服器。現在來開始跟著本教程的步驟開始吧!


Step 1: 安裝Nginx web 伺服器

為了向我們的網站訪問者顯示網頁,我們將使用Nginx,一個現代化,高效的網路伺服器。我們在安裝LEMP棧中用到的所有元件均來自Ubuntu的預設軟體包儲存庫。這意味著我們可以使用 apt 軟體包管理套件來完成所有安裝。

因為這是我們第一次在這個會話中使用apt,所以我們應該首先更新我們的本地包索引。然後再安裝伺服器:


sudo apt-get update
sudo apt-get install nginx

在Ubuntu 16.04上,Nginx在安裝時開始執行配置。

如果您有正在執行的 ufw 防火牆,正如我們初始設定教程所說,您必須允許它連線到Nginx。因為Nginx在安裝時註冊自己的ufw,所以安裝程式相當簡單。

建議您啟用執行所需的最嚴格的配置檔案。由於我們尚未為我們的伺服器配置SSL,因此在本教程中,我們只需要允許埠80上的連線。

您可以通過鍵入以下命令啟用此功能:


sudo ufw allow 'Nginx HTTP'

您可以通過鍵入以下命令來驗證更改:


sudo ufw status

您應該在顯示的輸出中看到允許的HTTP連線:


Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

在新增新的防火牆規則後,您可以通過在Web瀏覽器中訪問伺服器的域名或公共IP地址來測試伺服器是否已啟動並正在執行。

如果您還沒有指定您的伺服器域名,並且您不知道您的伺服器的公共IP地址,您可以通過在終端中鍵入以下內容之一找到它:


ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

這將打印出幾個IP地址,您可以在您的瀏覽器中依次嘗試每個IP。或者,您可以檢查從網際網路上的其他位置檢視哪個IP地址是可訪問的:


#eg. to access baidu.com
curl -4 www.baidu.com

鍵入您的公網IP地址或者域名,它應該帶你到Nginx的預設登陸頁面:


http://server_domain_or_IP

//以下兩個地址是在本地執行時
http://localhost/

http://127.0.0.1/

如果您看到了如上圖的頁面,您就已經成功安裝了Nginx 伺服器了。


Step 2: 安裝MySQL 資料庫

現在我們已經有了一個Web伺服器,我們需要安裝MySQL,一個數據庫管理系統,用來儲存和管理我們網站的資料。
您可以通過鍵入以下命令輕鬆安裝:


sudo apt-get install mysql-server

您將被要求提供root(管理員)密碼以在MySQL系統中使用。MySQL資料庫軟體現已安裝完成後,但其配置尚未完全完成。
為了確保安裝,我們可以執行一個簡單的安全指令碼,詢問我們是否要修改一些不安全的預設值。通過鍵入開始指令碼:


sudo mysql_secure_installation

接下來將要求您輸入為MySQL root帳戶設定的密碼。然後,將詢問您是否想要配置 VALIDATE PASSWORD PLUGIN。

<span style="background-color: #fedee1;white-space: normal;display: block;padding: 13px 17px;">
Warning: Enabling this feature is something of a judgment call. If enabled, passwords which don't match the specified criteria will be rejected by MySQL with an error. This will cause issues if you use a weak password in conjunction with software which automatically configures MySQL user credentials, such as the Ubuntu packages for phpMyAdmin. It is safe to leave validation disabled, but you should always use strong, unique passwords for database credentials.
</span>

鍵入y 同意,或者鍵入任意其他鍵則取消呼叫.


VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

如果您啟用驗證,系統會要求您選擇一個級別的密碼驗證. 注意,如果輸入2,則是最強的級別,當您嘗試設定不包含數字,大寫和小寫字母,特殊字元或基於常用字典單詞的任何密碼時,您將收到錯誤。


There are three levels of password validation policy:

LOW    Length &gt;= 8
MEDIUM Length &gt;= 8, numeric, mixed case, and special characters
STRONG Length &gt;= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

如果啟用了密碼驗證,則會顯示現有root密碼的密碼強度,並詢問您是否要更改該密碼。如果您不想更改當前root密碼,請在提示符處輸入n表示“否”:


Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

對於其餘的問題,您只要按Y就行了,並在每個提示符下按Enter鍵。這將刪除一些匿名使用者和測試資料庫,禁用遠端根登入,並載入這些新規則,以便MySQL立即啟用這些我們所做的更改。

此時,您的資料庫系統現已設定完成。


Step 3: 安裝PHP

我們現在安裝了Nginx來訪問我們的頁面,安裝了MySQL用啦儲存和管理我們的資料。但是,我們還沒有任何可以生成動態內容的東西。我們可以使用PHP完成生成動態頁面的功能。

由於Nginx不包含本地PHP處理,像其他一些Web伺服器一樣,我們需要安裝php-fpm,它代表"fastCGI process manager"。我們通過配置Nginx使它可以將PHP請求傳遞給 php-fpm 進行處理。

我們安裝php-fpm 這個元件,並且還將獲得一個額外的幫助包,它將允許PHP與我們的資料庫後端進行通訊。安裝將提取必要的PHP核心檔案。通過鍵入以下命令執行此安裝操作:


sudo apt-get install php-fpm php-mysql
配置PHP環境



我們現在已經安裝了PHP元件,但我們需要進行一些小的配置更改,以使我們的環境更安全。

使用root許可權開啟主php-fpm配置檔案:


sudo vim /etc/php/7.0/fpm/php.ini

我們在這個檔案中尋找的是叫做cgi.fix_pathinfo的配置。這將使用分號(;)註釋掉,預設設定為"1",並被分號(;)註釋掉了。

這是一個非常不安全的設定,因為它告訴PHP,如果PHP請求找不到所需的檔案,它將會嘗試執行最近的檔案。基本上,這將允許使用者以某種方式模擬PHP請求去執行哪些本不該被執行的PHP指令碼。

我們將通過取消註釋行並將其設定為"0"來更改這個條件,如下所示:

<span style="text-align:center;display:block;padding:8px 15px;margin-bottom: -40px;background-color: #e5e5e5;">/etc/php/7.0/fpm/php.ini
</span>


cgi.fix_pathinfo=0

儲存並在完成後關閉檔案。現在,我們只需要重新啟動PHP處理器:


sudo systemctl restart php7.0-fpm

重啟後PHP服務將會接受我們所做的改變。

Step 4: 配置Nginx伺服器使用PHP

現在,我們安裝了所有必需的元件。唯一需要的配置是告訴Nginx去使用PHP服務處理PHP檔案。

我們在伺服器塊級別上執行此操作(伺服器塊類似於Apache的虛擬主機)。通過鍵入以下命令開啟預設的Nginx伺服器塊配置檔案:


sudo vim /etc/nginx/sites-available/default

當前,開啟default檔案後,去掉所有註釋,預設Nginx伺服器塊檔案看起來像這樣:
<span style="text-align:center;display:block;padding:8px 15px;margin-bottom: -40px;background-color: #e5e5e5;">/etc/nginx/sites-available/default
</span>


server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
}

我們需要對這些檔案做一些更改。

  • 首先,我們需要新增index.php作為index指令的第一個值,以便在請求設定的目錄時可以訪問index.php
  • 修改server_name指令以指向我們伺服器的域名或者公共IP地址。
  • 對於處理PHP請求,我們只需要取消位於location ~.php$處的程式碼段的註釋即可,它包括fastcgi-php.conf,以及和PHP-fpm關聯的介面。
  • 我們還將取消用於處理*.htaccees檔案的程式碼註釋。Nginx伺服器不負責處理這些檔案,如果這些檔案碰巧進入文件根目錄,它們不會被提供給訪問者。

您需要所做的更改位於下面被[[]]包裹的程式碼:
<span style="text-align:center;display:block;padding:8px 15px;margin-bottom: -40px;background-color: #e5e5e5;">/etc/nginx/sites-available/default
</span>


server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index [[index.php]] index.html index.htm index.nginx-debian.html;

    server_name [[server_domain_or_IP]];

    location / {
        try_files $uri $uri/ =404;
    }

    [[location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }]]

    [[location ~ /\.ht {
        deny all;
    }]]
}

當您進行上述更改後,就可以儲存並關閉檔案。

鍵入以下命令以測試配置檔案是否有語法錯誤:


sudo nginx -t

如果報告了任何錯誤,請返回並重新檢查您的檔案,然後再繼續。

當你準備好,重新載入Nginx接受上述所做的更改:


sudo systemctl reload nginx

Step 5: 建立PHP檔案測試配置

您的LEMP堆疊現在應該完全設定。我們可以通過測試它來驗證Nginx是否可以正確地將.php檔案移交給我們的PHP處理器來處理。

在我們的文件根目錄中建立一個名稱為info.php測試檔案。
在文字編輯器中的文件根目錄中開啟一個名為info.php的新檔案:


cd /var/www/html/
sudo touch info.php

在新檔案中鍵入或貼上以下程式碼,將返回有關我們的伺服器的資訊:
<span style="text-align:center;display:block;padding:8px 15px;margin-bottom: -40px;background-color: #e5e5e5;">/var/www/html/info.php
</span>


&lt;?php
phpinfo();

完成後,儲存並關閉檔案。

現在您可以在瀏覽器中訪問info.php,檢視伺服器資訊。


http://server_domain_or_IP/info.php

您將看到一個由PHP生成的網頁,其中包含有關您的伺服器的資訊:

如果你看到一個類似這樣的頁面,你已經成功地設定了PHP以及Nginx伺服器。

當Nginx正確呈現了此頁面後,最好刪除這個檔案,因為它實際上可以向未經授權的使用者提供有關您的配置的一些提示資訊,可能有助於他們嘗試非法連結。如果以後需要,可以隨時重新生成此檔案。

鍵入以下命令刪除這個檔案:


sudo rm /var/www/html/info.php

結束

現在應該已經在您的Ubuntu 16.04伺服器上配置了一個LEMP棧。

原文地址:https://segmentfault.com/a/1190000016012447