说实话,2020年底CentOS 8突然宣布提前终止支持的时候,整个国内的技术圈都炸锅了。作为无数中小企业和个人开发者赖以生存的操作系统,CentOS一夜之间变成了“弃子”。那时候很多人和我一样,既慌张又无奈——服务器还在跑,但后续的安全补丁没了,心里总像压了块石头。
如果你现在正面临同样的困境,或者刚刚接手了一堆CentOS 7的系统,这篇指南就是为你准备的。我会带你从零开始,把AlmaLinux部署到生产环境,避开那些新手容易踩的坑,让你用得踏实、跑得稳定。
为什么是AlmaLinux?不只是CentOS的替代品
在深入实操之前,我们得先搞清楚一件事:AlmaLinux到底是什么?它是不是换个名字的CentOS?
AlmaLinux由CloudLinux公司牵头发起,是一基于RHEL(Red Hat Enterprise Linux)源代码重建的1:1二进制兼容发行版。它的核心定位就是填补CentOS停止维护后的空白。和Rocky Linux、CentOS Stream相比,AlmaLinux有几个独特优势:
- 完全免费,没有订阅陷阱
- 二进制兼容RHEL,意味着你在CentOS上跑的程序,几乎不用改就能在AlmaLinux上跑
- 稳定的发布节奏,每个版本支持生命周期长达10年
- 社区驱动但背后有公司支持,不像某些项目那样可能随时停摆
2021年6月,AlmaLinux 8.4正式发布,标志着它从“应急方案”变成了“正经选择”。到现在,AlmaLinux 9.x也已经相当成熟,支持ELN(Enterprise Linux Next)特性,兼容CentOS 7/8的迁移工具链。
第一步:选择正确的版本,别一上来就追新
很多新手容易犯的错误是:CentOS 7停更了,那直接装最新的AlmaLinux 9不就行了吗?
这是个大坑。
如果你现有的业务代码、依赖库、数据库版本都是基于CentOS 7或8开发的,直接升级到AlmaLinux 9可能导致兼容性问题。比如:
- MySQL 5.7在AlmaLinux 9中默认版本是8.0,配置文件和SQL语法有变化
- Python 3.6⁄3.7的某些第三方库不支持Python 3.9+
- 某些老版本的Docker镜像可能无法在较新的内核上正常启动
我的建议是:
- CentOS 7用户:优先迁移到 AlmaLinux 8,保持RHEL 8生态,平稳过渡
- CentOS 8用户:直接迁移到 AlmaLinux 8,无缝衔接
- 新部署项目:可以考虑 AlmaLinux 9,但要先做充分的兼容性测试
下面我以 AlmaLinux 8.8 为例进行详细讲解,这是目前最成熟、社区支持最好的版本之一。
第二步:云服务器选购与系统安装
2.1 云服务商选择
目前国内主流的云服务商都提供了AlmaLinux的官方镜像:
- 阿里云:在镜像市场中搜索“AlmaLinux”,选择8.6或8.8版本
- 腾讯云:公共镜像中也有AlmaLinux选项
- 华为云:同样支持AlmaLinux 8
- AWS:Marketplace中有AlmaLinux的AMIs
- DigitalOcean/Linode/Vultr:国际服务商也都提供了官方镜像
避坑提示:购买时注意选择“最小化安装”或“基础版”镜像,不要选带图形界面或预装大量软件的版本。生产环境越干净越好,后面再按需安装。
2.2 首次登录与基础配置
登录服务器后,第一件事不是急着装软件,而是做好基础安全配置。
# 1. 更新系统到最新状态
sudo dnf update -y
# 2. 检查系统版本
cat /etc/os-release
# 应该看到:NAME="AlmaLinux",VERSION="8.x"
# 3. 设置主机名(根据你的业务命名)
sudo hostnamectl set-hostname prod-web-01
2.3 创建非root用户并配置sudo
绝对不要直接用root用户登录服务器! 这是新手最容易犯的安全错误。
# 创建新用户(假设用户名为admin)
sudo useradd -m -s /bin/bash admin
sudo passwd admin
# 将用户加入wheel组,获得sudo权限
sudo usermod -aG wheel admin
# 验证配置
id admin
# 应该看到:groups=admin,wheel
然后修改SSH配置,禁止root直接登录:
sudo vi /etc/ssh/sshd_config
找到并修改以下行:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
重启SSH服务:
sudo systemctl restart sshd
重要:在断开当前root会话之前,先用新创建的admin用户登录测试一下,确保SSH密钥认证正常工作。否则一旦配置错误,你可能被锁在服务器外面。
第三步:防火墙与安全配置
AlmaLinux默认使用firewalld作为防火墙管理工具。生产环境必须开启并配置好规则。
# 启动firewalld并设置开机自启
sudo systemctl enable --now firewalld
# 查看默认区域和状态
sudo firewall-cmd --state
sudo firewall-cmd --get-default-zone
# 添加常用服务规则
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
# 如果你有特定端口需求,比如8080
sudo firewall-cmd --permanent --add-port=8080/tcp
# 重新加载防火墙规则
sudo firewall-cmd --reload
# 验证规则
sudo firewall-cmd --list-all
进阶安全建议:
- 安装fail2ban:防止暴力破解
sudo dnf install -y fail2ban
sudo systemctl enable --now fail2ban
- 配置SSH密钥认证:这是比密码更安全的方式
# 在本地机器生成密钥(如果没有的话)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 将公钥复制到服务器
ssh-copy-id admin@your_server_ip
第四步:基础环境部署
4.1 时区与时间同步
服务器时间不准确会导致各种奇怪的问题,比如日志时间错位、证书验证失败等。
# 设置时区为上海时间
sudo timedatectl set-timezone Asia/Shanghai
# 启用NTP时间同步
sudo timedatectl set-ntp true
# 验证时间
date
timedatectl status
4.2 关闭SELinux或正确配置
SELinux是Red Hat系系统的默认安全模块,很多人因为配置麻烦直接关掉。我不建议直接关闭,但如果你的应用确实无法适配,可以选择宽松模式。
# 查看当前SELinux状态
getenforce
# 永久禁用(不推荐,除非必要)
sudo vi /etc/selinux/config
# 修改:SELINUX=disabled
# 或者设置为宽松模式(推荐过渡期使用)
sudo setenforce 0
正确姿势是学习如何配置SELinux上下文,让应用正常运行。这需要一些时间学习,但长期来看能提升系统安全性。
4.3 安装常用开发工具
# 安装开发工具包
sudo dnf groupinstall -y "Development Tools"
# 安装常用工具
sudo dnf install -y \
curl wget git vim net-tools \
tree htop tmux bc \
unzip zip tar
4.4 配置日志轮转
生产环境的日志如果不做轮转,很快就能把磁盘撑满。
# 查看现有日志轮转配置
sudo ls /etc/logrotate.d/
# 为自定义应用添加日志轮转规则
sudo vi /etc/logrotate.d/myapp
添加以下内容:
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
第五步:根据业务场景部署服务
场景一:Web应用部署(Nginx + PHP-FPM)
# 安装Nginx
sudo dnf install -y epel-release
sudo dnf install -y nginx
# 安装PHP和相关扩展
sudo dnf install -y php php-fpm php-mysqlnd php-gD php-mbstring php-xml php-curl
# 启动并设置开机自启
sudo systemctl enable --now nginx php-fpm
# 配置PHP-FPM监听方式
# 编辑 /etc/php-fpm.d/www.conf
# 修改为:listen = /run/php-fpm/www.sock(推荐Unix socket,性能更好)
# 或者 listen = 127.0.0.1:9000(TCP方式)
# 重启PHP-FPM生效
sudo systemctl restart php-fpm
Nginx站点配置示例:
sudo vi /etc/nginx/conf.d/myapp.conf
server {
listen 80;
server_name yourdomain.com;
root /var/www/myapp;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 静态文件缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
}
}
测试并重启Nginx:
sudo nginx -t
sudo systemctl restart nginx
场景二:数据库部署(MySQL/MariaDB)
AlmaLinux 8默认使用MariaDB 10.5作为MySQL兼容的数据库引擎。
# 安装MariaDB
sudo dnf install -y mariadb-server
# 启动并设置开机自启
sudo systemctl enable --now mariadb
# 运行安全脚本
sudo mysql_secure_installation
安全脚本会引导你设置root密码、移除匿名用户、禁止root远程登录等。务必完成所有步骤。
配置远程访问(如果需要):
sudo vi /etc/my.cnf.d/server.cnf
[mysqld]
bind-address = 0.0.0.0
重启MariaDB:
sudo systemctl restart mariadb
重要:确保防火墙开放了3306端口,并且使用强密码策略。
场景三:Docker容器化部署
如果你偏好容器化部署,AlmaLinux对Docker的支持非常成熟。
# 添加Docker官方仓库
sudo dnf install -y dnf-utils
sudo dnf config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker
sudo dnf install -y docker-ce docker-ce-cli containerd.io
# 启动并设置开机自启
sudo systemctl enable --now docker
# 将用户加入docker组,避免每次sudo
sudo usermod -aG docker admin
# 验证安装
docker --version
docker run hello-world
第六步:系统监控与性能调优
6.1 基础监控
# 安装监控工具
sudo dnf install -y net-tools sysstat iotop atop
# 查看系统资源使用情况
htop # 需要安装epel源
top
vmstat 1 # 每秒刷新系统状态
iotop # 查看磁盘I/O
6.2 内核参数调优
生产环境建议适当调整内核参数:
sudo vi /etc/sysctl.d/99-production.conf
添加以下内容:
# 网络优化
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
# 文件描述符
fs.file-max = 65535
fs.nr_open = 65535
# 内存管理
vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
应用配置:
sudo sysctl --system
6.3 日志管理
# 安装日志分析工具
sudo dnf install -y journald-tools
# 查看系统日志
sudo journalctl -xe
sudo journalctl -u nginx --since "1 hour ago"
# 配置日志保留策略
sudo vi /etc/systemd/journald.conf
[Journal]
SystemMaxUse=100M
SystemKeepFree=1G
RuntimeMaxUse=50M
ForwardToSyslog=yes
第七步:备份与恢复策略
生产环境没有备份等于没有保险。
7.1 系统配置备份
# 创建备份脚本
sudo vi /usr/local/bin/backup-configs.sh
#!/bin/bash
BACKUP_DIR="/backup/configs"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR/$DATE
# 备份关键配置文件
tar czf $BACKUP_DIR/$DATE/etc_backup.tar.gz /etc/
tar czf $BACKUP_DIR/$DATE/nginx_backup.tar.gz /etc/nginx/
tar czf $BACKUP_DIR/$DATE/mysql_backup.tar.gz /var/lib/mysql/
# 删除30天前的备份
find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} \;
# 添加执行权限
sudo chmod +x /usr/local/bin/backup-configs.sh
# 设置cron定时任务,每天凌晨2点执行
sudo crontab -e
添加:
0 2 * * * /usr/local/bin/backup-configs.sh >> /var/log/config-backup.log 2>&1
7.2 数据库备份
# 创建数据库备份脚本
sudo vi /usr/local/bin/backup-database.sh
#!/bin/bash
BACKUP_DIR="/backup/database"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR/$DATE
# 备份所有数据库
mysqldump -u root -p'your_strong_password' --all-databases > $BACKUP_DIR/$DATE/full_backup.sql
# 压缩备份
gzip $BACKUP_DIR/$DATE/full_backup.sql
# 删除90天前的备份
find $BACKUP_DIR -type f -mtime +90 -delete
sudo chmod +x /usr/local/bin/backup-database.sh
第八步:安全更新与运维流程
8.1 定期安全更新
# 查看可更新的安全包
sudo dnf updateinfo list-security
# 执行安全更新
sudo dnf update --security -y
# 重启需要重启的服务
sudo systemctl restart nginx php-fpm
建议设置每周一次的自动安全更新:
sudo vi /etc/dnf/dnf.conf
添加:
[main]
...
auto_update=yes
或者使用cron任务:
0 3 * * 0 /usr/sbin/dnf update --security -y >> /var/log/security-update.log 2>&1
8.2 监控系统健康
# 安装监控代理(推荐)
# 方案一:使用Prometheus + Node Exporter
sudo dnf install -y prometheus-node-exporter
sudo systemctl enable --now prometheus-node-exporter
# 方案二:使用Zabbix Agent
sudo dnf install -y zabbix-agent
sudo vi /etc/zabbix/zabbix_agentd.conf
# 修改Server和ServerActive为监控服务器IP
sudo systemctl enable --now zabbix-agent
第九步:迁移实战——从CentOS 7到AlmaLinux 8
如果你有一批CentOS 7服务器需要迁移,AlmaLinux提供了官方迁移工具。
9.1 迁移前准备
# 1. 备份重要数据和配置
# 2. 确保服务器有控制台访问权限(VNC),防止SSH断联
# 3. 记录当前安装的软件包列表
rpm -qa --qf '%{NAME}\n' | sort > /tmp/packages-centos7.txt
# 4. 更新当前系统
sudo yum update -y
sudo yum install -y almalinux-release
9.2 执行迁移
# 运行迁移脚本
sudo leapp upgrade --debug --log-file /var/log/leapp/leapp-upgrade.log
# 迁移过程中需要修改的配置
# 脚本会提示你需要确认的事项
# 完成后系统会自动重启
9.3 迁移后检查
# 验证系统版本
cat /etc/os-release
# 检查关键服务状态
systemctl status nginx
systemctl status mysql
systemctl status php-fpm
# 测试应用功能
curl -I http://localhost
mysql -u root -p -e "SELECT 1"
# 检查日志中是否有错误
sudo journalctl -xe | grep -i error
第十步:常见问题与解决方案
问题一:迁移后某些软件无法启动
原因:RHEL 8的默认Python版本是3.6⁄3.9,而CentOS 7是2.7
