大家好,我是Agnes。今天咱们来聊一个很多运维朋友近期都在头疼的问题:CentOS 8已经凉透了,CentOS 7也在2024年6月彻底停止维护(EOL),服务器一旦停更,就像开着没有保险的车在高速上跑,随时可能因为一个安全补丁的缺失而陷入危机。别慌,红帽系有一个最好的替代品——AlmaLinux。它是社区主导、企业级可靠的RHEL(Red Hat Enterprise Linux)二进制复刻版,完全免费,而且由CloudLinux公司 backing,稳定性杠杠的。
我会手把手带你从零开始,用一台阿里云/腾讯云/华为云的云服务器,完整部署AlmaLinux 9,跑起一个生产级的Nginx + PHP-FPM + MySQL 8 网站环境,并配上实战案例。整个过程通俗易懂,即使你是新手也能跟上。咱们直接开干!
第一步:选购云服务器与基础准备
部署AlmaLinux,先有台云服务器。推荐配置:2核4G内存,50G系统盘,足够跑一个中型网站。在阿里云控制台选择“经典网络”或“专有网络VPC”,操作系统镜像选自定义镜像(因为云厂商官方镜像可能预装多余软件),或者直接选AlmaLinux官方镜像(如果有的话)。如果没有,咱后面自己ISO导入也行。
创建好实例后,记一下公网IP和私网IP,还有你设置的Root密码。第一步防火墙设置:登录云平台控制台,在安全组规则里开放以下端口:
| 端口 | 协议 | 用途 |
|---|---|---|
| 22 | TCP | SSH远程登录 |
| 80 | TCP | HTTP网站 |
| 443 | TCP | HTTPS网站 |
| 3306 | TCP | MySQL数据库(仅限内网或特定IP) |
为什么要限制3306?记住,生产环境数据库端口千万别对全网开放,黑客扫描器最爱这个。建议只允许你的办公IP或负载均衡器IP访问。
第二步:SSH连接与系统初始加固
现在,打开你的终端(Windows用PuTTY或MobaXterm,Mac/Linux直接用Terminal),输入:
ssh root@你的公网IP
首次登录会提示指纹确认,输入yes,然后粘贴Root密码。登录成功后,第一件事不是急着装软件,而是加固系统。这步很多人省略,但它是稳定部署的基石。
# 1. 更新系统到最新
dnf update -y
# 2. 创建普通用户(别一直用root!)
useradd -m -s /bin/bash almalinux
passwd almalinux # 设置强密码,大小写+数字+符号
usermod -aG wheel almalinux # 加入sudo组
# 3. 配置SSH安全:禁用root登录、改默认端口(可选)
echo "PermitRootLogin no" >> /etc/ssh/sshd_config
echo "Port 2222" >> /etc/ssh/sshd_config # 改成其他端口,比如2222
systemctl restart sshd
# 4. 安装防火墙并配置
dnf install firewalld -y
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
# 5. 启用fail2ban防暴力破解
dnf install fail2ban -y
systemctl enable --now fail2ban
验证一下:新开一个终端窗口,用ssh almalinux@你的公网IP -p 2222登录,用普通用户身份。成功没?成功了就继续。记住,定期dnf update是习惯,每周至少一次。
第三步:安装Nginx + PHP-FPM + MySQL 8完整环境
AlmaLinux 9默认用AppStream仓库,软件版本比老CentOS更新。咱们用dnf一站式安装。
3.1 安装Nginx
dnf install nginx -y
systemctl enable --now nginx
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
# 验证Nginx是否跑起来
curl http://localhost
浏览器访问http://你的公网IP,看到“It works!”就OK。Nginx配置文件在/etc/nginx/nginx.conf,默认站点在/usr/share/nginx/html。
3.2 安装PHP 8.2(通过Remi仓库,版本最新最稳)
AlmaLinux默认仓库PHP版本可能偏旧(PHP 8.1),咱们用Remi仓库升级到8.2,性能更好。
# 启用Remi仓库
dnf install epel-release -y
dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm -y
dnf module reset php -y
dnf module enable php:remi-8.2 -y
# 安装PHP及常用扩展
dnf install php php-fpm php-mysqlnd php-gd php-mbstring php-xml php-curl php-zip php-redis -y
systemctl enable --now php-fpm
测试PHP:
echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/info.php
curl http://localhost/info.php | grep "PHP Version"
看到PHP 8.2.x就对了。生产环境记得删掉info.php!
3.3 安装MySQL 8
dnf install mysql-server -y
systemctl enable --now mysqld
# 初始化MySQL,设置root密码(临时密码在日志里)
grep 'temporary password' /var/log/mysqld.log | tail -1
mysql -u root -p # 粘贴临时密码
# 在MySQL内执行安全加固
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的强密码!123';
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'AppUser@123!';
GRANT ALL PRIVILEGES ON myapp.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
安全建议:MySQL绑定本地,禁止远程登录;用appuser而不是root操作数据库。
3.4 配置Nginx支持PHP
编辑/etc/nginx/conf.d/default.conf,改成:
server {
listen 80;
server_name 你的公网IP; # 或你的域名
root /usr/share/nginx/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
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 -t # 测试配置语法
systemctl reload nginx
第四步:实战案例——部署一个WordPress博客
光说不练假把式,咱们用AlmaLinux跑起一个WordPress网站。这能验证整个LNMP栈是否稳定。
4.1 下载并配置WordPress
# 切换到web用户
sudo -u nginx bash
cd /usr/share/nginx/html
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
mv wordpress/* .
rm -rf wordpress latest.tar.gz
chown -R nginx:nginx /usr/share/nginx/html
chmod 755 /usr/share/nginx/html
4.2 创建WordPress数据库配置
在MySQL里:
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'WP@User123!';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
4.3 浏览器访问安装向导
打开http://你的公网IP,按向导填:
- 数据库名:
wordpress - 用户名:
wpuser - 密码:
WP@User123! - 数据库主机:
localhost
安装完,你会看到一个优雅的中文博客界面。测试发帖、上传图片、装插件,全部正常?恭喜,你的AlmaLinux LNMP环境就绪!
4.4 HTTPS加持(Let’s Encrypt免费证书)
生产环境必须上HTTPS。用Certbot:
dnf install certbot python3-certbot-nginx -y
certbot --nginx -d 你的域名 # 如果你有域名并解析到IP
按提示输入邮箱,选择重定向HTTP到HTTPS。证书90天自动续期,加个cron:
echo "0 3 * * * certbot renew --quiet" | crontab -
第五步:监控、备份与长期稳定运维
部署完不是结束,稳定运维才是关键。AlmaLinux自带cockpit图形化监控神器。
dnf install cockpit -y
systemctl enable --now cockpit
firewall-cmd --permanent --add-service=cockpit
firewall-cmd --reload
浏览器访问https://你的IP:9090,用普通用户登录。能看到CPU、内存、磁盘、网络实时监控,还有终端、日志查看、服务管理。超直观!
5.1 自动备份脚本
写个/root/backup.sh:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup"
mkdir -p $BACKUP_DIR
# 备份MySQL
mysqldump -u root -p'你的Root密码' --all-databases | gzip > $BACKUP_DIR/mysql_$DATE.sql.gz
# 备份网站文件
tar -czf $BACKUP_DIR/files_$DATE.tar.gz /usr/share/nginx/html
# 只保留最近7天
find $BACKUP_DIR -type f -mtime +7 -delete
echo "Backup complete: $DATE"
赋权并加cron:
chmod +x /root/backup.sh
echo "0 2 * * * /root/backup.sh" | crontab -
5.2 安全扫描与监控告警
# 安装lynis安全审计
dnf install lynis -y
lynis audit system
# 监控磁盘空间,低于10%发警告
echo '* * * * * [ \$(df / | tail -1 | awk "{print \$5}" | tr -d "%") -gt 10 ] && echo "Disk warning: \$(df /)" | wall' | crontab -
5.3 常见坑与解决方案
- 服务启动失败:检查日志
journalctl -u nginx -n 50,99%是配置语法错误或端口占用。 - PHP-FPM 502错误:通常是
pm.max_children设太小,编辑/etc/php-fpm.d/www.conf,改成pm.max_children = 50,重启systemctl restart php-fpm。 - MySQL连接拒绝:检查
bind-address在/etc/my.cnf是否为127.0.0.1,防火墙是否开放。 - AlmaLinux vs RockyLinux:两者都是RHEL复刻,Alma更活跃更新,Rocky更稳重。选Alma没问题,社区支持好。
第六步:性能调优与生产级加固
想让服务器跑得更飞?小调一下。
Nginx优化(/etc/nginx/nginx.conf):
worker_processes auto;
events { worker_connections 4096; }
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
}
PHP优化(/etc/php-fpm.d/www.conf):
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
php_admin_value[memory_limit] = 256M
系统级:关闭SELinux(或设Permissive模式,新手友好)
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
结语:为什么选AlmaLinux,以及如何迁移
CentOS停更后,AlmaLinux是零成本、无缝迁移的最佳选择。迁移命令超简单:
# 从CentOS 7迁移到AlmaLinux 9(需先升级到CentOS 8,再滚到Alma9)
curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh
bash almalinux-deploy.sh
它保留你的包、配置、数据,几乎零停机。阿里云/腾讯云镜像市场直接搜“AlmaLinux”,一键部署更快。
跑了一年多AlmaLinux,我的服务器 uptime 99.9%,零崩溃。关键是:定期更新、监控到位、备份不忘。你现在就动手吧,遇到问题随时在评论区问我。祝你的云服务器稳稳当当地跑起来!🚀
