手把手教你部署LNMP环境:从零搭建Web服务器
在现代Web开发中,LNMP环境(Linux + Nginx + MySQL + PHP)因其高性能和稳定性,成为搭建动态网站的首选方案。本文将详细指导您如何在云服务器上手动部署LNMP环境,满足对底层环境完全控制的生产需求。
为什么选择手动部署LNMP环境?
相比于使用预配置镜像,手动部署LNMP环境有以下优势:
- 完全掌控每个组件的配置文件
- 可根据需求定制安全加固策略
- 更好地理解各组件之间的协作关系
- 便于后续维护和故障排查
准备工作
环境要求
- 云服务器ECS实例(推荐内存不低于2GB)
- 公网IP地址或已绑定弹性公网IP
- 操作系统:Alibaba Cloud Linux、CentOS或Ubuntu
安全组配置
在开始部署前,需要在安全组中添加入方向规则:
- 协议类型:TCP
- 端口范围:80
- 授权对象:0.0.0.0/0(或根据需要限制访问IP)
系统更新
登录ECS实例后,首先更新系统软件包:
Alibaba Cloud Linux/CentOS:
sudo yum update -y
Ubuntu:
sudo apt update -y && sudo apt upgrade -y
第一步:安装和配置Nginx
Nginx作为高性能的Web服务器,是LNMP架构中的核心组件。
添加Nginx官方源并安装
CentOS/Alibaba Cloud Linux:
# 添加Nginx官方源
sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF'
[nginx-stable]
name=nginx stable repo baseurl=https://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF # 安装Nginx sudo yum -y install nginx
Ubuntu:
# 安装依赖
sudo apt install -y curl gnupg2 ca-certificates lsb-release
# 导入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 update && sudo apt install -y nginx
启动Nginx服务
sudo systemctl enable --now nginx
验证安装
curl http://127.0.0.1
如果返回Nginx欢迎页的HTML代码,说明安装成功。
第二步:安装和加固MySQL
MySQL作为关系型数据库,负责存储网站数据。
安装MySQL
CentOS/Alibaba Cloud Linux:
# 添加MySQL仓库
sudo rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm
# 安装MySQL服务器
sudo yum install -y mysql-server
Ubuntu:
sudo apt install -y mysql-server
启动MySQL服务
CentOS/Alibaba Cloud Linux:
sudo systemctl enable --now mysqld
Ubuntu:
sudo systemctl enable --now mysql
安全加固
MySQL默认配置存在安全风险,需要运行安全加固脚本:
sudo mysql_secure_installation
按照提示完成以下配置:
- 设置root用户密码(建议使用强密码)
- 移除匿名用户
- 禁止root远程登录
- 删除测试数据库
- 重载权限表
第三步:安装和配置PHP
PHP是处理动态网页的核心组件,需要安装PHP-FPM来处理Web请求。
添加PHP源并安装
CentOS/Alibaba Cloud Linux:
# 安装Remi源
sudo yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# 启用PHP 8.2模块
sudo yum-config-manager --enable remi-php82
# 安装PHP相关组件
sudo yum install -y php php-fpm php-mysqlnd
Ubuntu:
# 添加ondrej/php PPA源
sudo add-apt-repository -y ppa:ondrej/php
# 安装PHP 8.2
sudo apt install -y php8.2 php8.2-fpm php8.2-mysql
启动PHP-FPM服务
CentOS/Alibaba Cloud Linux:
sudo systemctl enable --now php-fpm
Ubuntu:
sudo systemctl enable --now php8.2-fpm
第四步:配置Nginx支持PHP解析
为了让Nginx能够处理PHP文件,需要配置PHP解析转发。
备份配置文件
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
获取PHP-FPM通信地址
# CentOS/Alibaba Cloud Linux
PHP_FPM_LISTEN=$(sudo sed -n 's/^\s*listen\s*=\s*//p' /etc/php-fpm.d/www.conf | head -n 1)
# Ubuntu
PHP_FPM_LISTEN=$(sudo sed -n 's/^\s*listen\s*=\s*//p' /etc/php/8.2/fpm/pool.d/www.conf | head -n 1)
配置Nginx转发规则
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;
}
location ~ \.php$ {
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
第五步:验证LNMP环境
验证PHP解析
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/html/phpinfo.php
在浏览器中访问 http://<服务器公网IP>/phpinfo.php,如果显示PHP配置信息页面,说明配置成功。验证后请及时删除该文件。
验证数据库连接
# 登录MySQL
sudo mysql -u root -p
# 创建测试数据库和用户
CREATE DATABASE webapp;
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
GRANT ALL PRIVILEGES ON webapp.* TO 'webuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
创建测试文件:
sudo tee /usr/share/nginx/html/test.php <<-'EOF'
<?php
$servername = "localhost";
$username = "webuser";
$password = "YourStrongPassword123!";
$dbname = "webapp";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("数据库连接失败: " . $conn->connect_error);
}
echo "数据库连接成功!";
?>
EOF
在浏览器中访问 http://<服务器公网IP>/test.php,显示”数据库连接成功!”即表示LNMP环境部署完成。验证后请及时删除该文件。
常见问题排查
502 Bad Gateway错误
- 检查PHP-FPM服务状态:
sudo systemctl status php-fpm - 核对Nginx配置中的
fastcgi_pass路径是否正确 - 检查Socket文件权限
访问超时
- 确认安全组已放行80端口
- 检查防火墙设置
- 验证Nginx服务是否正常运行
总结
通过本文的详细步骤,您已经成功部署了完整的LNMP环境。手动部署LNMP环境虽然需要更多配置步骤,但能够让您完全掌控每个组件的配置,为后续的网站部署和性能优化打下坚实基础。
部署LNMP环境是搭建动态网站的第一步,接下来您可以根据需求部署WordPress、Magento等应用,构建属于自己的Web服务。记住定期更新系统和软件包,保持环境的安全性和稳定性。


暂无评论内容