本文介绍如何在ECS实例上手动部署LNMP环境。
前提条件
本教程手动部署LNMP环境支持一键运行完成环境安装,您可以直接运行代码。一键运行
部署LNMP环境
Alibaba Cloud Linux 3/CentOS 8
- 使用Nginx官方源安装Nginx。 说明- 默认安装最新稳定版本Nginx,如果对版本有要求可以使用 - sudo dnf search nginx --showduplicates搜索支持的Nginx版本并将安装命令替换为具体版本(例:安装- 1.24.0版本,修改命令为- sudo dnf -y install nginx-1.24.0)。- #添加Nginx官方源到系统中 sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF' [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 EOF #安装Nginx sudo dnf -y install nginx #启动Nginx服务并设置为开机自启 sudo systemctl start nginx sudo systemctl enable nginx
- 安装MySQL数据库。 说明- Alibaba Cloud Linux 3您需要安装 - compat-openssl10与旧版本OpenSSL库兼容。- sudo yum install -y compat-openssl10- #添加MySQL官方源 sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el8-1.noarch.rpm #安装MySQL服务 sudo dnf install -y mysql-server #启动MySQL服务并设置开机自启 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。 说明- 本文默认使用了PHP8.4,如果对版本有要求需要将模块名称修改成对应版本(例:安装PHP8.1需要将模块名称修改为 - php:remi-8.1)。- #设置remi源并启用php:remi-8.4 sudo rpm -Uvh http://mirrors.cloud.aliyuncs.com/remi/enterprise/remi-release-8.rpm --nodeps sudo sed -i "s/\$releasever/8/g" /etc/yum.repos.d/remi-modular.repo /etc/yum.repos.d/remi-safe.repo /etc/yum.repos.d/remi.repo sudo dnf install -y yum-utils && sudo dnf module enable -y php:remi-8.4 #安装PHP、PHP进程管理器、MySQL扩展模块 sudo dnf install -y php php-fpm php-mysqlnd #启动PHP进程管理器服务并设置开机自启 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端口。
 
- 使用 - tee命令编辑- /etc/nginx/conf.d/default.conf文件添加PHP转发规则。重要- 如果 - php-fpm监听地址为- 127.0.0.1:9000需要修改规则fastcgi_pass字段为- 127.0.0.1:9000- sudo tee /etc/nginx/conf.d/default.conf <<-'EOF' server { listen 80; server_name localhost; root /usr/share/nginx/html; 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; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } EOF
- 重启Nginx服务使修改后的配置文件生效。 - sudo systemctl restart nginx
- 使用 - tee命令在路径- /usr/share/nginx/html下新建- test.php的 PHP 文件,并添加用于测试数据库连接的代码。(- <username>替换为数据库用户名,- <password>替换为数据库密码)。- sudo tee /usr/share/nginx/html/test.php <<-'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
- 使用Nginx官方源安装Nginx。 说明- 默认安装最新稳定版本Nginx,如果对版本有要求可以使用 - sudo yum search nginx --showduplicates搜索支持的Nginx版本并将安装命令替换为具体版本(例:安装- 1.24.0版本,修改命令为- sudo yum -y install nginx-1.24.0)。- #添加Nginx官方源到系统中 sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF' [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 EOF #安装Nginx sudo yum -y install nginx #启动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服务 sudo yum install -y mysql-server #启动MySQL服务并设置开机自启 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 http://mirrors.cloud.aliyuncs.com/remi/enterprise/remi-release-7.rpm --nodeps sudo sed -i "s/\$releasever/7/g" /etc/yum.repos.d/remi-modular.repo /etc/yum.repos.d/remi-safe.repo /etc/yum.repos.d/remi.repo sudo yum install -y yum-utils && sudo yum-config-manager --enable remi-php83 #安装PHP、PHP进程管理器、MySQL扩展模块 sudo yum install -y php php-fpm php-mysqlnd #启动PHP进程管理器服务并设置开机自启 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端口。
 
- 使用 - tee命令编辑- /etc/nginx/conf.d/default.conf文件添加PHP转发规则。重要- 如果 - php-fpm监听地址为sock文件地址,需要修改规则- 127.0.0.1:9000为- unix:<path>,<path>需要替换为您的sock文件地址。- sudo tee /etc/nginx/conf.d/default.conf <<-'EOF' server { listen 80; server_name localhost; root /usr/share/nginx/html; 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; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } EOF
- 重启Nginx服务使修改后的配置文件生效。 - sudo systemctl restart nginx
- 使用 - tee命令在路径- /usr/share/nginx/html下新建- test.php的 PHP 文件,并添加用于测试数据库连接的代码。(- <username>替换为数据库用户名,- <password>替换为数据库密码)。- sudo tee /usr/share/nginx/html/test.php <<-'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及以上
- 使用Nginx官方源安装Nginx。 - #更新系统已安装软件并更新包管理工具 sudo apt update -y #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 sudo apt install -y nginx
- 更新软件包列表并安装MySQL服务器。 - sudo apt update -y && sudo apt install -y mysql-server
- 修改MySQL服务器 - root用户的密码和身份认证插件。您需要将命令中- <newpwd>替换为您的密码。重要- 由于本地root用户的默认身份认证插件是 - auth_socket,命令执行后提示输入密码,请直接按回车跳过。- sudo mysql -uroot -p -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '<newpwd>';" -e "FLUSH PRIVILEGES;"
- 安装PHP。 说明- 您可以通过 - sudo apt search php查看所有支持安装的PHP版本,安装其他版本需要修改命令中对应版本号(例如:安装PHP8.1需修改命令- sudo apt install -y php8.1 php8.1-fpm php8.1-mysql)。- #安装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 install -y php8.4 php8.4-fpm php8.4-mysql
- 验证LNMP环境。 - 查询 - 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端口。
 
- 使用 - tee命令编辑- /etc/nginx/conf.d/default.conf文件添加PHP转发规则,<listen>需要替换为您的监听地址(如果是sock文件需要在地址前方增加- unix:)。重要- 如果监听的sock文件,需要sock文件的权限设置为允许读写,您可以使用以下命令来更改权限 - sudo chmod 666 <path>,<path>更改为您的sock文件地址。- #移除默认站点配置 sudo rm -f /etc/nginx/sites-enabled/* #写入配置文件 sudo tee /etc/nginx/conf.d/default.conf <<-'EOF' server { listen 80; server_name localhost; root /usr/share/nginx/html; 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; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } EOF
- 重启Nginx服务使修改后的配置文件生效。 - sudo systemctl restart nginx
- 使用 - tee命令在路径- /usr/share/nginx/html下新建- test.php的 PHP 文件,并添加用于测试数据库连接的代码。(- <username>替换为数据库用户名,- <password>替换为数据库密码)。- sudo tee /usr/share/nginx/html/test.php <<-'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用户。
Nginx配置文件、日志文件在什么位置
- Nginx的日志文件默认存放在 - /var/log/nginx/。
- Nginx的主配置文件默认 - /etc/nginx/nginx.conf。
- Nginx默认读取 - /etc/nginx/conf.d目录下所有以- .conf为后缀的附加配置文件。