手動(dòng)部署LNMP環(huán)境
LNMP(代表Linux、Nginx、MySQL和PHP)是目前主流的網(wǎng)站服務(wù)器架構(gòu)之一,適合運(yùn)行大型和高并發(fā)的網(wǎng)站應(yīng)用,例如電子商務(wù)網(wǎng)站、社交網(wǎng)絡(luò)、內(nèi)容管理系統(tǒng)等。本文介紹如何在ECS實(shí)例上手動(dòng)部署指定版本的LNMP環(huán)境。
前提條件
實(shí)例已分配公網(wǎng)IP地址或綁定彈性公網(wǎng)IP(EIP)。具體操作,請參見綁定EIP。
實(shí)例的安全組入方向規(guī)則已放行22、80端口。具體操作,請參見添加安全組規(guī)則。
ECS實(shí)例內(nèi)存大于等于4 GiB。
部署LNMP環(huán)境
Alibaba Cloud Linux 3/CentOS 8
更新包管理工具。
sudo dnf update -y
使用Nginx官方源安裝Nginx。
重要CentOS 8的源地址
http://mirror.centos.org/centos/8/
內(nèi)容已移除,當(dāng)您在阿里云上繼續(xù)使用默認(rèn)配置的CentOS 8的源會(huì)發(fā)生報(bào)錯(cuò)。具體操作,請參見CentOS 8 EOL如何切換源?設(shè)置Nginx官方源地址,在目錄
/etc/yum.repos.d/
下新建nginx.repo
文件,并添加如下內(nèi)容。[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/8/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/8/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
安裝Nginx,同時(shí)啟動(dòng)Nginx并設(shè)置開機(jī)自啟。
說明默認(rèn)安裝最新穩(wěn)定版本Nginx,如果對版本有要求可以使用
sudo dnf search nginx --showduplicates
搜索支持的Nginx版本并將安裝命令替換為具體版本(例:安裝1.24.0
版本,修改命令為sudo dnf -y install nginx-1.24.0
)。sudo dnf -y install nginx sudo systemctl start nginx sudo systemctl enable nginx
安裝MySQL數(shù)據(jù)庫。
添加MySQL官方源。
說明Alibaba Cloud Linux 3您需要安裝
compat-openssl10
。sudo yum install -y compat-openssl10
sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el8-1.noarch.rpm
安裝MySQL服務(wù),同時(shí)啟動(dòng)MySQL服務(wù)并設(shè)置開機(jī)自啟。
sudo dnf install -y mysql-server sudo systemctl start mysqld sudo systemctl enable mysqld
查看root用戶默認(rèn)初始密碼。
echo $(PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log); PASSWORD=${PASSWORD##* }; echo $PASSWORD)
為MySQL服務(wù)root用戶設(shè)置密碼,您需要將命令中
<oldpwd>
替換為初始密碼,<newpwd>
替換為您的新密碼。重要密碼策略要求密碼至少包含一個(gè)大寫字母、一個(gè)小寫字母、一個(gè)數(shù)字和一個(gè)特殊字符,并且密碼總長度至少為 8 個(gè)字符。
sudo mysqladmin -uroot -p'<oldpwd>' password <newpwd>
安裝PHP。
設(shè)置
remi
源并啟用php:remi-8.4
。說明本文默認(rèn)使用了PHP8.4,如果對版本有要求需要將模塊名稱修改成對應(yīng)版本(例:安裝PHP8.1需要將模塊名稱修改為
php:remi-8.1
)。sudo rpm -Uvh https://mirrors.aliyun.com/remi/enterprise/remi-release-8.rpm --nodeps sudo dnf module enable -y php:remi-8.4
安裝PHP、PHP進(jìn)程管理器、MySQL擴(kuò)展模塊,同時(shí)啟動(dòng)PHP進(jìn)程管理器服務(wù)并設(shè)置開機(jī)自啟。
sudo dnf install -y php php-fpm php-mysqlnd sudo systemctl start php-fpm sudo systemctl enable php-fpm
驗(yàn)證LNMP環(huán)境。
查詢
php-fpm
配置文件默認(rèn)監(jiān)聽地址。sudo grep 'listen =' /etc/php-fpm.d/www.conf
如果返回sock文件地址說明默認(rèn)監(jiān)聽sock文件。
如果返回
127.0.0.1:9000
說明默認(rèn)監(jiān)聽本地9000端口。
編輯
/etc/nginx/conf.d/default.conf
文件,在server
內(nèi)填寫PHP轉(zhuǎn)發(fā)規(guī)則。重要如果
php-fpm
監(jiān)聽地址為127.0.0.1:9000
需要修改規(guī)則fastcgi_pass字段為127.0.0.1:9000
location / { index index.php index.html index.htm; } location ~ .php$ { root /usr/share/nginx/html; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
重啟Nginx服務(wù)使修改后的配置文件生效。
sudo systemctl restart nginx
在路徑
/usr/share/nginx/html
下新建test.php
文件,添加如下內(nèi)容(<username>
替換為數(shù)據(jù)庫用戶名,<password>
替換為數(shù)據(jù)庫密碼)。<?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"; ?>
在本地物理機(jī)上使用瀏覽器訪問
http://ECS實(shí)例公網(wǎng)IP/test.php
,返回success
說明PHP代理設(shè)置成功并成功連接MySQL數(shù)據(jù)庫。
Alibaba Cloud Linux 2/CentOS 7
更新包管理工具。
sudo yum update -y
使用Nginx官方源安裝Nginx。
設(shè)置Nginx官方源地址,在目錄
/etc/yum.repos.d/
下新建nginx.repo
文件,并添加如下內(nèi)容。[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
安裝Nginx,同時(shí)啟動(dòng)Nginx并設(shè)置開機(jī)自啟。
說明默認(rèn)安裝最新穩(wěn)定版本Nginx,如果對版本有要求可以使用
sudo yum search nginx --showduplicates
搜索支持的Nginx版本并將安裝命令替換為具體版本(例:安裝1.24.0
版本,修改命令為sudo yum -y install nginx-1.24.0
)。sudo yum -y install nginx sudo systemctl start nginx sudo systemctl enable nginx
安裝MySQL數(shù)據(jù)庫。
添加MySQL官方源。
sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el7-1.noarch.rpm
安裝MySQL服務(wù),同時(shí)啟動(dòng)MySQL服務(wù)并設(shè)置開機(jī)自啟。
sudo yum install -y mysql-server sudo systemctl start mysqld sudo systemctl enable mysqld
查看root用戶默認(rèn)初始密碼。
echo $(PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log); PASSWORD=${PASSWORD##* }; echo $PASSWORD)
為MySQL服務(wù)root用戶設(shè)置密碼,您需要將命令中
<oldpwd>
替換為初始密碼,<newpwd>
替換為您的新密碼。重要密碼策略要求密碼至少包含一個(gè)大寫字母、一個(gè)小寫字母、一個(gè)數(shù)字和一個(gè)特殊字符,并且密碼總長度至少為 8 個(gè)字符。
sudo mysqladmin -uroot -p'<oldpwd>' password <newpwd>
安裝PHP。
設(shè)置
remi
源并啟用remi-php83
。sudo rpm -Uvh https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm --nodeps sudo yum-config-manager --enable remi-php83
安裝PHP、PHP進(jìn)程管理器、MySQL擴(kuò)展模塊,同時(shí)啟動(dòng)PHP進(jìn)程管理器服務(wù)并設(shè)置開機(jī)自啟。
sudo yum install -y php php-fpm php-mysqlnd sudo systemctl start php-fpm sudo systemctl enable php-fpm
驗(yàn)證LNMP環(huán)境。
查詢
php-fpm
配置文件默認(rèn)監(jiān)聽地址。sudo grep 'listen =' /etc/php-fpm.d/www.conf
如果返回sock文件地址說明默認(rèn)監(jiān)聽sock文件。
如果返回
127.0.0.1:9000
說明默認(rèn)監(jiān)聽本地9000端口。
編輯
/etc/nginx/conf.d/default.conf
文件,在server
內(nèi)填寫PHP轉(zhuǎn)發(fā)規(guī)則。重要如果
php-fpm
監(jiān)聽地址為sock文件地址,需要修改規(guī)則127.0.0.1:9000
為unix:<path>
,<path>需要替換為您的sock文件地址。location / { index index.php index.html index.htm; } location ~ .php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
重啟Nginx服務(wù)使修改后的配置文件生效。
sudo systemctl restart nginx
在路徑
/usr/share/nginx/html
下新建test.php
文件,添加如下內(nèi)容(<username>
替換為數(shù)據(jù)庫用戶名,<password>
替換為數(shù)據(jù)庫密碼)。<?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"; ?>
在本地物理機(jī)上使用瀏覽器訪問
http://ECS實(shí)例公網(wǎng)IP/test.php
,返回success
說明PHP代理設(shè)置成功并成功連接MySQL數(shù)據(jù)庫。
Ubuntu20.04及以上
使用Nginx官方源安裝Nginx。
Nginx安裝前必要環(huán)境。
sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
導(dǎo)入官方nginx簽名密鑰。
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
設(shè)置apt倉庫。
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
更新軟件包列表并安裝nginx。
說明默認(rèn)安裝最新穩(wěn)定版本Nginx,如果對版本有要求可以使用
sudo apt list -a nginx
搜索支持的Nginx版本并將安裝命令替換為具體版本(例:安裝1.22.1-1~focal版本,修改命令為sudo apt install -y nginx=1.22.1-1~focal
)。sudo apt update -y && sudo apt install -y nginx
安裝MySQL數(shù)據(jù)庫并設(shè)置密碼。
更新軟件包列表并安裝MySQL服務(wù)器。
sudo apt update -y && sudo apt install -y mysql-server
將MySQL的配置文件中監(jiān)聽地址從
127.0.0.1
(即只監(jiān)聽本地連接)更改為0.0.0.0
(即監(jiān)聽所有可用網(wǎng)絡(luò)接口),從而允許遠(yuǎn)程連接到MySQL服務(wù)器。sudo sed -i "s/127.0.0.1/0.0.0.0/" /etc/mysql/mysql.conf.d/mysqld.cnf
修改數(shù)據(jù)庫root用戶主機(jī)部分從
localhost
更改為%
以允許從任何地址連接,同時(shí)修改root
用戶的密碼和身份認(rèn)證插件。您需要將命令中<newpwd>
替換為您的密碼。重要由于本地root用戶的默認(rèn)身份認(rèn)證插件是
auth_socket
,如果命令執(zhí)行后提示輸入密碼,請直接按回車跳過。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數(shù)據(jù)庫服務(wù)使配置生效。
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
安裝PHP8.4及相關(guān)組件,包括FPM和MySQL擴(kuò)展。
說明您可以通過
sudo apt search php
查看所有支持安裝的PHP版本,安裝其他版本需要修改命令中對應(yīng)版本號(例:安裝PHP8.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
驗(yàn)證LNMP環(huán)境。
查詢
php-fpm
配置文件默認(rèn)監(jiān)聽地址,<version>
需要替換為您的PHP版本(例:PHP8.4需要將<version>
替換為8.4)。sudo grep '^listen =' /etc/php/<version>/fpm/pool.d/www.conf
如果返回sock文件地址說明默認(rèn)監(jiān)聽sock文件。
如果返回
127.0.0.1:9000
說明默認(rèn)監(jiān)聽本地9000端口。
編輯
/etc/nginx/conf.d/default.conf
文件,在server
內(nèi)填寫PHP轉(zhuǎn)發(fā)規(guī)則,<listen>需要替換為您的監(jiān)聽地址(如果是sock文件需要在地址前方增加unix:
)。重要如果監(jiān)聽的sock文件,需要sock文件的權(quán)限設(shè)置為允許讀寫,您可以使用以下命令來更改權(quán)限
sudo chmod 666 <path>
,<path>更改為您的sock文件地址。location / { index index.php index.html index.htm; } location ~ .php$ { root /usr/share/nginx/html; fastcgi_pass <listen>; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
重啟Nginx服務(wù)使修改后的配置文件生效。
sudo systemctl restart nginx
在路徑
/usr/share/nginx/html
下新建test.php
文件,添加如下內(nèi)容(<username>
替換為數(shù)據(jù)庫用戶名,<password>
替換為數(shù)據(jù)庫密碼)。<?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"; ?>
在本地物理機(jī)上使用瀏覽器訪問
http://ECS實(shí)例公網(wǎng)IP/test.php
,返回success
說明PHP代理設(shè)置成功并成功連接MySQL數(shù)據(jù)庫。
常見問題
Q1:無法通過公網(wǎng)IP訪問test.php頁面
Q2:如何設(shè)置MySQL遠(yuǎn)程訪問
創(chuàng)建非root用戶遠(yuǎn)程登錄MySQL的賬號,并允許遠(yuǎn)程主機(jī)使用該賬號訪問MySQL。具體操作,請參見遠(yuǎn)程訪問MySQL數(shù)據(jù)庫。