LNMP是目前主流的網站服務器架構之一,適合運行大型和高並發的網站應用,例如電子商務網站、社交網絡、內容管理系統等。LNMP分別代表Linux、Nginx、MySQL和PHP。本文介紹如何在Alibaba Cloud Linux 3/2、CentOS 7/8操作系統的ECS實例上搭建LNMP環境。
部署環境的實例要求
手動部署LNMP環境時,已有或新建的ECS實例必須滿足以下條件:
實例規格的內存建議不小於4 GiB。
實例已分配公網IP地址或綁定彈性公網IP(EIP),具體操作,請參見為ECS實例開通公網。
操作系統必須為Alibaba Cloud Linux 3/2、CentOS 7/8,建議使用Alibaba Cloud Linux 3。
實例安全組的入方向規則已放行22、80、443端口。具體操作,請參見添加安全組規則。
重要基於服務器數據安全考慮,本文僅說明部署與測試LNMP環境所必須放行的端口,您可以根據實際需求,放行其他應用所需的端口號。例如,遠程連接MySQL數據庫時,需要放行MySQL默認佔用的3306端口。
Alibaba Cloud Linux 2、CentOS 7/8已完全停止維護(EOL),因此,如果您選擇新建ECS實例以部署LNMP,建議使用Alibaba Cloud Linux 3鏡像來創建ECS實例並部署LNMP。
操作步驟
Alibaba Cloud Linux 3/2、CentOS 7.x
本文的示例步驟中,使用的軟件版本信息如下所述。當您使用不同的軟件版本時,需要根據實際情況自行調整命令和參數配置。
Nginx版本:Nginx 1.20.1
MySQL版本:MySQL 8.0.39
PHP版本:PHP 8.0.30
步驟一:關閉防火牆和SELinux
為避免因使用管理員權限不當造成不可預期的風險,建議您使用普通用戶操作。如果普通用戶沒有sudo權限,具體操作,請參見如何為普通用戶添加sudo權限。
遠程連接需要部署LNMP環境的ECS實例。
具體操作,請參見ECS遠程連接方式概述。
關閉防火牆。
運行以下命令,查看當前防火牆的狀態。
sudo systemctl status firewalld
如果防火牆的狀態參數是
inactive
,則防火牆為關閉狀態,請執行步驟3。如果防火牆的狀態參數是
active
,則防火牆為開啟狀態,請執行步驟2.b。
關閉防火牆。
臨時關閉防火牆:
sudo systemctl stop firewalld
說明臨時關閉防火牆後,如果Linux實例重啟,則防火牆將會自動開啟。
永久關閉防火牆:
關閉防火牆。
sudo systemctl stop firewalld
實例開機時,禁止啟動防火牆服務。
sudo systemctl disable firewalld
說明如果您想重新開啟防火牆,請參見firewalld官網信息。
關閉SELinux。
運行以下命令,查看SELinux的當前狀態。
sudo getenforce
如果SELinux狀態參數是
Disabled
,則SELinux為關閉狀態,請執行步驟二:安裝Nginx。如果SELinux狀態參數是
Enforcing
,則SELinux為開啟狀態,請執行步驟3.b。
關閉SELinux。
SELinux關閉的方式分為臨時關閉和永久關閉,請您根據自身業務需求進行選擇。具體操作,請參見開啟或關閉SELinux。
步驟二:安裝Nginx
本文只提供一個版本的Nginx作為示例,如果您需要安裝其他版本的Nginx,請參見常見問題。
運行以下命令,安裝Nginx。
sudo yum -y install nginx
運行以下命令,查看Nginx版本。
nginx -v
返回結果類似如下所示,表示Nginx安裝成功。
nginx version: nginx/1.20.1
步驟三:安裝並配置MySQL
安裝MySQL
當ECS實例操作系統為Alibaba Cloud Linux 3,需安裝MySQL依賴包。
sudo yum install compat-openssl10
運行以下命令,更新YUM源。
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
運行以下命令,安裝MySQL。
sudo yum -y install mysql-community-server
運行以下命令,查看MySQL版本號。
mysql -V
返回結果如下所示,表示MySQL安裝成功。
mysql Ver 8.0.36 for Linux on x86_64 (MySQL Community Server - GPL)
運行以下命令,啟動MySQL。
sudo systemctl start mysqld
依次運行以下命令,設置開機啟動MySQL。
sudo systemctl enable mysqld sudo systemctl daemon-reload
配置MySQL
運行以下命令,查看
/var/log/mysqld.log
文件,獲取並記錄root用戶的初始密碼。sudo grep 'temporary password' /var/log/mysqld.log
命令行返回結果如下,其中
ARQTRy3+****
為MySQL的初始密碼。在下一步重置root用戶密碼時,會使用該初始密碼。2021-11-10T07:01:26.595215Z 1 [Note] A temporary password is generated for root@localhost: ARQTRy3+****
運行以下命令,配置MySQL的安全性。
sudo mysql_secure_installation
輸入MySQL的初始密碼。
說明在輸入密碼時,系統為了最大限度地保證數據安全,命令行將不做任何回顯。您只需要輸入正確的密碼信息,然後按Enter鍵即可。
Securing the MySQL server deployment. Enter password for user root: #輸入上一步獲取的root用戶初始密碼
設置MySQL的新密碼。
The existing password for the user account root has expired. Please set a new password. New password: #輸入新密碼。長度為8至30個字符,必須同時包含大小寫英文字母、數字和特殊符號。特殊符號包含()` ~!@#$%^&*-+=|{}[]:;『<>,.?/ Re-enter new password: #確認新密碼。 The 'validate_password' plugin is installed on the server. The subsequent steps will run with the existing configuration of the plugin. 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) :Y #您需要輸入Y以確認使用新密碼。 #新密碼設置完成後,需要再次驗證新密碼。 New password:#再次輸入新密碼。 Re-enter new password:#再次確認新密碼。 Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :Y #您需要輸入Y,再次確認使用新密碼。
輸入Y刪除匿名用戶。
Remove anonymous users? (Press y|Y for Yes, any other key for No) :Y Success.
輸入Y禁止使用root用戶遠程登錄MySQL。
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :Y Success.
輸入Y刪除test庫以及用戶對test庫的訪問權限。
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :Y - Dropping test database... Success. - Removing privileges on test database... Success.
輸入Y重新加載授權表。
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :Y Success. All done!
更多信息,請參見MySQL文檔。
步驟四:安裝並配置PHP
安裝PHP
安裝PHP。
Alibaba Cloud Linux 3
運行以下命令,更新YUM源。
sudo rpm -Uvh https://mirrors.aliyun.com/remi/enterprise/remi-release-8.rpm --nodeps
運行以下命令,啟用
php:remi-8.0
模塊流。sudo yum module enable -y php:remi-8.0
運行以下命令,安裝PHP。
sudo yum install -y php php-cli php-fpm php-common php-mysqlnd php-gd php-mbstring php-xml
Alibaba Cloud Linux 2
運行以下命令,更新YUM源。
sudo rpm -Uvh https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm
運行以下命令,修改
yum-plugin-releasever-adapter
插件配置以支持remi
源適配Alibaba Cloud Linux 2。sudo echo ", remi-php54.repo, remi-php71.repo, remi-php73.repo, remi-php80.repo, remi-php82.repo, remi.repo, epel.repo, remi-modular.repo, remi-php70.repo, remi-php72.repo, remi-php74.repo, remi-php81.repo, remi-php83.repo, remi-safe.repo" >> /etc/yum/pluginconf.d/releasever-adapter.conf
運行以下命令,啟用PHP 8.0倉庫。
sudo sed -i '1,10s/enabled=0/enabled=1/' /etc/yum.repos.d/remi-php80.repo
運行以下命令,安裝PHP。
sudo yum install -y php php-cli php-fpm php-common php-mysqlnd php-gd php-mbstring
CentOS 7.x
更新YUM源。
運行以下命令,安裝EPEL源和Remi倉庫。
sudo yum install -y epel-release sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
運行以下命令,啟用PHP 8.0倉庫。
sudo yum install -y yum-utils sudo yum-config-manager --enable remi-php80
運行以下命令,安裝PHP。
sudo yum install -y php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json
運行以下命令,查看PHP版本。
php -v
返回結果如下所示,表示安裝成功。
PHP 8.0.30 (cli) (built: Aug 3 2023 17:13:08) ( NTS gcc x86_64 ) Copyright (c) The PHP Group Zend Engine v4.0.30, Copyright (c) Zend Technologies
修改Nginx配置文件以支持PHP
運行以下命令,備份Nginx配置文件。
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
修改Nginx配置文件,添加Nginx對PHP的支持。
重要若不添加此配置信息,後續您使用瀏覽器訪問PHP頁面時,頁面將無法顯示。
運行以下命令,打開Nginx配置文件。
sudo vim /etc/nginx/nginx.conf
按
i
進入編輯模式。在
server
大括號內,修改或添加下列配置信息。除下面提及的需要添加或修改的配置信息外,其他配置保持默認值即可。
添加或修改
location /
配置信息。location / { index index.php index.html index.htm; }
添加或修改
location ~ .php$
配置信息。#添加下列信息,配置Nginx通過fastcgi方式處理您的PHP請求。 location ~ .php$ { root /usr/share/nginx/html; #將/usr/share/nginx/html替換為您的網站根目錄,本文使用/usr/share/nginx/html作為網站根目錄。 fastcgi_pass 127.0.0.1:9000; #Nginx通過本機的9000端口將PHP請求轉發給PHP-FPM進行處理。 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; #Nginx調用fastcgi接口處理PHP請求。 }
添加或修改配置信息後,文件內容如下圖所示:
按
Esc
鍵,輸入:wq
,按Enter
鍵關閉並保存配置文件。
運行以下命令,啟動Nginx服務。
sudo systemctl start nginx
運行以下命令,設置Nginx服務開機自啟動。
sudo systemctl enable nginx
配置PHP
新建並編輯
phpinfo.php
文件,用於展示PHP信息。運行以下命令,新建
phpinfo.php
文件。sudo vim <網站根目錄>/phpinfo.php
<網站根目錄>是您在
nginx.conf
配置文件中location ~ .php$
大括號內,配置的root
參數值,如下圖所示。本文配置的網站根目錄為
/usr/share/nginx/html
,因此需要運行以下命令新建phpinfo.php
文件:sudo vim /usr/share/nginx/html/phpinfo.php
按
i
進入編輯模式。輸入下列內容,函數
phpinfo()
會展示PHP的所有配置信息。<?php echo phpinfo(); ?>
按
Esc
鍵後,輸入:wq
並回車,保存關閉配置文件。
運行以下命令,啟動PHP-FPM。
sudo systemctl start php-fpm
運行以下命令,設置PHP-FPM開機自啟動。
sudo systemctl enable php-fpm
步驟五:測試訪問LNMP配置信息頁面
在本地Windows主機或其他具有公網訪問能力的Windows主機中,打開瀏覽器。
在瀏覽器的地址欄輸入
http://<ECS實例公網IP地址>/phpinfo.php
進行訪問。訪問結果如下圖所示,表示LNMP環境部署成功。
CentOS 8.x
本文的示例步驟中,使用的軟件版本信息如下所述。當您使用不同的軟件版本時,需要根據實際情況自行調整命令和參數配置。
Nginx版本:Nginx 1.20.1
MySQL版本:MySQL 8.0.26
PHP版本:PHP 7.4.19
步驟一:關閉防火牆和SELinux
為避免因使用管理員權限不當造成不可預期的風險,建議您使用普通用戶操作。如果普通用戶沒有sudo權限,具體操作,請參見如何為普通用戶添加sudo權限。
遠程連接需要部署LNMP環境的ECS實例。
具體操作,請參見ECS遠程連接方式概述。
關閉防火牆。
運行以下命令,查看當前防火牆的狀態。
systemctl status firewalld
如果防火牆的狀態參數是
inactive
,則防火牆為關閉狀態,請執行步驟3。如果防火牆的狀態參數是
active
,則防火牆為開啟狀態,請執行步驟2.b。
關閉防火牆。
臨時關閉防火牆:
sudo systemctl stop firewalld
說明臨時關閉防火牆後,如果Linux實例重啟,則防火牆將會自動開啟。
永久關閉防火牆:
關閉防火牆。
sudo systemctl stop firewalld
實例開機時,禁止啟動防火牆服務。
sudo systemctl disable firewalld
說明如果您想重新開啟防火牆,請參見firewalld官網信息。
關閉SELinux。
運行以下命令,查看SELinux的當前狀態。
getenforce
如果SELinux狀態參數是
Disabled
,則SELinux為關閉狀態,請執行步驟二:安裝Nginx。如果SELinux狀態參數是
Enforcing
,則SELinux為開啟狀態,請執行步驟3.b。
關閉SELinux。
SELinux關閉的方式分為臨時關閉和永久關閉,請您根據自身業務需求進行選擇。具體操作,請參見開啟或關閉SELinux。
步驟二:安裝Nginx
請確保您的實例具有訪問公網的能力。
切換CentOS 8源地址。
CentOS 8操作系統版本結束了生命周期(EOL),按照社區規則,CentOS 8的源地址http://mirror.centos.org/centos/8/內容已移除,您在阿里雲上繼續使用默認配置的CentOS 8的源會發生報錯。如果您需要使用CentOS 8系統中的一些安裝包,則需要手動切換源地址。具體操作,請參見CentOS 8 EOL如何切換源?。
運行以下命令安裝Nginx。
本教程將選用Nginx 1.20.1版本。
說明您可以訪問Nginx官方安裝包獲取適用於CentOS 8系統的多版本的Nginx安裝包。
sudo dnf -y install https://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.20.1-1.el8.ngx.x86_64.rpm
運行以下命令,查看Nginx版本。
nginx -v
查看版本結果如下所示。
nginx version: nginx/1.20.1
步驟三:安裝MySQL
運行以下命令,安裝MySQL。
sudo dnf -y install @mysql
運行以下命令,查看MySQL版本。
mysql -V
查看版本結果如下所示。
mysql Ver 8.0.26 for Linux on x86_64 (Source distribution)
步驟四:安裝PHP
運行以下命令,添加並更新epel源。
sudo dnf -y install epel-release sudo dnf -y update epel-release
運行以下命令,刪除緩存的無用軟件包並更新軟件源。
sudo dnf clean all sudo dnf makecache
啟用
php:7.4
模塊。說明本示例使用
php:7.4
版本。如果您需要使用PHP 8.0
或PHP 8.2
版本,需要使用CentOS Stream操作系統。sudo dnf module enable php:7.4
運行以下命令,安裝PHP相應的模塊。
sudo dnf -y install php php-curl php-dom php-exif php-fileinfo php-fpm php-gd php-hash php-json php-mbstring php-mysqli php-openssl php-pcre php-xml libsodium
運行以下命令查看PHP版本。
php -v
查看版本結果如下所示。
PHP 7.4.19 (cli) (built: May 4 2021 11:06:37) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.19, Copyright (c), by Zend Technologies
步驟五:配置Nginx
運行以下命令,查看並記錄Nginx配置文件的默認路徑。
cat /etc/nginx/nginx.conf
在
http
大括號內,查看include
配置項。即配置文件的默認路徑。在配置文件的默認路徑下,備份默認配置文件。
cd /etc/nginx/conf.d sudo cp default.conf default.conf.bak
修改默認配置文件。
運行以下命令打開默認配置文件。
sudo vim default.conf
按
i
進入編輯模式。在
location
大括號內,修改以下內容。location / { #將該路徑替換為您的網站根目錄。 root /usr/share/nginx/html; #添加默認首頁信息index.php。 index index.html index.htm index.php; }
去掉被注釋的
location ~ .php$
大括號內容前的#
,並修改大括號的內容。修改完成如下所示。
location ~ .php$ { #將該路徑替換為您的網站根目錄。 root /usr/share/nginx/html; #Nginx通過unix套接字與PHP-FPM建立聯繫,該配置與/etc/php-fpm.d/www.conf文件內的listen配置一致。 fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; #將/scripts$fastcgi_script_name修改為$document_root$fastcgi_script_name。 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #Nginx調用fastcgi接口處理PHP請求。 include fastcgi_params; }
說明Nginx與PHP-FPM進程間通信方式有兩種。
TCP Socket:該方式能夠通過網絡,可用於跨服務器通信的場景。
UNIX Domain Socket:該方式不能通過網絡,只能用於同一服務器中通信的場景。
按下
Esc
鍵,並輸入:wq
保存退出文件。
運行以下命令,啟動Nginx服務。
sudo systemctl start nginx
運行以下命令,設置Nginx服務開機自啟動。
sudo systemctl enable nginx
步驟六:配置MySQL
運行以下命令啟動MySQL,並設置為開機自啟動。
sudo systemctl enable --now mysqld
運行以下命令,查看MySQL是否已啟動。
sudo systemctl status mysqld
查看返回結果中
Active: active (running)
表示已啟動。運行以下命令,執行MySQL安全性操作並設置密碼。
sudo mysql_secure_installation
命令運行後,根據命令行提示執行如下操作。
輸入Y並回車開始相關配置。
選擇密碼驗證策略強度,輸入2並回車。
策略0表示低,1表示中,2表示高。建議您選擇高強度的密碼驗證策略。
設置MySQL的新密碼並確認。
本示例設置密碼
PASSword123!
。輸入Y並回車繼續使用提供的密碼。
輸入Y並回車移除匿名用戶。
設置是否允許遠程連接MySQL。
不需要遠程連接時,輸入Y並回車。
需要遠程連接時,輸入N或其他任意非Y的按鍵,並回車。
輸入Y並回車刪除
test
庫以及對test
庫的訪問權限。輸入Y並回車重新加載授權表。
步驟七:配置PHP
修改PHP配置文件。
運行以下命令,打開配置文件。
sudo vim /etc/php-fpm.d/www.conf
按
i
進入編輯模式。找到
user = apache
和group = apache
,將apache
修改為nginx
。按下
Esc
鍵,並輸入:wq
保存退出文件。
新建並編輯
phpinfo.php
文件,用於展示PHP信息。運行以下命令,新建
phpinfo.php
文件。sudo vim <網站根目錄>/phpinfo.php
<網站根目錄>是您在
nginx.conf
配置文件中location ~ .php$
大括號內,配置的root
參數值,如下圖所示。本文配置的網站根目錄為
/usr/share/nginx/html
,因此需要運行以下命令新建phpinfo.php
文件:sudo vim /usr/share/nginx/html/phpinfo.php
按
i
進入編輯模式。輸入下列內容,函數
phpinfo()
會展示PHP的所有配置信息。<?php echo phpinfo(); ?>
按
Esc
鍵後,輸入:wq
並回車,保存關閉配置文件。
運行以下命令,啟動
PHP-FPM
。sudo systemctl start php-fpm
運行以下命令,設置
PHP-FPM
開機自啟動。sudo systemctl enable php-fpm
步驟八:測試訪問LNMP平台
在本地物理機上打開瀏覽器。
在地址欄輸入
http://<ECS實例公網IP地址>/phpinfo.php
。返回結果如下圖所示,表示LNMP環境部署成功。
後續步驟
測試訪問LNMP配置信息頁面後,建議您運行以下命令將phpinfo.php
文件刪除,消除數據泄露風險。
sudo rm -rf <網站根目錄>/phpinfo.php
其中,<網站根目錄>需要替換為您在nginx.conf
中配置的網站根目錄。
本文配置的網站根目錄為/usr/share/nginx/html
,因此需要運行以下命令:
sudo rm -rf /usr/share/nginx/html/phpinfo.php
常見問題
問題一:如何使用其他版本的Nginx服務器?
使用瀏覽器訪問Nginx開源社區獲取對應的Nginx版本的下載鏈接。
請根據您的個人需求,選擇對應的Nginx版本。本章節以Nginx 1.22.1為例。
遠程連接需要部署LNMP環境的ECS實例。
具體操作,請參見使用VNC登錄實例。
運行以下命令,安裝Nginx相關依賴。
sudo yum install -y gcc-c++ sudo yum install -y pcre pcre-devel sudo yum install -y zlib zlib-devel sudo yum install -y openssl openssl-devel
運行
wget
命令下載Nginx 1.22.1。您可以通過Nginx開源社區直接獲取對應版本的安裝包URL,然後通過
wget URL
的方式將Nginx安裝包下載至ECS實例。例如,Nginx 1.22.1的下載命令如下:sudo wget http://nginx.org/download/nginx-1.22.1.tar.gz
運行以下命令,解壓Nginx 1.22.1安裝包,然後進入Nginx所在的文件夾。
sudo tar zxvf nginx-1.22.1.tar.gz cd nginx-1.22.1
依次運行以下命令,編譯源碼。
sudo ./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module
sudo make && make install
運行以下命令,進入Nginx的
sbin
目錄,然後啟動Nginx。cd /usr/local/nginx/sbin/ sudo ./nginx
在本地主機中,使用瀏覽器訪問
ECS實例公網IP
。出現如下圖所示的頁面,表示Nginx已成功安裝並啟動。
問題二:如何為普通用戶添加sudo權限?
使用
root
用戶遠程連接Linux服務器。具體操作,請參見使用VNC登錄實例。
運行以下命令,新建一個普通用戶
test
並設置密碼。useradd test passwd test
運行以下命令,為
/etc/sudoers
文件賦予權限。chmod 750 /etc/sudoers
運行以下命令,編輯
/etc/sudoers
文件。vim /etc/sudoers
按
i
鍵進入編輯模式並添加以下配置:test ALL=(ALL) NOPASSWD: ALL
輸入:wq,保存並退出文件。
運行以下命令,切換到
test
用戶。su - test
運行以下命令,測試
sudo
權限。sudo cat /etc/redhat-release
如果回顯信息類似如下所示,表示
sudo
權限已經添加成功。[test@iZbp1dqulfhozse3jbp**** ~]$ sudo cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/154292.html