在 Alibaba Cloud Linux 3.2104 LTS(基于 Rocky Linux/AlmaLinux 生态,兼容 RHEL 9)上安装 LNMP 环境(Linux + Nginx + MySQL/MariaDB + PHP),推荐采用 DNF/YUM 包管理器配合官方源进行安装。以下是标准且安全的安装步骤:
✅ 前置准备
-
更新系统并安装基础工具
sudo dnf update -y sudo dnf install -y vim wget curl git epel-release -
确保防火墙与 SELinux 配置合理(生产环境建议调整)
# 开放必要端口(80, 443, 3306 等) sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload
临时允许(测试环境可跳过 SELinux 限制,生产建议配置策略而非关闭)
sudo setenforce 0 # 仅用于调试;生产请配置 proper policy
---
### 📦 步骤一:安装 Nginx
Alibaba Cloud Linux 3 默认仓库已包含较新版本的 Nginx(≥1.24):
```bash
sudo dnf install -y nginx
sudo systemctl enable --now nginx
sudo firewall-cmd --add-service=http --permanent && sudo firewall-cmd --reload
✅ 验证:
curl http://localhost
# 应返回 "Welcome to nginx!" 或默认页面
systemctl status nginx
🗄️ 步骤二:安装 MariaDB(MySQL 替代方案,推荐)
⚠️ 注意:RHEL 9+ 系列不再默认提供 MySQL 社区版 RPM,推荐使用 MariaDB(完全兼容 MySQL API)。
sudo dnf install -y mariadb-server mariadb
sudo systemctl enable --now mariadb
🔐 初始化安全设置(强烈建议执行)
sudo mysql_secure_installation
按提示操作:
- 设置 root 密码(避免留空)
- 删除匿名用户
- 禁止 root 远程登录
- 移除 test 数据库
- 重载权限表
✅ 创建业务数据库与用户(示例)
sudo mysql -u root -p <<EOF
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF
☕ 步骤三:安装 PHP + 常用扩展
Alibaba Cloud Linux 3 使用 php 模块(基于 Streamlined PHP 8.x):
# 启用 EPEL 和 CodeReady Builder(部分扩展需 CRB)
sudo dnf config-manager --set-enabled crb
# 安装 PHP 及核心扩展(Nginx 常用)
sudo dnf install -y php-fpm php-mysqlnd php-gd php-mbstring php-xml php-curl php-zip php-intl php-opcache
💡 可选扩展:
php-pdo(通常已含)php-json,php-session,php-dom(一般默认启用)- 如需 Redis 支持:
php-pecl-redis(需先dnf install -y redis+pecl install redis)
🛠️ 配置 PHP-FPM 监听 Unix Socket(推荐 Nginx 高效模式)
编辑 /etc/php-fpm.d/www.conf:
listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
user = apache
group = apache
注:Alibaba Cloud Linux 3 中 PHP-FPM 默认用户为
apache(非nobody),组同理。
重启服务:
sudo systemctl restart php-fpm
sudo chmod 755 /run/php-fpm # 确保 socket 目录可写
🔗 步骤四:配置 Nginx 支持 PHP
创建站点配置文件(如 /etc/nginx/conf.d/myapp.conf):
server {
listen 80;
server_name your-domain.com www.your-domain.com;
root /var/www/html/myapp;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# PHP 处理
location ~ .php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
}
# 静态资源缓存优化(可选)
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}
✅ 创建测试目录与文件:
sudo mkdir -p /var/www/html/myapp
sudo chown -R nginx:nginx /var/www/html/myapp
sudo chmod -R 755 /var/www/html/myapp
cat > /var/www/html/myapp/info.php <<'PHP'
<?php
phpinfo();
?>
PHP
✅ 测试配置并重载 Nginx:
sudo nginx -t
sudo systemctl reload nginx
访问 http://your-ip/info.php → 应显示 PHP 信息页。
🔒 安全加固建议(生产环境必做)
| 项目 | 操作 |
|---|---|
| 禁用目录浏览 | 在 server {} 中添加 autoindex off; |
| 隐藏版本号 | nginx.conf 全局加 server_tokens off; |
| PHP 安全配置 | 编辑 /etc/php.ini:expose_php = Offdisable_functions = exec,passthru,shell_exec,... |
| 数据库远程访问 | 默认禁止;如需远程,修改 bind-address = 127.0.0.1 → 特定 IP,并设白名单防火墙规则 |
| 定期更新 | sudo dnf update -y(建议每周自动更新) |
🧪 验证完整链路
- 访问
http://your-ip/→ 显示 Nginx 欢迎页或你的首页 - 访问
http://your-ip/info.php→ 显示 PHP 版本、加载的模块、数据库连接状态 - 编写简单 PHP 脚本测试 DB 连接(见下方示例):
<?php
// test_db.php
try {
$pdo = new PDO('mysql:host=localhost;dbname=myapp;charset=utf8mb4', 'myapp_user', 'StrongPassword123!');
echo "✅ Database connection successful!";
} catch (PDOException $e) {
echo "❌ Error: " . $e->getMessage();
}
?>
📥 可选:一键脚本(供参考)
若需自动化部署,可使用以下简化脚本(生产环境请谨慎审查):
#!/bin/bash
set -e
echo "🚀 Installing LNMP on Alibaba Cloud Linux 3..."
dnf update -y
dnf install -y nginx mariadb-server php-fpm php-mysqlnd php-gd php-mbstring php-xml php-curl php-zip php-intl
systemctl enable --now nginx mariadb php-fpm
mysql_secure_installation <<< $'nynynynynyn'
mkdir -p /var/www/html/myapp
chown -R nginx:nginx /var/www/html/myapp
cat > /etc/nginx/conf.d/default.conf <<'EOF'
server {
listen 80;
server_name _;
root /var/www/html;
index index.php index.html;
location ~ .php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
EOF
nginx -t && systemctl reload nginx
echo "✅ LNMP installed successfully!"
需要我提供:
- Docker 化部署方案?
- HTTPS 证书申请(Let’s Encrypt)配置?
- 性能调优参数(Nginx/PHP-Max-Children/DB 缓冲池)?
- 监控告警集成(Prometheus + Grafana)?
欢迎告诉我您的具体场景,我可进一步定制方案。
PHPWP博客