嘿,朋友!看到你想从零开始搭建 AlmaLinux 服务器,这绝对是个明智的选择。在这个 CentOS 停服后的时代,AlmaLinux 就像那个靠谱的老伙计——它 1:1 兼容 RHEL,稳定、免费,而且社区支持强大。不管你是想跑个博客、做个 API 服务,还是仅仅想折腾一下 Linux 环境,这篇指南都会像一位经验丰富的老司机,握着你的手,一步步带你从“买好域名”到“网站上线”,中间还会帮你避开那些让人抓狂的坑。
咱们不整那些虚头巴脑的理论,直接上干货。我会把阿里云、腾讯云、华为云这些主流平台的共性讲透,同时也会指出它们细微的操作差异。准备好了吗?我们要发车了。
第一阶段:云端选座与实例创建
首先,你得有个家。对于 AlmaLinux 用户来说,国内主流云厂商的支持都非常完善。
1. 平台选择与镜像获取
- 阿里云 (Aliyun): 在创建实例时,镜像市场里直接搜索 “AlmaLinux”。通常会有官方维护的版本,比如 AlmaLinux 8 或 9。如果没有直接显示,也可以选用 CentOS Stream 8⁄9 作为替代,因为它们的包管理器
dnf行为几乎一致,且生态接近。 - 腾讯云 (Tencent Cloud): 同样在镜像市场中查找。腾讯云对国产 Linux 发行版支持很好,AlmaLinux 8⁄9 通常在公共镜像或自定义镜像列表里。
- 华为云 (Huawei Cloud): 华为云对欧拉系(OpenEuler)支持最强,但也提供了标准的 AlmaLinux 镜像。如果在公共镜像里找不到,建议去“镜像市场”订阅由社区或第三方提供的 AlmaLinux 镜像。
💡 专家提示: 无论选哪个平台,操作系统版本我建议首选 AlmaLinux 8。为什么?因为目前大多数企业级软件、中间件(如 Nginx, PHP, MySQL)对 EL8 (Enterprise Linux 8) 的支持最为成熟稳定。AlmaLinux 9 虽然更新,但部分老旧依赖库可能需要更多配置。
2. 安全组/防火墙策略:第一步的关键
很多新手在这里栽跟头。服务器建好了,结果发现连不上。别慌,90% 是因为云厂商的“安全组”没开端口。
在创建实例的最后一步,或者实例详情页,找到 “安全组” 配置。你需要放行以下端口:
22 (SSH): 必须开,否则你没法远程登录。
80 (HTTP): 如果你要建 Web 服务,必须开。
443 (HTTPS): 如果你打算上 SSL 证书,必须开。
阿里云: 在“实例” -> “本实例安全组” -> “配置规则”中添加。
腾讯云: 在“实例” -> “安全组” -> “入方向”中添加。
华为云: 在“弹性云服务器” -> “安全组” -> “添加入方向规则”。
记住,原则是:最小权限原则。只开必要的端口,不要直接开放 0.0.0.0/0 的所有端口,那等于把家门钥匙扔在大马路上。
第二阶段:连接与系统初始化
假设你已经拿到了公网 IP 地址(例如 1.2.3.4)和 root 密码(或者密钥文件)。
1. SSH 登录
打开你的终端(Mac/Linux)或 PowerShell/CMD (Windows),执行:
ssh root@1.2.3.4
如果是首次连接,会提示指纹确认,输入 yes 并回车。然后输入密码。如果用了密钥,记得加参数 -i /path/to/key.pem。
2. 基础环境检查与更新
登录后,先看看系统是不是最新的。AlmaLinux 使用 dnf 作为包管理器(它是 yum 的现代替代品,速度更快,功能更强)。
# 更新所有已安装的包
sudo dnf update -y
# 安装常用工具:编辑器、压缩工具、网络诊断工具
sudo dnf install -y vim wget curl git net-tools htop unzip
- vim: 文本编辑器,比 nano 更强大,适合稍微复杂的配置。
- net-tools: 提供
ifconfig,netstat等命令,虽然现在推荐用iproute2,但老习惯很多人还在用。 - htop: 比 top 更直观的资源监控工具。
3. 创建普通用户(安全黄金法则)
永远不要直接用 root 账号长期工作! 这是安全的大忌。我们来创建一个名为 devops 的用户,并赋予 sudo 权限。
# 创建用户
sudo useradd -m -s /bin/bash devops
# 设置密码
sudo passwd devops
# 将用户加入 wheel 组(AlmaLinux 中 wheel 组默认拥有 sudo 权限)
sudo usermod -aG wheel devops
现在,你可以用 devops 账号登录试试。如果一切正常,我们继续下一步:禁用 root 远程登录。
编辑 SSH 配置文件:
sudo vim /etc/ssh/sshd_config
找到这两行:
PermitRootLogin yes
PasswordAuthentication yes
修改为:
PermitRootLogin no
PasswordAuthentication no # 强烈建议使用密钥登录,禁用密码登录
注意: 如果你还没配置密钥登录,先别急着改 PasswordAuthentication no,否则你会把自己锁在外面!
保存退出后,重启 SSH 服务:
sudo systemctl restart sshd
4. 配置防火墙 (Firewalld)
AlmaLinux 默认启用 firewalld。我们需要确保刚才放行的端口在系统内部也是通的。
# 查看当前状态
sudo firewall-cmd --state
# 永久开放 HTTP 和 HTTPS
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 重载配置生效
sudo firewall-cmd --reload
# 验证
sudo firewall-cmd --list-all
你应该能看到 services: ssh http https 在列表中。
第三阶段:搭建 Web 服务环境
这里我们以最常见的 LNMP (Linux + Nginx + MySQL/MariaDB + PHP) 为例。Nginx 比 Apache 性能更好,配置更灵活,特别适合高并发场景。
1. 安装 Nginx
sudo dnf install -y nginx
sudo systemctl enable nginx # 设置开机自启
sudo systemctl start nginx # 启动服务
访问你的服务器 IP (http://1.2.3.4),如果看到 “Welcome to Nginx on AlmaLinux” 页面,说明成功了!
2. 安装 MariaDB (MySQL 分支)
AlmaLinux 默认仓库里有 MariaDB。
sudo dnf install -y mariadb-server
sudo systemctl enable mariadb
sudo systemctl start mariadb
运行安全脚本:
sudo mysql_secure_installation
按提示操作:
- 设置 root 密码。
- 删除匿名用户?
Y - 禁止 root 远程登录?
Y(重要!) - 删除 test 数据库?
Y - 重新加载权限表?
Y
3. 安装 PHP 8.x
AlmaLinux 8 默认可能带有较旧的 PHP 版本,或者我们需要 EPEL 源来获取更新的版本。为了获得更好的支持,我们安装 Remi 源或者直接安装 DNF 模块。
# 启用 PHP 模块 (以 PHP 8.1 为例,可根据需求调整)
sudo dnf module reset php
sudo dnf module enable php:remi-8.1
sudo dnf install -y php php-fpm php-mysqlnd php-gd php-xml php-mbstring
sudo systemctl enable php-fpm
sudo systemctl start php-fpm
注: 如果 remi 源不可用,请先安装 EPEL 和 Remi 仓库包:
sudo dnf install -y epel-release
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
4. 配置 Nginx 与 PHP-FPM 联动
默认情况下,Nginx 不知道如何把 .php 请求交给 PHP-FPM。我们需要修改 Nginx 配置。
编辑默认站点配置:
sudo vim /etc/nginx/conf.d/default.conf
找到 location ~ \.php$ 部分,取消注释并修改如下:
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
关键点: fastcgi_param SCRIPT_FILENAME 这一行非常重要,它告诉 PHP 文件的具体路径。
测试配置并重载 Nginx:
sudo nginx -t
sudo systemctl reload nginx
5. 编写第一个 PHP 页面
创建一个简单的 info.php 来验证环境:
sudo vim /usr/share/nginx/html/info.php
写入:
<?php
phpinfo();
?>
访问 http://1.2.3.4/info.php。如果看到了 PHP 的配置信息表,恭喜你,LNMP 环境搭建成功!
🛑 安全警告: 测试完后,立即删除 info.php!泄露 PHP 版本和环境细节是黑客最喜欢的攻击入口。
第四阶段:SSL 证书与安全加固
现在你的网站还是 HTTP,数据明文传输,不安全。我们来加上 HTTPS。推荐使用 Certbot 自动申请 Let’s Encrypt 免费证书。
1. 安装 Certbot
sudo dnf install -y certbot python3-certbot-nginx
2. 获取证书
sudo certbot --nginx -d example.com -d www.example.com
注意: 请将 example.com 替换为你的域名,并确保域名已解析到服务器 IP。
Certbot 会自动修改 Nginx 配置,强制 HTTP 跳转到 HTTPS,并续期证书。
3. 自动化续期
Let’s Encrypt 证书有效期为 90 天。虽然 Certbot 会尝试自动续期,但最好手动测试一下:
sudo certbot renew --dry-run
如果没有报错,说明自动化续期配置正确。
第五阶段:常见报错排查指南 (Troubleshooting)
即使是最完美的教程,现实中也总有意外。以下是我在实战中遇到最多的几个坑,以及解决方案。
问题 1: 502 Bad Gateway
现象: 访问网站显示 502 错误。 原因: Nginx 无法连接到 PHP-FPM。通常是 PHP-FPM 没启动,或者权限不对。 排查步骤:
- 检查 PHP-FPM 状态:
sudo systemctl status php-fpm - 查看日志:
sudo journalctl -u php-fpm -e - 常见原因: 在 SELinux 开启的情况下,Nginx 可能被禁止连接 PHP-FPM。
- 临时解决:
sudo setenforce 0(测试用,不建议生产环境长期关闭) - 永久解决: 允许 Nginx 连接网络 socket:
sudo setsebool -P httpd_can_network_connect 1 sudo restorecon -Rv /var/lib/php
- 临时解决:
问题 2: 403 Forbidden
现象: 访问目录或文件时被拒绝。 原因: 权限不足或 SELinux 阻止。 排查步骤:
- 检查文件所有者:
ls -l /usr/share/nginx/html/index.html- 确保所有者是
nginx或root,且组是nginx。 - 修复权限:
sudo chown -R nginx:nginx /usr/share/nginx/html
- 确保所有者是
- 检查 SELinux 上下文:
sudo semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html(/.*)?" sudo restorecon -Rv /usr/share/nginx/html
问题 3: 数据库连接失败
现象: PHP 报错 Can't connect to local MySQL server through socket...
原因: MariaDB 未启动,或 socket 路径不对。
排查步骤:
- 确认服务运行:
sudo systemctl status mariadb - 如果是 PHP 连接问题,确保
php-mysqlnd已安装。 - 检查
/etc/my.cnf中的 socket 路径是否与 PHP 配置一致。
问题 4: 防火墙拦截
现象: 本地能 ping 通,但浏览器打不开。 原因: 云厂商安全组或系统 firewalld 未放行。 排查步骤:
- 回顾本文“第一阶段”的安全组设置。
- 检查系统防火墙:
sudo firewall-cmd --list-all - 尝试临时关闭防火墙测试:
sudo systemctl stop firewalld(仅用于排查,用完记得开回来!)
第六阶段:给新手的特别建议 & 未来展望
1. 备份!备份!备份!
服务器不是铁打的。定期备份你的网站文件和数据库。
# 简单备份脚本示例 (添加到 crontab)
#!/bin/bash
DATE=$(date +%F)
BACKUP_DIR="/backups/$DATE"
mkdir -p $BACKUP_DIR
# 备份数据库
mysqldump -u root -p'your_password' my_database > $BACKUP_DIR/db.sql
# 备份网站文件
cp -r /usr/share/nginx/html/* $BACKUP_DIR/html/
# 上传到 OSS/S3 (可选)
# ossutil cp -r $BACKUP_DIR oss://my-bucket/backups/
2. 监控与日志
不要等到网站挂了才知道。安装一个简单的监控工具,比如 prometheus-node-exporter,或者使用云厂商自带的云监控服务。查看 Nginx 日志是排查问题的第一反应:
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
3. 关于 AlmaLinux 的未来
AlmaLinux 项目由 CloudLinux 公司赞助,承诺长期维护。它与 CentOS 的无缝迁移特性意味着你现在学的知识,未来几年依然有效。如果你是从 CentOS 7 迁移过来的,注意一些 systemd 服务和防火墙命令的差异(CentOS 7 用 iptables,AlmaLinux 8⁄9 用 firewalld)。
结语
从零搭建一台安全的 AlmaLinux 服务器,听起来很复杂,但其实就像搭积木。先打好地基(系统初始化),再砌墙(安装 Web 服务),最后装修(配置 SSL 和安全策略)。每一步都至关重要,但只要你按部就班,就不会出错。
希望这篇指南能帮你顺利上线你的第一个 AlmaLinux 服务。如果在过程中遇到任何奇怪的问题,记得查看日志,日志是 Linux 给你的最诚实的反馈。祝你折腾愉快,代码无 Bug!
