LAMP(Linux、Apache、MySQL 和 PHP)堆棧是構建動態網站的最常用方法之一。LAMP 堆棧使用成熟可靠的開源軟件作為構建塊,并已成為包括 WordPress、Facebook 和維基百科在內的各種項目的基石。了解如何安裝和配置 LAMP 堆棧是 Linux 管理員和 Web 開發人員等人的一項重要技能。
為了幫助您掌握 LAMP 堆棧,在本文中,我們將為您提供有關如何在 Ubuntu 20.04 上安裝和配置基本 LAMP 堆棧的分步教程。作為獎勵,我們將回顧 Tasksel 如何幫助您加快流程。
什么是 LAMP 堆棧?
LAMP 堆棧是一組用于 Web 開發的四個流行開源組件。
LAMP 首字母縮略詞中的每個字母代表其中一個組件:
- L?inux是堆棧中的操作系統。
- pache 是堆棧中的Web服務器。
- MySQL是堆棧中的數據庫。
- P?HP 是堆棧中的編程語言。
有了這些組件,Web 開發人員便擁有了構建可提供動態內容的 Web 應用程序所需的所有組件。Linux 充當安裝其他組件的基礎層,Apache 提供 HTTP(S) 頁面,MySQL 允許數據持久化,而 PHP 允許開發人員將 Web 服務器和數據庫層連接在一起并創建動態站點。例如,PHP 可以從網絡表單中獲取數據并對 MySQL 數據庫執行 CRUD(創建、讀取、更新、刪除)操作。
LAMP 規定了開發人員應使用的 Web 服務器、數據庫和編程語言,但 Linux 發行版具有靈活性。Ubuntu、Debian、RHEL 和 CentOS/Rocky Linux 是 LAMP 堆棧中使用的一些最常見的發行版,但這主要是一個偏好問題。
此外,傳統 LAMP 堆棧還有很多替代方案。例如,一些開發人員在他們的技術棧中使用P?ython 或P?erl 而不是 PHP。同樣,有些人使用 nginx(發音為“engine x”)而不是 Apache 來制作 LEMP 堆棧,或者用不同的數據庫或數據持久層(如 PostgreSQL)代替 MySQL。還有更根本不同的 LAMP 替代方案,如 MEAN(M?ongoDB、E?xpress.js、A?ngular.js、N?ode.js)。
如何使用 Tasksel 快速安裝 LAMP 堆棧
我們將在下面逐步介紹安裝每個單獨的 LAMP 堆棧組件的過程,如果您是第一次配置 LAMP 堆棧,我們建議您遵循該過程。但是,如果您正在尋找一種快速開始在 Ubuntu 或 Debian 上運行的方法,請考慮使用Tasksel。Tasksel 是一款幫助 Linux 管理員同時安裝多個相關包的工具,它只需一個命令即可安裝 LAMP 堆棧所需的 Apache、MySQL 和 PHP 組件。
要使用 Tasksel 為您的 LAMP 堆棧安裝 Apache、MySQL 和 PHP 組件,請遵循以下過程:
- 安裝任務選擇器
sudo apt install tasksel -y
- 使用Tasksel安裝lamp-server
sudo tasksel install lamp-server
安裝后lamp-server,您應該會看到 Apache2、MySQL 和 PHP 都已安裝在您的服務器上。
如何在 Ubuntu 20.04 上安裝 Linux、Apache、MySQL 和 PHP(LAMP 堆棧)
Ubuntu 的 LTS(長期支持)版本是 LAMP 堆棧中使用的一些最常見的 Linux 操作系統。在此過程中,我們將使用 Ubuntu 20.04 LTS 安裝和配置工作的 LAMP 堆棧。
先決條件:
在我們開始之前,您需要:
- 訪問 Ubuntu 20.04 系統的終端。如果您沒有,可以在Cherry Servers上啟動一個虛擬專用服務器。
- 須藤/根權限
運行 Apt 更新
首先,讓我們apt用這個命令更新我們的包列表和存儲庫:
sudo apt update
你應該看到類似這樣的輸出:
安裝阿帕奇
接下來,使用apt以下命令安裝 Apache Web 服務器:
sudo apt install apache2 -y
安裝 MySQL
接下來,我們將在服務器上安裝 MySQL。要深入了解 MySQL 安裝和配置過程(包括有關強化安裝的信息),請查看如何在 Ubuntu 20.04 上安裝和配置 MySQL。
對于我們的 LAMP 堆棧安裝過程的這一步,運行此命令來安裝 MySQL 服務器包:
apt install mysql-server -y
您可以通過運行以下命令來驗證您的 MySQL 安裝:
mysql -V
輸出應類似于:
安裝PHP
現在我們可以安裝 LAMP 堆棧的腳本語言。具體來說,我們將安裝 3 個包:
- php是PHP腳本語言的默認包
- libapache2-mod-php是 Apache 的 PHP 模塊
- php-mysql是 MySQL 的 PHP 模塊
要安裝所有 3 個包,請運行以下命令:
sudo apt install php libapache2-mod-php php-mysql -y
您可以通過運行以下命令來驗證您的 PHP 安裝:
php -v
輸出應類似于:
[可選] 配置防火墻
默認情況下,Ubuntu 的簡單防火墻 akaufw被禁用。您可以啟用ufw以實施防火墻策略并幫助保護您的系統。如果您選擇ufw禁用,則可以跳過此步驟。
如果您不確定ufw系統是否已啟用,可以使用以下命令檢查其狀態:
sudo ufw status
如果啟用,您可以允許三個與 Apache 相關ufw的可用應用程序(在 的輸出中列出)通過防火墻:sudo ufw app list
- Apache將僅允許 TCP 端口 80(默認 HTTP)上的流量
- Apache Secure將僅允許 TCP 端口 443(默認 HTTPS)上的流量
- Apache Full將允許 TCP 端口 80 和 443 上的流量
對于我們的示例,將允許使用以下命令在 TCP 端口 80 和 443 上到 Apache 的入站流量:
sudo ufw allow in "Apache Full"
您應該看到類似于以下內容的輸出:
Rule added Rule added (v6)
檢查 Apache 測試頁
使用網絡瀏覽器訪問http://<your server's IP>(其中 <your server's IP> 是您的 Ubuntu 機器的 IP 地址)。
您應該會看到默認的 Apache2 Ubuntu 默認頁面。
配置并啟用您的虛擬主機
安裝所有 LAMP 堆棧組件后,您現在可以在后續步驟中繼續測試 PHP 處理和 MySQL 連接。默認情況下,Apache 將在 中提供網頁/var/www/html,這對于簡單站點來說可能就足夠了。
但是,Apache 虛擬主機允許您在單個服務器上創建多個站點,并且是 Apache Web 服務器管理中的一個重要概念。因此,讓我們按照以下步驟為我們的網站創建一個虛擬主機:
注意:我們將命名我們的站點cherryservers.local。但是,您可以替換cherryservers.local為任何其他 Apache 虛擬主機名。
- 禁用默認虛擬主機:
sudo a2dissite 000-default.conf
- 將000-default.confApache 配置文件復制到一個新/etc/apache2/sites-available/cherryservers.local.conf文件:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/cherryservers.local.conf
- 使用文本編輯器如nano或vim編輯etc/apache2/sites-available/cherryservers.local.conf以包含這些設置:
<Directory /var/www/html/cherryservers.local/public> Require all granted </Directory> <VirtualHost *:80> ServerName cherryservers.local ServerAlias www.cherryservers.local ServerAdmin pepperandegg@localhost DocumentRoot /var/www/html/cherryservers.local/public ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
- DocumentRoot從文件創建目錄cherryservers.local.conf:
sudo mkdir -p /var/www/html/cherryservers.local/public
- 使www-data目錄及其內容的用戶和組所有者:
sudo chown -R www-data:www-data /var/www/html/cherryservers.local/public
- 授予www-data用戶對目錄及其內容的讀取、寫入和執行權限,并授予其他所有人讀取和執行權限:
sudo chmod -R 755 /var/www/html/cherryservers.local/public
- 將新站點鏈接到您的 Apache?sites-enabled:
sudo a2ensite cherryservers.local
- 重新加載 Apache 網絡服務器:
sudo systemctl reload apache2
提供一個 Test.php 頁面
接下來,讓我們提供一個簡單的test.php頁面來演示 PHP 正在我們的網站上運行。
- 使用像nano或這樣的文本編輯器vim來創建一個/var/www/html/cherryservers.local/public/test.php包含以下內容的新文件:
<?php phpinfo();
- 使用網絡瀏覽器訪問http://<your server's IP>/test.php(其中 <your server's IP> 是您的 Ubuntu 機器的 IP 地址)。您應該會看到一個顯示類似于以下 PHP 信息的頁面:
為 PHP 配置 MySQL 數據庫訪問
現在,讓我們創建一個測試 MySQL 數據庫并為 PHP 配置一個用戶來訪問它。
- 啟動 MySQL:
sudo mysql
- 在mysql>提示符下,創建一個testDB數據庫:
CREATE DATABASE testDB;
- 創建一個 MySQL 用戶phpUser,其密碼為password(替換password為強密碼):
CREATE USER 'phpUser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
4.授予phpUser用戶對testDB數據庫的全部權限:
GRANT ALL ON testDB.* TO 'phpUser'@'%';
- 在中創建一個breakfastMenu表testDB
CREATE TABLE testDB.breakfastMenu(food VARCHAR(50), description VARCHAR(255));
- 向表中添加一些測試數據breakfastMenu:
INSERT INTO testDB.breakfastMenu(food, description) VALUES ('Pepper and Egg With Giardiniera', 'Great Way To Start The Day');
- 退出 MySQL:
exit
測試 PHP 和 MySQL
最后,我們可以創建一個 PHP 腳本來顯示 MySQL 數據庫中的數據。
- 使用文本編輯器創建一個/var/www/html/cherryservers.local/public/cherry.php包含此內容的新 PHP 腳本(確保更改您的“密碼”以匹配您之前配置的 MySQL 密碼):
<?php $DBconnect=mysqli_connect("localhost","phpUser","password","testDB"); $result = mysqli_query($DBconnect,"SELECT * FROM breakfastMenu"); while($row = mysqli_fetch_array($result)) print_r($row['food']); mysqli_close($DBconnect); ?>
- 使用網絡瀏覽器訪問http://<your server's IP>/cherry.php(其中 <your server's IP> 是您的 Ubuntu 機器的 IP 地址)。您應該會看到一個頁面,其中顯示了food我們之前插入到數據庫中的值,類似于:
結論
而已!現在您在 Ubuntu 20.04 系統上有了一個工作的 LAMP 堆棧。從這里,您可以刪除我們的測試 .php 腳本并繼續進一步強化您的系統——例如,通過配置 Apache 以使用 HTTPS——并為您的站點創建動態內容。