在 Linux 服务器上不使用任何面板,通过命令行直接安装和配置 Nginx、MySQL、PHP(LNMP 环境)是生产环境的常见做法。相比使用面板,这样能获得更好的性能和完全的控制权。
整个搭建过程可以分为四个主要步骤。下面是在 Debian 系统上的详细操作方法。
搭建流程概览
flowchart TD
A[更新系统并安装必要工具] --> B[安装 Nginx]
B --> C{选择数据库}
C -->|Debian 默认推荐| D[安装 MariaDB]
C -->|需要 MySQL 官方版本| E[添加 MySQL 官方源并安装]
D --> F[执行安全配置]
E --> F
F --> G[安装 PHP 及扩展]
G --> H[配置 Nginx 与 PHP 联动]
H --> I[创建测试文件验证环境]
🛠️ 第一步:系统初始化准备
在开始安装任何软件之前,先更新系统的软件包列表,并把现有软件都升级到最新版本。这样能避免后续安装时可能出现的依赖冲突问题。
bash
# 更新软件包列表并升级已安装的软件包
sudo apt update && sudo apt upgrade -y
🌐 第二步:安装 Nginx
Nginx 是一个高性能的 Web 服务器,直接通过 Debian 的官方软件源安装即可。
bash
# 安装 Nginx
sudo apt install nginx -y
# 启动 Nginx 并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
验证安装:安装完成后,在你的浏览器里访问服务器的 IP 地址(比如 http://你的服务器IP),如果能看到 Nginx 的欢迎页面,就说明安装成功了。
🗄️ 第三步:安装数据库
在 Debian 系统上安装数据库有两种主要选择:
选择一:安装 MariaDB (Debian 官方推荐)
MariaDB 是 MySQL 的一个开源分支,由 MySQL 原始团队开发,与 MySQL 完全兼容,而且 Debian 默认源里就提供了它,是稳定且推荐的选择。
bash
# 安装 MariaDB 服务器和客户端
sudo apt install mariadb-server mariadb-client -y
# 启动 MariaDB 并设置开机自启
sudo systemctl start mariadb
sudo systemctl enable mariadb
选择二:安装 Oracle MySQL (官方版本)
如果你需要 Oracle 官方提供的 MySQL 最新版本,可以添加它的官方软件源来安装。
bash
# 下载 MySQL APT 仓库配置包
wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
# 安装仓库配置包(安装过程中会出现配置界面,通常保持默认选项即可)
sudo dpkg -i mysql-apt-config_0.8.33-1_all.deb
# 更新软件包列表,使 MySQL 仓库生效
sudo apt update
# 安装 MySQL 服务器
sudo apt install mysql-server -y
# 启动 MySQL 并设置开机自启
sudo systemctl start mysql
sudo systemctl enable mysql
安全加固 (必须执行)
无论选择安装 MariaDB 还是 MySQL,安装完成后都必须运行这个安全脚本。它会引导你设置 root 密码、删除匿名用户、禁止 root 远程登录等,对保护数据库安全至关重要。
bash
sudo mysql_secure_installation
根据脚本的提示,一步步进行操作即可。
🐘 第四步:安装 PHP 及扩展
PHP 是一种服务器端脚本语言,用来处理动态网页请求。同时,需要安装 PHP-FPM 作为 Nginx 和 PHP 之间的桥梁。
bash
# 安装 PHP、PHP-FPM 以及常用的 PHP 扩展
sudo apt install php-fpm php-mysql php-gd php-mbstring php-curl php-xml php-common -y
常用 PHP 扩展说明:
扩展包 作用
php-fpm PHP 的 FastCGI 进程管理器,Nginx 通过它来处理 PHP 请求
php-mysql 让 PHP 可以连接和操作 MySQL/MariaDB 数据库
php-gd 一个用于图像处理的库,常用于生成验证码、缩略图等
php-mbstring 提供对多字节字符串(如 UTF-8 编码的中文)的支持
php-curl 让 PHP 可以发起网络请求,比如调用第三方 API
php-xml 用于解析 XML 或 HTML 数据
安装完成后,用下面的命令启动 PHP-FPM 并把它设置为开机自启:
bash
# 注意:php8.2-fpm 中的版本号可能与你的系统略有差异,请用 php-fpm -v 查看具体版本
sudo systemctl start php8.2-fpm
sudo systemctl enable php8.2-fpm
⚙️ 第五步:配置 Nginx 与 PHP 协同工作
这一步是让 Nginx 能够处理 PHP 文件的核心。需要创建一个新的 Nginx 站点配置文件(也被称作“虚拟主机”)。
bash
# 为你的网站创建一个新的配置文件,将 'example.com' 替换为你的实际域名
sudo nano /etc/nginx/sites-available/example.com
然后,把下面的配置内容粘贴到文件里。记得把 server_name 和 root 路径里的 example.com 替换成你自己的信息。
nginx
server {
# 监听 IPv4 和 IPv6 的 80 端口
listen 80;
listen [::]:80;
# 你的域名
server_name example.com www.example.com;
# 网站文件存放的根目录
root /var/www/example.com;
# 默认索引文件,将 index.php 放在最前面
index index.php index.html index.htm;
# 处理通用请求
location / {
try_files $uri $uri/ =404;
}
# 处理 PHP 文件请求
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# 将请求转发给 PHP-FPM 的 Unix socket
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
# 禁止访问 .htaccess 等隐藏文件
location ~ /\.ht {
deny all;
}
}
配置关键点:
server_name: 绑定你自己的域名。
root: 你的网站文件应该放在这个目录里。
index index.php: 确保 index.php 被列为默认首页。
fastcgi_pass: 这里的 socket 路径必须和你的 PHP-FPM 配置文件中的路径一致。如果版本号不是 8.2,请根据 ls /run/php/ 的输出进行修改。
保存并启用配置:
bash
# 1. 创建网站根目录
sudo mkdir -p /var/www/example.com
# 2. 启用站点配置(创建软链接)
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
# 3. 测试 Nginx 配置文件是否有语法错误
sudo nginx -t
# 4. 如果测试通过,重新加载 Nginx 使配置生效
sudo systemctl reload nginx
✅ 第六步:验证 LNMP 环境
最后,创建一个 PHP 测试文件来验证 Nginx 能否正确地处理 PHP 请求。
bash
# 在网站根目录下创建一个名为 info.php 的文件
echo "" | sudo tee /var/www/example.com/info.php
现在,用你的浏览器访问 http://你的域名/info.php。如果能看到显示 PHP 版本及详细配置信息的页面,就说明 LNMP 环境已经成功搭建了。
安全提示:为了安全起见,测试完成后,建议立即删除这个 info.php 文件,以免泄露服务器的重要信息。
bash
sudo rm /var/www/example.com/info.php
💎 补充与总结
完成以上步骤后,你就拥有了一个完整的 LNMP 环境。下面是几个后续可以参考的方向:
配置 HTTPS:使用 Certbot 工具可以为你的网站免费申请并配置 SSL/TLS 证书,启用安全的 HTTPS 访问。
bash
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
配置防火墙:建议启用 UFW 防火墙,只允许必要的端口(如 22, 80, 443)通过,提高服务器安全性。
bash
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
总的来说,不使用面板的纯命令行方式搭建 LNMP 环境能让你更清晰地理解服务器各个组件是如何协同工作的。虽然第一步需要手动配置,但一旦搭建完成,它的运行会更透明,也更容易针对你的具体需求进行深度优化。