阿里云服务器安装AlmaLinux 9从零开始部署Nginx PHP MySQL环境遇到依赖冲突权限不足防火墙拦截怎么办保姆级图文教程
嘿,朋友!欢迎来到这篇超长教程~我是你的技术伙伴,今天咱们一起来搞定一个让很多小伙伴头疼的事儿:在阿里云服务器上从零搭建一套完整的LNMP环境(Nginx + PHP + MySQL)。别担心,哪怕你是第一次玩服务器,跟着我的脚步走,一步步来,你也能成为部署环境的小能手!
先说说为啥选择 AlmaLinux 9 呢?它可是RHEL 9的社区复刻版,稳定、安全,而且和CentOS/RHEL的命令基本一致,社区资源超丰富。再加上阿里云的 ECS 实例,简直就是个人站、企业站、开发测试环境的黄金搭档!
第一步:登录阿里云,获取你的服务器
首先,你得有一台阿里云 ECS 实例。如果你还没有,可以先去 阿里云官网 买一台。建议选择:
- 地域:离你或者你的目标用户最近的地方,比如杭州、上海、北京
- 实例规格:至少 2核4G(跑LNMP够用),推荐 4核8G 以上更稳
- 系统镜像:AlmaLinux 9(如果没有,可以装CentOS 9或Rocky Linux 9,它们基本一样)
买好后,记录下这几项关键信息:
| 项目 | 说明 | 示例 |
|---|---|---|
| 公网 IP | 你访问服务器的地址 | 47.98.123.45 |
| 用户名 | 默认一般是 root |
root |
| 密码/密钥 | 登录时用的 | your_password |
登录服务器的方法有很多,我推荐用 SSH 终端 或者 阿里云自带的远程连接:
# 用 SSH 登录(在本地终端执行)
ssh root@47.98.123.45
# 输入密码后进入系统
如果你用的是 Windows,可以用 PuTTY 或者自带的 PowerShell;Mac/Linux 直接用 Terminal 就行。
第二步:更新系统,打好基础
进入服务器后,第一件事是更新系统,把已有的软件包升到最新,避免后续装东西时出现奇怪的问题。
# 更新系统包
sudo dnf update -y
# 安装一些常用工具(vim、wget、curl、git 等)
sudo dnf install -y vim wget curl git net-tools telnet
这一步完成后,你的系统就”干净”了,像个新房子,准备装修了~
第三步:安装 Nginx(Web服务器)
Nginx 是个非常高效、轻量级的 Web 服务器,处理并发请求的能力超强,是现在最主流的选择之一。
# 安装 Nginx
sudo dnf install -y nginx
# 启动 Nginx 服务
sudo systemctl start nginx
# 设置开机自启
sudo systemctl enable nginx
装完后,别急着下一步,先测试一下 Nginx 能不能用。在浏览器里输入你的服务器公网 IP,比如 http://47.98.123.45,如果能看到”Nginx welcome”的页面,说明安装成功啦!
第四步:安装 PHP(脚本解释器)
PHP 是处理动态网页的语言,WordPress、Laravel 等都用它。AlmaLinux 9 自带的 PHP 版本是 8.1,但很多项目需要更新的版本(比如 8.2、8.3),所以我们需要用 Remi 源 来安装最新版本的 PHP。
4.1 添加 Remi 源
# 安装 EPEL 和 Remi 源
sudo dnf install -y epel-release
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm
4.2 启用 PHP 模块
# 启用 PHP 8.3 模块(也可以换成 8.2,看你需求)
sudo dnf module reset php -y
sudo dnf module enable php:remi-8.3 -y
4.3 安装 PHP 及常用扩展
sudo dnf install -y php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-curl php-zip php-json php-intl php-redis php-opcache
4.4 配置 PHP-FPM 与 Nginx 对接
Nginx 本身不能直接运行 PHP,需要借助 PHP-FPM(FastCGI Process Manager)来处理。我们来编辑一下 Nginx 的配置文件。
# 编辑默认虚拟主机配置
sudo vim /etc/nginx/nginx.conf
找到 http 块,在里面加入类似下面的配置(或者编辑 /etc/nginx/conf.d/default.conf):
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
# PHP 处理
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
保存后,重启 Nginx 和 PHP-FPM:
sudo systemctl restart nginx
sudo systemctl restart php-fpm
测试一下 PHP 是否正常:
# 创建一个测试文件
echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/info.php
然后在浏览器访问 http://你的IP/info.php,如果能看到 PHP 信息页面,说明 PHP 和 Nginx 对接成功!
第五步:安装 MySQL(数据库)
MySQL 是关系型数据库,存数据的主力。AlmaLinux 9 默认带的是 MariaDB,但很多人更习惯用 MySQL。我们来安装官方的 MySQL。
# 下载 MySQL 官方仓库
sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
# 安装 MySQL Server
sudo dnf install -y mysql-server
# 启动并设置开机自启
sudo systemctl start mysqld
sudo systemctl enable mysqld
安全初始化
MySQL 安装后会生成一个临时密码,我们需要先改密码、设置安全选项:
# 查看临时密码
sudo grep 'temporary password' /var/log/mysqld.log
# 执行安全设置
sudo mysql_secure_installation
按提示操作就行,一般会问你要不要设置密码强度、移除匿名账号、禁止 root 远程登录等,建议全部选 Y。
第六步:配置防火墙(常见问题:端口被拦截)
很多小伙伴在这里会遇到问题:服务都装好了,但就是访问不了! 原因是 防火墙拦截了端口。
6.1 检查 firewalld 状态
sudo firewall-cmd --state
如果显示 running,说明防火墙是开着的,我们需要放行 80(HTTP)、443(HTTPS)、3306(MySQL)等端口。
# 放行 HTTP 和 HTTPS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 放行 MySQL(生产环境不建议开放,但测试可以)
sudo firewall-cmd --permanent --add-port=3306/tcp
# 重载防火墙
sudo firewall-cmd --reload
# 查看已开放的端口
sudo firewall-cmd --list-ports
6.2 阿里云安全组也要放通!
光有服务器内部的防火墙不够,阿里云控制台还有安全组,需要额外配置:
- 登录 阿里云控制台
- 找到你的 ECS 实例,点击”安全组”
- 编辑安全组规则,添加入方向规则:
| 协议 | 端口范围 | 授权对象 | |——|———|———| | TCP | 80 | 0.0.0.0/0 | | TCP | 443 | 0.0.0.0/0 | | TCP | 3306 | 你的IP/32(生产环境) |
这样外部才能访问你的 Web 服务。
第七步:解决依赖冲突问题(踩坑指南)
安装过程中最常见的就是依赖冲突,比如:
Error:
Problem: problem with installed package php-common-8.1.2-1.el9.x86_64
- package php-mysqlnd-8.3.0-1.el9.remi.x86_64 conflicts with php-common < 8.3
解决方法
方法一:清空缓存,重新安装
sudo dnf clean all
sudo dnf makecache
sudo dnf install -y php php-fpm php-mysqlnd --skip-unavailable
方法二:禁用冲突的模块
# 先禁用默认的 PHP 模块
sudo dnf module reset php -y
# 启用 Remi 的 PHP 模块
sudo dnf module enable php:remi-8.3 -y
# 重新安装
sudo dnf install -y php php-fpm php-mysqlnd
方法三:手动解决冲突
如果还报错,可以用 dnf history 查看历史记录,回退到正常状态:
# 查看安装历史
sudo dnf history list
# 回退到某个状态(比如回退到第 10 步)
sudo dnf history undo 10
第八步:解决权限不足问题(踩坑指南)
有时候你执行命令会报 Permission denied,或者网站目录权限不对,导致 Nginx 无法读写。
8.1 常见的权限问题
问题1:编辑文件时权限不足
# 不要用 sudo 直接编辑,用 su 切换
sudo -i
# 或者
sudo vim /etc/nginx/nginx.conf
问题2:网站目录权限错误
Nginx 默认用 nginx 用户运行,如果你的文件是 root 创建的,可能没有写权限:
# 修改网站目录的所有者
sudo chown -R nginx:nginx /usr/share/nginx/html
sudo chmod -R 755 /usr/share/nginx/html
问题3:SELinux 阻止访问
SELinux 是个安全模块,有时也会”多管闲事”。先检查状态:
sudo getenforce
如果返回 Enforcing,说明 SELinux 是开启的。你可以选择:
临时关闭(测试用):
sudo setenforce 0
永久关闭(不推荐生产环境):
sudo vim /etc/selinux/config
# 把 SELINUX=enforcing 改成 SELINUX=disabled
或者正确设置 SELinux 上下文(推荐):
# 给网站目录设置正确的上下文
sudo semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html(/.*)?"
sudo restorecon -Rv /usr/share/nginx/html
第九步:验证环境是否正常工作
一切就绪后,我们来写一个简单的测试脚本,验证整个 LNMP 环境是否跑通了。
<?php
// 测试数据库连接
$host = '127.0.0.1';
$db = 'test';
$user = 'root';
$pass = '你的MySQL密码';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
echo "✅ 数据库连接成功!<br>";
// 创建一个测试表
$pdo->exec("CREATE TABLE IF NOT EXISTS test (id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255))");
$pdo->exec("INSERT INTO test (msg) VALUES ('Hello from AlmaLinux 9!')");
$stmt = $pdo->query("SELECT * FROM test");
while ($row = $stmt->fetch()) {
echo "📝 数据: " . htmlspecialchars($row['msg']) . "<br>";
}
} catch (\PDOException $e) {
echo "❌ 数据库连接失败: " . $e->getMessage();
}
// 显示 PHP 信息
echo "<hr>";
echo "🖥️ PHP 版本: " . phpversion() . "<br>";
echo "🌐 Web 服务器: " . $_SERVER['SERVER_SOFTWARE'] . "<br>";
把这段代码保存为 test.php,放到 /usr/share/nginx/html/ 目录下,然后浏览器访问 http://你的IP/test.php,如果看到:
✅ 数据库连接成功!
📝 数据: Hello from AlmaLinux 9!
─────────────────────
🖥️ PHP 版本: 8.3.x
🌐 Web 服务器: nginx/1.24.x
那就说明 Nginx + PHP + MySQL 全部搞定 🎉🎉🎉
常见问题快速排查表
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 浏览器打不开页面 | 防火墙/安全组未放行 | 检查 firewalld 和阿里云安全组 |
| 502 Bad Gateway | PHP-FPM 未启动或配置错误 | sudo systemctl status php-fpm 查看日志 |
| 数据库连接失败 | MySQL 未启动或密码错误 | 检查 mysqld 服务,确认密码 |
| 权限不足 | SELinux 或文件权限问题 | 执行 semanage 或 chown 修复 |
| 依赖冲突 | 包管理器缓存混乱 | dnf clean all 后重装 |
最后的小建议
- 定期备份:重要数据记得备份,可以用
mysqldump导出数据库 - 修改默认端口:生产环境建议改 MySQL 默认端口,降低被攻击风险
- 配置 HTTPS:用 Let’s Encrypt 免费申请证书,保护数据传输安全
- 监控资源:用
top、htop、nmon等工具监控服务器负载
好啦,这篇保姆级教程就到这里了!是不是感觉也没那么难?只要你跟着步骤一步步来,遇到问题多查日志、多搜关键词,基本都能解决。
如果还有哪里不明白,欢迎随时来找我聊~祝你的服务器跑得稳稳的!🚀
