努力
加油

Alibaba Cloud Linux 3安装Apache、MySQL和PHP的步骤是什么?

在 Alibaba Cloud Linux 3 (ACL3) 上搭建 LAMP (Linux, Apache, MySQL/MariaDB, PHP) 环境,核心逻辑和标准的 CentOS/RHEL 8/9 体系高度一致,因为 ACL3 本身就是基于 RHEL 源码开发的。

不过要注意几个关键点:

  1. 包管理器:ACL3 默认使用 dnf(兼容 yum),但推荐用 dnf。
  2. PHP 版本:官方源中的 PHP 版本可能较旧,如果需要新版(如 8.0+),通常需要借助 Remi 源或编译安装。这里我提供官方稳定源安装(适合生产稳定环境)和Remi 源安装(适合需要新版 PHP)两种方案。
  3. MySQL vs MariaDB:RHEL 系发行版默认仓库中通常只提供 MariaDB 作为 MySQL 的替代品。如果你必须用 Oracle 官方 MySQL,需要手动添加 MySQL Yum Repository。下面我会分别说明。

✅ 一、基础准备

# 更新系统包
sudo dnf update -y

# 安装 EPEL 和 Remi 源(可选,用于获取最新 PHP)
sudo dnf install epel-release -y
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y

⚠️ 注意:ACL3 是基于 EL8 架构的,所以 Remi 源选择 remi-release-8.rpm,不是 9。


✅ 二、安装 Apache HTTP Server

sudo dnf install httpd -y

# 启动并设置开机自启
sudo systemctl start httpd
sudo systemctl enable httpd

# 检查状态
sudo systemctl status httpd

开放防火墙端口(如果使用了 firewalld):

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

验证 Apache 是否运行:浏览器访问 http://<你的ECS公网IP>,应看到 Apache 测试页。


✅ 三、安装数据库(二选一)

方案 A:安装 MariaDB(推荐,官方源自带)

sudo dnf install mariadb-server mariadb -y

sudo systemctl start mariadb
sudo systemctl enable mariadb

# 安全初始化脚本(设置 root 密码、移除匿名账户等)
sudo mysql_secure_installation

按提示操作即可,建议设置 root 密码并移除测试数据库。

方案 B:安装 Oracle MySQL(需额外配置源)

# 下载 MySQL Yum Repository
sudo wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
sudo dnf localinstall mysql80-community-release-el8-1.noarch.rpm -y

# 禁用默认 AppStream 中的 MySQL 模块(避免冲突)
sudo dnf module disable mysql -y

# 安装 MySQL Server
sudo dnf install mysql-server -y

sudo systemctl start mysqld
sudo systemctl enable mysqld

# 查看临时密码
sudo grep 'temporary password' /var/log/mysqld.log

# 安全初始化
sudo mysql_secure_installation

💡 如果使用 MySQL 8.0,默认认证插件是 caching_sha2_password,某些老版本 PHP 驱动可能不兼容。可通过修改用户认证方式解决:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password';
FLUSH PRIVILEGES;

✅ 四、安装 PHP

方案 A:使用官方源(PHP 7.4 或 8.0,视 ACL3 版本而定)

sudo dnf install php php-mysqlnd php-fpm php-json php-common php-mbstring php-devel php-cli php-pdo php-gd php-xml php-zip -y

# 重启 Apache 以加载 PHP 模块
sudo systemctl restart httpd

验证 PHP 安装:

php -v

创建测试文件 /var/www/html/info.php:

<?php phpinfo(); ?>

浏览器访问 http://<你的ECS公网IP>/info.php,确认 PHP 信息正常显示。

方案 B:使用 Remi 源安装最新版 PHP(如 8.1/8.2)

# 启用 Remi 的 PHP 模块(以 PHP 8.2 为例)
sudo dnf module list php   # 查看可用模块

sudo dnf module enable php:remi-8.2 -y

# 重新安装 PHP 及相关扩展
sudo dnf install php php-mysqlnd php-fpm php-json php-common php-mbstring php-devel php-cli php-pdo php-gd php-xml php-zip -y

sudo systemctl restart httpd

📌 注意:启用 Remi 模块后,dnf install php 会自动拉取对应版本的 PHP。


✅ 五、配置 PHP-FPM(可选,但推荐用于高并发)

Apache 可以直接通过 mod_php 处理 PHP,但性能不如 PHP-FPM + FastCGI。

# 安装 PHP-FPM(上面已装)
sudo systemctl start php-fpm
sudo systemctl enable php-fpm

# 编辑 Apache 配置,启用 proxy_fcgi
sudo dnf install mod_proxy_fcgi -y

# 创建虚拟主机配置或使用默认
sudo vi /etc/httpd/conf.d/php-fpm.conf

内容示例:

<FilesMatch .php$>
    SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>

重启服务:

sudo systemctl restart httpd php-fpm

✅ 六、权限与安全建议

  1. Web 目录权限:

    sudo chown -R apache:apache /var/www/html
    sudo chmod -R 755 /var/www/html
  2. SELinux 配置(ACL3 默认开启 SELinux):

    # 允许 Apache 执行 CGI 或连接网络
    sudo setsebool -P httpd_can_network_connect 1
    sudo setsebool -P httpd_execmem 1
    
    # 查看上下文是否正确
    ls -Z /var/www/html
  3. 关闭不必要的服务:

    sudo systemctl stop postfix   # 如果不需要邮件功能
    sudo systemctl disable postfix

✅ 七、常见问题排查

问题 解决方案
500 Internal Server Error 检查 /var/log/httpd/error_log,可能是 PHP 语法错误或权限问题
PHP 页面显示源码而非执行 确认 Apache 已加载 PHP 模块,或正确配置了 PHP-FPM
MySQL 连接失败 检查 my.cnf 中 bind-address 是否为 127.0.0.1,远程连接需改为 0.0.0.0 并授权用户
PHP 扩展缺失 使用 dnf search php-* 查找对应包名安装

✅ 总结

在 Alibaba Cloud Linux 3 上部署 LAMP 环境,步骤清晰且与标准 RHEL/CentOS 流程几乎一致。关键区别在于:

  • 使用 dnf 而非 yum
  • PHP 新版本需借助 Remi 源
  • MySQL 需手动添加官方源
  • 注意 SELinux 和防火墙策略

这套方案适用于大多数 Web 应用部署场景,如 WordPress、Discuz、自定义 PHP 项目等。如需更高性能,可考虑 Nginx + PHP-FPM 组合,但 Apache 在配置灵活性和兼容性上仍有优势。

如有具体应用场景(如 Laravel、ThinkPHP 等框架),可进一步调整 PHP 配置和优化参数。