手把手教你部署LNMP环境:从零搭建Web服务器

手把手教你部署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

按照提示完成以下配置:

  1. 设置root用户密码(建议使用强密码)
  2. 移除匿名用户
  3. 禁止root远程登录
  4. 删除测试数据库
  5. 重载权限表

第三步:安装和配置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服务。记住定期更新系统和软件包,保持环境的安全性和稳定性。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容