云服务器LNMP安装部署流程,两种方法任选,2026最新教程,阿里云服务器如何部署安装LNMP程序环境?超简单,看完就能上手!阿小云整理阿里云官方关于LNMP的两种部署方式,一个是快捷部署,一个是手动部署。LNMP架构是一种流行的网站服务器解决方案,它结合了Linux操作系统、Nginx Web服务器、MySQL数据库和PHP编程语言。本文介绍部署LNMP环境的几种方式,以及各自的适用场景,您可以按需选择任意一种部署LNMP环境的方式。
本文是以云服务器ECS为例:https://www.aliyun.com/product/ecs 如下:
快速部署:扩展程序部署LNMP环境
本文介绍利用扩展程序快速部署LNMP环境的方法。您无需了解安装细节,因为系统运维管理提供的扩展程序将自动执行安装过程。
说明
如果需要批量安装,您可以登录系统运维管理控制台,左侧菜单选择服务器管理 > 扩展程序,选择LNMP一键安装。
前提条件
- 安全组入方向规则已放行80端口。具体操作,请参见添加安全组规则。
- 使用本功能时,您的实例需满足以下条件。
- ECS实例必须处于运行中状态。
- 实例已分配固定公网IP地址或绑定弹性公网IP(EIP)。如您不清楚如何开通公网,请参见开通公网。
- ECS实例已安装云助手,并且云助手状态为正常。
- 如果使用RAM用户,请根据以下自定义权限策略,为RAM用户配置最小必要权限,以确保遵循最小权限原则。
自定义权限JSON
操作步骤
- 登录ECS控制台-实例,点击目标ECS实例的ID,打开其详情页面。
- 在ECS实例详情页面,选择定时与自动化任务 > 安装/卸载扩展程序 > 安装扩展程序。
- 在安装扩展程序对话框,要安装的扩展程序选择公共扩展程序,在下拉搜索框中找到并选择LNMP一键安装,然后单击下一步,按照界面提示完成操作。
当任务状态为已完成时,说明LNMP已部署。
说明
MySQL root用户密码请查看扩展程序的任务详情,扩展信息内容。
- 在本地物理机上使用浏览器访问
http://ECS实例公网IP/phpinfo.php,验证LNMP是否已成功安装。
说明
外部访问ECS实例,安全组入方向规则需要放行80端口。
手动部署:LNMP环境
在ECS实例上通过包管理器构建LNMP环境,支持 Alibaba Cloud Linux、CentOS 及 Ubuntu 多系统。采用手动部署方式,解决镜像环境难以定制配置文件的痛点,满足 WordPress、Magento 等动态网站对底层环境完全控制与安全加固的生产需求。
实施步骤
为保证流畅体验,建议ECS实例内存不低于2 GiB。
一、准备工作
配置公网IP与安全组以确保实例可被外部访问,并更新系统组件以修复潜在安全漏洞。
- 配置公网访问。
确保ECS实例已分配公网IP或已绑定弹性公网IP(EIP),以允许公网访问。具体操作,请参见开通公网。 - 添加安全组放行规则。
在ECS实例关联的安全组中添加入方向规则,放行 TCP 协议的 80 端口(用于HTTP访问)。具体操作,请参见添加安全组规则。 - 更新系统及软件包。
阿小云以Alibaba Cloud Linux 3 / CentOS 8操作系统为例,
- 登录ECS实例。
- 访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。
- 进入目标实例详情页,单击远程连接,选择通过Workbench远程连接。根据页面提示登录,进入终端页面。
- 将系统已有的软件包列表和软件更新到最新版本。
sudo dnf update -y
二、安装并配置Nginx
添加Nginx官方源并安装。
#添加Nginx官方源 sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF' [nginx-stable] name=nginx stable repo baseurl=https://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
- 启动并设置开机自启。
enable --now参数会同时完成启动服务和设置开机自启两个操作。
sudo systemctl enable --now nginx
- 验证Nginx服务。
执行curl http://127.0.0.1,如果终端输出了Nginx的欢迎页HTML代码,说明安装成功。
三、安装并加固MySQL
- 安装并启动MySQL。
# Alibaba Cloud Linux 3 需要安装compat-openssl10以兼容旧版OpenSSL if [ -f /etc/os-release ]; then . /etc/os-release if [ "$ID" = "alinux" ] && [ "$VERSION_ID" = "3" ]; then sudo yum install -y compat-openssl10 fi fi # 添加MySQL 8.4的YUM仓库 sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el8-1.noarch.rpm # 安装MySQL服务 sudo dnf install -y mysql-server
启动并设置开机自启。
sudo systemctl enable --now mysqld
- 设置安全加固。MySQL默认配置存在安全风险(如允许匿名登录、允许root远程登录),需运行其自带的安全加固脚本。
- 获取初始root密码。
仅适用于Alibaba Cloud Linux/CentOS(Ubuntu默认使用免密登录),获取的密码用于后续步骤重置密码。
# 从日志中提取并显示临时密码 sudo grep 'temporary password' /var/log/mysqld.log
- 运行加固脚本。执行命令
sudo mysql_secure_installation,并根据提示完成以下建议配置:
- 重置root账号密码:使用上一步获取的临时密码登录并设置新密码。
建议设置一个包含大小写字母、数字和特殊符号,且长度不低于12位的强密码。
- 移除匿名用户:输入Y。
- 禁止root远程登录:输入Y。
- 删除测试库:输入 Y。
- 重载权限表:输入 Y。
四、安装并配置PHP
安装PHP、PHP-FPM(用于处理Web请求)以及连接MySQL的扩展组件。
# 添加PHP源 cat > /etc/yum.repos.d/remi.repo << 'EOF' [remi] name=Remi\'s RPM Repository for Enterprise Linux 8 - x86_64 baseurl=https://rpms.remirepo.net/enterprise/8/remi/x86_64/ enabled=1 gpgcheck=1 gpgkey=https://rpms.remirepo.net/RPM-GPG-KEY-remi2024 [remi-safe] name=Remi Safe Repository baseurl=https://rpms.remirepo.net/enterprise/8/safe/x86_64/ enabled=1 gpgcheck=1 gpgkey=https://rpms.remirepo.net/RPM-GPG-KEY-remi2024 EOF # 导入 GPG Key rpm --import https://rpms.remirepo.net/RPM-GPG-KEY-remi2024 # 安装工具并启用模块 dnf install -y yum-utils # 安装 PHP dnf install -y php php-fpm php-mysqlnd
- 添加PHP源并安装。
- 启动并设置PHP-FPM开机自启。
sudo systemctl enable --now php-fpm
五、配置Nginx支持PHP解析
默认情况下,Nginx 仅能处理静态网页(如 HTML、图片)。为支持动态网站(如WordPress),需配置Nginx将.php文件的请求转发至PHP-FPM进行处理。否则,访问PHP页面时会出现文件被直接下载或无法显示的问题。
备份Nginx配置文件。
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
获取PHP服务的通信地址。
Nginx通过该通信地址将PHP请求转发至PHP-FPM进行处理。
PHP_FPM_LISTEN=$(sudo sed -n 's/^\s*listen\s*=\s*//p' /etc/php-fpm.d/www.conf | head -n 1) echo "$PHP_FPM_LISTEN"
配置Nginx转发规则,将.php请求正确转发至PHP服务。
根据上一步的输出结果,将下方命令中的 <PHP通信地址> 替换为实际的通信地址后执行:
- 若输出为文件路径(如 /run/php-fpm/www.sock):使用的通信方式为Unix Socket(仅限本地通信,性能更好且更安全),PHP通信地址格式为
unix:文件路径,例如unix:/run/php-fpm/www.sock。 - 若输出为 IP:端口(如 127.0.0.1:9000):通信方式为TCP(支持跨主机通信,适用于PHP-FPM与Nginx分离部署的场景),可以直接作为PHP通信地址。
sudo tee /etc/nginx/conf.d/default.conf <<-'EOF' server { listen 80; server_name localhost; root /usr/share/nginx/html; # 设置默认首页文件 index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } # 将.php请求转发给PHP-FPM location ~ \.php$ { fastcgi_pass <PHP通信地址>; 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
检查配置文件。
sudo nginx -t
- 如果返回结果中包含关键字 successful,表示配置正确,可执行下一步。
- 如果返回结果中包含 failed,表示配置错误。请检查命令中的路径是否替换正确,或执行以下命令从备份中恢复配置文件:
sudo mv /etc/nginx/conf.d/default.conf.bak /etc/nginx/conf.d/default.conf
重启Nginx使配置生效。
sudo systemctl restart nginx
六、验证LNMP环境
创建测试文件,验证Nginx能否解析PHP,以及PHP能否连接到MySQL数据库,以确保LNMP各组件协同工作正常。
验证Nginx解析。
- 创建测试文件:生成一个包含
phpinfo()函数的文件,用于输出当前PHP环境的详细配置。
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/html/phpinfo.php
- 浏览器验证:访问
http://<ECS公网IP>/phpinfo.php。
- 成功标志:页面正常渲染并展示PHP环境配置信息。
- 失败标志:显示 "File not found" 或直接下载了文件。
- 清理测试文件:验证成功后,必须删除该文件。
phpinfo页面包含敏感信息,暴露于公网会带来安全风险。
验证PHP与MySQL的连通性。创建一个PHP脚本,用于测试PHP能否通过mysqlnd扩展连接到数据库。
- 创建数据库和用户。
使用root账户登录MySQL(输入步骤三中设置的root账号密码)。
sudo mysql -u root -p
- 在
mysql>提示符下执行以下命令,创建名为webapp的库和webuser用户,并授予其对该数据库的所有权限。
CREATE DATABASE webapp; /* 将<YourPassword>替换为一个强密码。*/ CREATE USER 'webuser'@'localhost' IDENTIFIED BY '<YourPassword>'; GRANT ALL PRIVILEGES ON webapp.* TO 'webuser'@'localhost'; FLUSH PRIVILEGES; EXIT;
- 创建数据库连接测试文件。将下面命令中的
<YourPassword>替换为上一步设置的用户密码后再执行。
sudo tee /usr/share/nginx/html/test.php <<-'EOF' <?php $servername = "localhost"; $username = "webuser"; $password = "<YourPassword>"; $dbname = "webapp"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检测连接 if ($conn->connect_error) { die("数据库连接失败: " . $conn->connect_error); } echo "数据库连接成功!"; ?> EOF
- 浏览器验证:访问 http://<ECS公网IP>/test.php。当页面显示数据库连接成功!表示测试通过。
- 清理测试文件:该脚本内包含明文的数据库账号密码,测试通过后必须立即删除,防止凭据泄露。
更多关于阿里云服务器实践教程,请移步到阿里云服务器ECS官方页面查看:https://www.aliyun.com/product/ecs