LNMP(代表Linux、Nginx、MySQL和PHP)是目前主流的网站服务器架构之一,适合运行大型和高并发的网站应用,例如电子商务网站、社交网络、内容管理系统等。本文介绍如何在ECS实例上手动部署指定版本的LNMP环境。
前提条件
部署LNMP环境
Alibaba Cloud Linux 3/CentOS 8
更新包管理工具。
sudo dnf update -y
使用Nginx官方源安装Nginx。
重要CentOS 8的源地址
http://mirror.centos.org/centos/8/
内容已移除,当您在阿里云上继续使用默认配置的CentOS 8的源会发生报错。具体操作,请参见CentOS 8 EOL如何切换源?设置Nginx官方源地址,在目录
/etc/yum.repos.d/
下新建nginx.repo
文件,并添加如下内容。[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,同时启动Nginx并设置开机自启。
说明默认安装最新稳定版本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数据库。
添加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服务,同时启动MySQL服务并设置开机自启。
sudo dnf 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
源并启用php:remi-8.4
。说明本文默认使用了PHP8.4,如果对版本有要求需要将模块名称修改成对应版本(例:安装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进程管理器、MySQL扩展模块,同时启动PHP进程管理器服务并设置开机自启。
sudo dnf install -y php php-fpm php-mysqlnd sudo systemctl start php-fpm sudo systemctl enable php-fpm
验证LNMP环境。
查询
php-fpm
配置文件默认监听地址。sudo grep 'listen =' /etc/php-fpm.d/www.conf
如果返回sock文件地址说明默认监听sock文件。
如果返回
127.0.0.1:9000
说明默认监听本地9000端口。
编辑
/etc/nginx/conf.d/default.conf
文件,在server
内填写PHP转发规则。重要如果
php-fpm
监听地址为127.0.0.1:9000
需要修改规则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服务使修改后的配置文件生效。
sudo systemctl restart nginx
在路径
/usr/share/nginx/html
下新建test.php
文件,添加如下内容(<username>
替换为数据库用户名,<password>
替换为数据库密码)。<?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"; ?>
在本地物理机上使用浏览器访问
http://ECS实例公网IP/test.php
,返回success
说明PHP代理设置成功并成功连接MySQL数据库。
Alibaba Cloud Linux 2/CentOS 7
更新包管理工具。
sudo yum update -y
使用Nginx官方源安装Nginx。
设置Nginx官方源地址,在目录
/etc/yum.repos.d/
下新建nginx.repo
文件,并添加如下内容。[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,同时启动Nginx并设置开机自启。
说明默认安装最新稳定版本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数据库。
添加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
。sudo rpm -Uvh https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm --nodeps 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
验证LNMP环境。
查询
php-fpm
配置文件默认监听地址。sudo grep 'listen =' /etc/php-fpm.d/www.conf
如果返回sock文件地址说明默认监听sock文件。
如果返回
127.0.0.1:9000
说明默认监听本地9000端口。
编辑
/etc/nginx/conf.d/default.conf
文件,在server
内填写PHP转发规则。重要如果
php-fpm
监听地址为sock文件地址,需要修改规则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服务使修改后的配置文件生效。
sudo systemctl restart nginx
在路径
/usr/share/nginx/html
下新建test.php
文件,添加如下内容(<username>
替换为数据库用户名,<password>
替换为数据库密码)。<?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"; ?>
在本地物理机上使用浏览器访问
http://ECS实例公网IP/test.php
,返回success
说明PHP代理设置成功并成功连接MySQL数据库。
Ubuntu20.04及以上
使用Nginx官方源安装Nginx。
Nginx安装前必要环境。
sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
导入官方nginx签名密钥。
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
设置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。
说明默认安装最新稳定版本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数据库并设置密码。
更新软件包列表并安装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
,如果命令执行后提示输入密码,请直接按回车跳过。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
安装PHP8.4及相关组件,包括FPM和MySQL扩展。
说明您可以通过
sudo apt search php
查看所有支持安装的PHP版本,安装其他版本需要修改命令中对应版本号(例:安装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
验证LNMP环境。
查询
php-fpm
配置文件默认监听地址,<version>
需要替换为您的PHP版本(例:PHP8.4需要将<version>
替换为8.4)。sudo grep '^listen =' /etc/php/<version>/fpm/pool.d/www.conf
如果返回sock文件地址说明默认监听sock文件。
如果返回
127.0.0.1:9000
说明默认监听本地9000端口。
编辑
/etc/nginx/conf.d/default.conf
文件,在server
内填写PHP转发规则,<listen>需要替换为您的监听地址(如果是sock文件需要在地址前方增加unix:
)。重要如果监听的sock文件,需要sock文件的权限设置为允许读写,您可以使用以下命令来更改权限
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服务使修改后的配置文件生效。
sudo systemctl restart nginx
在路径
/usr/share/nginx/html
下新建test.php
文件,添加如下内容(<username>
替换为数据库用户名,<password>
替换为数据库密码)。<?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"; ?>
在本地物理机上使用浏览器访问
http://ECS实例公网IP/test.php
,返回success
说明PHP代理设置成功并成功连接MySQL数据库。