第一步:安装 Nginx
bash
# Ubuntu/Debian sudo apt update sudo apt install nginx -y # CentOS/RHEL sudo yum install epel-release -y sudo yum install nginx -y # 启动 Nginx sudo systemctl start nginx sudo systemctl enable nginx
第二步:安装 MySQL/MariaDB
bash
# Ubuntu/Debian sudo apt install mysql-server -y # CentOS/RHEL sudo yum install mariadb-server -y # 启动 MySQL sudo systemctl start mysql sudo systemctl enable mysql # 安全配置(设置密码等) sudo mysql_secure_installation
第三步:安装 PHP 和 PHP-FPM(关键!)
这是连接 Nginx 和 PHP 的桥梁:
bash
# Ubuntu/Debian sudo apt install php-fpm php-mysql php-common php-cli php-curl php-json php-mbstring php-xml php-zip -y # CentOS/RHEL sudo yum install epel-release -y sudo yum install php php-fpm php-mysqlnd php-common php-cli php-curl php-json php-mbstring php-xml php-zip -y # 启动 PHP-FPM sudo systemctl start php-fpm sudo systemctl enable php-fpm
第四步:配置 Nginx 连接 PHP-FPM(最关键的一步!)
现在要修改 Nginx 配置,告诉它遇到 PHP 文件时转发给 PHP-FPM:
nginx
# 编辑 Nginx 配置文件
sudo vim /etc/nginx/sites-available/example.com
# 或者
sudo vim /etc/nginx/conf.d/example.conf
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
# 处理静态文件
location / {
try_files $uri $uri/ =404;
}
# 关键配置:处理 PHP 文件
location ~ \.php$ {
# 将 PHP 请求转发给 PHP-FPM
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # PHP-FPM 的 socket 文件
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
}
}
第五步:测试 PHP 连接 MySQL
创建一个测试文件来验证所有组件是否正常工作:
php
<?php
// /var/www/html/test.php
// 测试 PHP 信息
phpinfo();
// 测试 MySQL 连接
$servername = "localhost";
$username = "root";
$password = "your_password";
$dbname = "test";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "成功连接到 MySQL 数据库!";
// 创建测试表
$sql = "CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
)";
if ($conn->query($sql) === TRUE) {
echo "表创建成功!";
}
$conn->close();
?>
宝塔 vs 手动安装的对比
| 步骤 | 宝塔面板 | 手动安装 |
|---|---|---|
| 安装Nginx | 一键点击 | apt install nginx |
| 安装MySQL | 一键点击 | apt install mysql-server + 安全配置 |
| 安装PHP | 一键点击 | apt install php php-fpm php-mysql + 一堆扩展 |
| 配置PHP-FPM | 自动配置 | 手动编辑 /etc/php/8.1/fpm/pool.d/www.conf |
| Nginx连接PHP | 自动生成配置 | 手动编辑 nginx 配置文件,写 location ~ \.php$ 块 |
| 创建网站 | 填写域名即可 | 手动创建目录、配置权限、写 server block |
| SSL证书 | 一键申请 | 手动安装 Certbot,配置证书 |
| 防火墙 | 自动开放端口 | 手动 ufw allow 80,443 |
| 进程管理 | 自动监控 | 手动 systemctl status 查看 |
| 数据库管理 | phpMyAdmin 一键安装 | 手动下载配置 phpMyAdmin |
手动配置常见问题
1. PHP-FPM 找不到
bash
# 检查 PHP-FPM 是否运行 sudo systemctl status php-fpm # 查看 PHP-FPM 的 socket 文件位置 ls -la /var/run/php/
2. Nginx 返回 502 Bad Gateway
通常是 Nginx 无法连接到 PHP-FPM:
- 检查 PHP-FPM 是否运行
- 检查 nginx 配置中的
fastcgi_pass路径是否正确 - 查看错误日志:
sudo tail -f /var/log/nginx/error.log
3. 权限问题
bash
# 确保 nginx 用户能读取网站文件 sudo chown -R www-data:www-data /var/www/html sudo chmod -R 755 /var/www/html
为什么宝塔这么流行?
因为手动搭建一个 LNMP 环境需要:
- 安装 4-5 个核心软件
- 配置 3-4 个配置文件
- 记住 十几个配置指令
- 解决 各种依赖和版本冲突
- 管理 进程和服务
而宝塔把这些都变成了:
- ✅ 点一下安装
- ✅ 可视化配置
- ✅ 自动优化
- ✅ 统一管理
一个形象的比喻
- 宝塔面板:像宜家组装家具,图纸、工具、螺丝都给你配好,照着拼就行
- 手动安装:像从木材开始自己做家具,要自己锯木头、做榫卯、上漆