LAMP環境是常用的Web開發環境之一,其中LAMP分別代表Linux、Apache、MySQL和PHP。LAMP擁有龐大的社區支援和豐富的資源,適合開發、部署和維護各種規模的Web應用,由於其高度靈活性和可定製性,您可以根據專案需求調整每個組件的配置,以達到最佳效能和安全性。
前提條件
部署LAMP環境
Alibaba Cloud Linux 3/CentOS 8
CentOS 8的源地址http://mirror.centos.org/centos/8/
內容已移除,當您在阿里雲上繼續使用預設配置的CentOS 8的源會發生報錯。具體操作,請參見CentOS 8 EOL如何切換源?
安裝Apache伺服器。
更新包管理工具並安裝Apache伺服器。
sudo dnf update -y && sudo dnf install -y httpd
設定Apache伺服器守護進程並啟動。
sudo systemctl enable httpd sudo systemctl start httpd
安裝MySQL資料庫。
添加MySQL官方源。
說明Alibaba Cloud Linux 3您需要安裝
compat-openssl10
與舊版本OpenSSL庫相容。sudo dnf install -y compat-openssl10
sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el8-1.noarch.rpm
安裝MySQL服務,同時啟動MySQL服務並設定開機自啟。
sudo dnf install -y mysql-server sudo systemctl start mysqld sudo systemctl enable mysqld
查看root使用者預設初始密碼。
如果是Alibaba Cloud Linux 3執行。
echo $(PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log); PASSWORD=${PASSWORD##* }; echo $PASSWORD)
如果是CentOS 8安裝後預設無密碼。
為MySQL服務root使用者佈建密碼,您需要將命令中
<oldpwd>
替換為初始密碼,<newpwd>
替換為您的新密碼(如果是CentOS 8<oldpwd>
替換為空白,命令提示輸入密碼輸入斷行符號跳過)。重要密碼原則要求密碼至少包含一個大寫字母、一個小寫字母、一個數字和一個特殊字元,並且密碼總長度至少為 8 個字元。
sudo mysqladmin -uroot -p'<oldpwd>' password '<newpwd>'
安裝PHP。
設定
remi
源並啟用php:remi-8.4
。說明本文預設使用了PHP 8.4,如果對版本有要求需要將模組名稱修改成對應版本(例:安裝PHP 8.1需要將模組名稱修改為
php:remi-8.1
)。sudo rpm -Uvh https://mirrors.aliyun.com/remi/enterprise/remi-release-8.rpm --nodeps sudo dnf install -y yum-utils && sudo dnf module enable -y php:remi-8.4
安裝PHP、PHP進程管理器、MySQL擴充模組,同時啟動PHP進程管理器服務並設定開機自啟。
sudo dnf install -y php php-fpm php-mysqlnd sudo systemctl start php-fpm sudo systemctl enable php-fpm
驗證LAMP環境。
查詢
php-fpm
設定檔預設監聽地址。sudo grep 'listen =' /etc/php-fpm.d/www.conf
如果返回sock檔案地址說明預設監聽sock檔案。
如果返回
127.0.0.1:9000
說明預設監聽本地9000連接埠。
執行命令建立
/etc/httpd/conf.d/php-fpm.conf
設定檔並添加php-fpm
規則。重要如果
php-fpm
監聽地址為127.0.0.1:9000
需要修改規則為proxy:fcgi://127.0.0.1:9000
sudo touch /etc/httpd/conf.d/php-fpm.conf sudo tee /etc/httpd/conf.d/php-fpm.conf > /dev/null <<EOF <FilesMatch \.php$> SetHandler "proxy:unix:/run/php-fpm/www.sock;" </FilesMatch> EOF
重啟Apache伺服器使配置生效。
sudo systemctl restart httpd
執行命令在路徑
/var/www/html/
下建立test.php
檔案,並添加測試內容(<username>
替換為資料庫使用者名稱,<password>
替換為資料庫密碼)。sudo touch /var/www/html/test.php sudo tee /var/www/html/test.php > /dev/null <<EOF <?php \$servername = "localhost"; \$username = "<username>"; \$password = "<password>"; \$conn = new mysqli(\$servername, \$username, \$password); if (\$conn->connect_error) { die("fail: " . \$conn->connect_error); } echo "success\n"; ?> EOF
在本地物理機上使用瀏覽器訪問
http://ECS執行個體公網IP/test.php
,返回success
說明PHP代理設定成功並成功串連MySQL資料庫。
Alibaba Cloud Linux 2/CentOS 7
安裝Apache伺服器。
更新包管理工具並安裝Apache伺服器。
sudo yum update -y && sudo yum install -y httpd
設定Apache伺服器守護進程並啟動。
sudo systemctl enable httpd sudo systemctl start httpd
安裝MySQL資料庫。
添加MySQL官方源。
sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el7-1.noarch.rpm
安裝MySQL服務,同時啟動MySQL服務並設定開機自啟。
sudo yum install -y mysql-server sudo systemctl start mysqld sudo systemctl enable mysqld
查看root使用者預設初始密碼。
echo $(PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log); PASSWORD=${PASSWORD##* }; echo $PASSWORD)
為MySQL服務root使用者佈建密碼,您需要將命令中
<oldpwd>
替換為初始密碼,<newpwd>
替換為您的新密碼。重要密碼原則要求密碼至少包含一個大寫字母、一個小寫字母、一個數字和一個特殊字元,並且密碼總長度至少為 8 個字元。
sudo mysqladmin -uroot -p'<oldpwd>' password '<newpwd>'
安裝PHP。
設定
remi
源並啟用remi-php83
。說明本文預設使用了PHP 8.3,如果對版本有要求需要將模組名稱修改成對應版本(例:安裝PHP 8.1需要將模組名稱修改為
remi-php81
)。sudo rpm -Uvh https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm --nodeps sudo yum install -y yum-utils && sudo yum-config-manager --enable remi-php83
安裝PHP、PHP進程管理器、MySQL擴充模組,同時啟動PHP進程管理器服務並設定開機自啟。
sudo yum install -y php php-fpm php-mysqlnd sudo systemctl start php-fpm sudo systemctl enable php-fpm
驗證LAMP環境。
查詢
php-fpm
設定檔預設監聽地址。sudo grep 'listen =' /etc/php-fpm.d/www.conf
如果返回sock檔案地址說明預設監聽sock檔案。
如果返回
127.0.0.1:9000
說明預設監聽本地9000連接埠。
執行命令建立
/etc/httpd/conf.d/php-fpm.conf
設定檔並添加php-fpm
規則。重要如果
php-fpm
監聽地址為sock檔案地址,需要修改規則proxy:fcgi://127.0.0.1:9000
為proxy:unix:<path>;
,<path>需要替換為您的sock檔案地址。sudo touch /etc/httpd/conf.d/php-fpm.conf sudo tee /etc/httpd/conf.d/php-fpm.conf > /dev/null <<EOF <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> EOF
重啟Apache伺服器使配置生效。
sudo systemctl restart httpd
執行命令在路徑
/var/www/html/
下建立test.php
檔案,並添加測試內容(<username>
替換為資料庫使用者名稱,<password>
替換為資料庫密碼)。sudo touch /var/www/html/test.php sudo tee /var/www/html/test.php > /dev/null <<EOF <?php \$servername = "localhost"; \$username = "<username>"; \$password = "<password>"; \$conn = new mysqli(\$servername, \$username, \$password); if (\$conn->connect_error) { die("fail: " . \$conn->connect_error); } echo "success\n"; ?> EOF
在本地物理機上使用瀏覽器訪問
http://ECS執行個體公網IP/test.php
,返回success
說明PHP代理設定成功並成功串連MySQL資料庫。
Ubuntu20.04及以上
安裝Apache伺服器。
更新包管理工具並安裝Apache伺服器。
sudo apt update -y && sudo apt install -y apache2
設定Apache伺服器守護進程並啟動。
sudo systemctl enable apache2 sudo systemctl start apache2
安裝MySQL資料庫並設定密碼。
更新軟體包列表並安裝MySQL伺服器。
sudo apt update -y && sudo apt install -y mysql-server
將MySQL的設定檔中監聽地址從
127.0.0.1
(即只監聽本地串連)更改為0.0.0.0
(即監聽所有可用網路介面),從而允許遠端連線到MySQL伺服器。sudo sed -i "s/127.0.0.1/0.0.0.0/" /etc/mysql/mysql.conf.d/mysqld.cnf
修改資料庫root使用者主機部分從
localhost
更改為%
以允許從任何地址串連,同時修改root
使用者的密碼和身份認證外掛程式。您需要將命令中<newpwd>
替換為您的密碼。重要由於本地root使用者的預設身份認證外掛程式是
auth_socket
,如果命令執行後提示輸入密碼,請直接按斷行符號跳過。密碼原則要求密碼至少包含一個大寫字母、一個小寫字母、一個數字和一個特殊字元(通常需要使用反斜線
\
來轉義這些特殊字元,以避免被解釋為命令的一部分),並且密碼總長度至少為 8 個字元。
sudo mysql -uroot -p -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '<newpwd>';" -e "UPDATE mysql.user SET Host='%' WHERE User='root' AND Host='localhost';" -e "FLUSH PRIVILEGES;"
重啟MySQL資料庫服務使配置生效。
sudo systemctl restart mysql
安裝PHP。
更新軟體包,安裝
software-properties-common
包,並添加PPA倉庫ppa:ondrej/php
。sudo apt update && sudo apt install -y software-properties-common && sudo add-apt-repository -y ppa:ondrej/php
安裝PHP 8.4及相關組件,包括FPM和MySQL擴充。
說明您可以通過
sudo apt search php
查看所有支援安裝的PHP版本,安裝其他版本需要修改命令中對應版本號碼(例:安裝PHP 8.1需修改命令sudo apt install -y php8.1 php8.1-fpm php8.1-mysql
)。sudo apt install -y php8.4 php8.4-fpm php8.4-mysql
驗證LAMP環境。
查詢
php-fpm
設定檔預設監聽地址,<version>
需要替換為您的PHP版本(例:PHP 8.4需要將<version>
替換為8.4)。sudo grep '^listen =' /etc/php/<version>/fpm/pool.d/www.conf
如果返回sock檔案地址說明預設監聽sock檔案。
如果返回
127.0.0.1:9000
說明預設監聽本地9000連接埠。
執行命令建立
/etc/apache2/conf-available/php-fpm.conf
檔案,在內填寫PHP轉寄規則,<listen>需要替換為您的監聽地址。sudo touch /etc/apache2/conf-available/php-fpm.conf sudo tee /etc/apache2/conf-available/php-fpm.conf > /dev/null <<EOF <FilesMatch \.php$> SetHandler "proxy:<listen>" </FilesMatch> EOF
如果是sock檔案地址,需要替換
<listen>
為unix:<path>;
,<path>
需要替換為您的sock檔案地址。重要如果監聽的sock檔案,需要sock檔案的使用權限設定為允許讀寫,您可以使用以下命令來更改許可權
sudo chmod 666 <path>
,<path>更改為您的sock檔案地址。如果是
127.0.0.1:9000
,需要替換<listen>
為fcgi://127.0.0.1:9000
。
設定設定檔軟串連。
sudo ln -s /etc/apache2/conf-available/php-fpm.conf /etc/apache2/conf-enabled/
啟用proxy_fcgi和setenvif模組使Apache可以將PHP請求轉寄到PHP進程管理器,並啟用PHP進程管理器的設定檔。
sudo a2enmod proxy_fcgi setenvif sudo a2enconf php8.4-fpm
重啟Apache伺服器使配置生效。
sudo systemctl restart apache2
執行命令在路徑
/var/www/html/
下建立test.php
檔案,並添加測試內容(<username>
替換為資料庫使用者名稱,<password>
替換為資料庫密碼)。sudo touch /var/www/html/test.php sudo tee /var/www/html/test.php > /dev/null <<EOF <?php \$servername = "localhost"; \$username = "<username>"; \$password = "<password>"; \$conn = new mysqli(\$servername, \$username, \$password); if (\$conn->connect_error) { die("fail: " . \$conn->connect_error); } echo "success\n"; ?> EOF
在本地物理機上使用瀏覽器訪問
http://ECS執行個體公網IP/test.php
,返回success
說明PHP代理設定成功並成功串連MySQL資料庫。
常見問題
無法通過公網IP訪問test.php頁面
可能原因及其解決方案:
安全性群組未放開80連接埠、系統防火牆開啟、80連接埠被佔用。
具體排查方法,請參見無法訪問ECS執行個體中的服務的排查方法。
如何設定MySQL遠端存取
建立非root使用者遠程登入MySQL的帳號,並允許遠程主機使用該帳號訪問MySQL。具體操作,請參見遠端存取MySQL資料庫。