Alibaba Cloud Linux 3.2104 LTS安装LNMP环境步骤是什么?

在 Alibaba Cloud Linux 3.2104 LTS(基于 Rocky Linux/AlmaLinux 生态,兼容 RHEL 9)上安装 LNMP 环境(Linux + Nginx + MySQL/MariaDB + PHP),推荐采用 DNF/YUM 包管理器配合官方源进行安装。以下是标准且安全的安装步骤:


✅ 前置准备

  1. 更新系统并安装基础工具

    sudo dnf update -y
    sudo dnf install -y vim wget curl git epel-release
  2. 确保防火墙与 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 = Off
disable_functions = exec,passthru,shell_exec,...
数据库远程访问 默认禁止;如需远程,修改 bind-address = 127.0.0.1 → 特定 IP,并设白名单防火墙规则
定期更新 sudo dnf update -y(建议每周自动更新)

🧪 验证完整链路

  1. 访问 http://your-ip/ → 显示 Nginx 欢迎页或你的首页
  2. 访问 http://your-ip/info.php → 显示 PHP 版本、加载的模块、数据库连接状态
  3. 编写简单 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)?

欢迎告诉我您的具体场景,我可进一步定制方案。