1. 为什么Web开发者需要CentOS小书
第一次在服务器上部署Web应用时,我对着黑底白字的终端窗口手足无措。那时才明白,再华丽的代码最终都要落地到服务器环境。CentOS作为企业级Linux发行版,以其稳定性和长周期支持成为Web服务部署的首选平台。但官方文档往往过于庞杂,而网络教程又碎片化严重——这正是我们需要一本"手边小书"的根本原因。
这本虚拟的小册子要解决三个核心痛点:首先是环境配置的标准化问题,同一个Nginx配置在开发机和生产环境表现可能天差地别;其次是故障排查的效率问题,当502错误突然出现时,没时间从头查阅几百页的手册;最后是安全防护的完备性,从防火墙规则到SSL证书更新,每个环节都关乎线上服务的生死。
2. CentOS环境精要配置
2.1 最小化安装后的必做清单
刚装完CentOS 7.9 minimal系统时,连ifconfig命令都不存在。建议按这个顺序完善基础环境:
# 安装基础工具集 yum install -y net-tools vim wget curl epel-release # 关闭SELinux(生产环境需谨慎) setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 配置阿里云镜像源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo重要提示:EPEL源安装后建议检查优先级,避免与基础源冲突。我曾遇到因优先级错乱导致PHP版本异常的问题。
2.2 Web服务环境搭建
LAMP和LNMP是两种经典组合,个人更推荐后者:
# 安装Nginx+MySQL+PHP(LEMP) yum install -y nginx mariadb-server php-fpm php-mysqlnd # 配置Nginx与PHP-FPM联动 sed -i 's/user = apache/user = nginx/' /etc/php-fpm.d/www.conf sed -i 's/group = apache/group = nginx/' /etc/php-fpm.d/www.conf systemctl enable --now nginx php-fpm mariadb防火墙需要放行必要端口:
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload3. 高频问题解决方案库
3.1 Yum仓库故障处理
当遇到"为仓库'appstream'下载元数据失败"错误时,可尝试:
- 清理缓存:
yum clean all && rm -rf /var/cache/yum - 更换为国内源(前文已述)
- 对于CentOS 8 Stream特有的问题,建议:
dnf --disablerepo=appstream --enablerepo=baseos install -y centos-release-stream dnf distro-sync
3.2 磁盘空间告急处理
通过LVM扩容的完整流程:
# 查看当前空间 df -h vgs # 扩展逻辑卷(假设VG有剩余空间) lvextend -L +10G /dev/mapper/centos-root xfs_growfs /dev/mapper/centos-root # 对xfs文件系统3.3 Web服务典型故障
502错误的排查路线图:
- 检查PHP-FPM进程状态:
systemctl status php-fpm - 查看socket权限:
ls -l /var/run/php-fpm/ - 测试PHP解析:创建
info.php含<?php phpinfo(); ?> - 检查Nginx错误日志:
tail -50 /var/log/nginx/error.log
4. 安全加固 checklist
4.1 基础防护层
SSH加固:
sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config systemctl restart sshd安装配置CSF防火墙:
yum install -y perl-libwww-perl perl-LWP-Protocol-https wget https://download.configserver.com/csf.tgz tar xzf csf.tgz && cd csf && sh install.sh
4.2 Web应用防护
自动续签Let's Encrypt证书:
yum install -y certbot python2-certbot-nginx certbot --nginx -d example.com --email admin@example.com --agree-tos --no-eff-email echo "0 3 * * * /usr/bin/certbot renew --quiet" >> /etc/crontabNginx防CC攻击配置示例:
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; server { location / { limit_req zone=one burst=20; } }
5. 开发辅助工具集
5.1 调试工具三件套
实时日志追踪:
tail -f /var/log/nginx/access.log | grep -v 'ELB-HealthChecker'TCP连接分析:
ss -antp | grep ':80'性能快照:
top -c -o %CPU -n 1 -b > cpu_usage.log
5.2 数据库管理技巧
MySQL紧急救援命令:
-- 查找锁表进程 SHOW PROCESSLIST; -- 导出不含数据的结构 mysqldump -d -u root -p dbname > schema.sql -- 大表优化 ALTER TABLE large_table ENGINE=InnoDB;6. 自动化运维实践
6.1 Shell脚本模板
部署用的标准化脚本:
#!/bin/bash set -e BACKUP_DIR="/backups/$(date +%Y%m%d)" mkdir -p $BACKUP_DIR # 数据库备份 mysqldump -u root -p"$DB_PASS" --all-databases | gzip > "$BACKUP_DIR/alldb.sql.gz" # 网站文件同步 rsync -avz --delete /var/www/ user@backup-server:/remote/backup/6.2 Ansible快速入门
批量管理服务器的playbook示例:
--- - hosts: webservers become: yes tasks: - name: Ensure Nginx is installed yum: name=nginx state=present - name: Copy customized config template: src: templates/nginx.conf.j2 dest: /etc/nginx/nginx.conf notify: restart nginx handlers: - name: restart nginx systemd: name=nginx state=restarted7. 虚拟化环境特别指南
7.1 VMware增强工具
安装VMware Tools的正确姿势:
yum install -y open-vm-tools perl systemctl enable --now vmtoolsd7.2 Docker化部署
将传统应用容器化的示例:
FROM centos:7 RUN yum install -y epel-release && \ yum install -y nginx php-fpm && \ yum clean all COPY nginx.conf /etc/nginx/conf.d/default.conf COPY www/ /usr/share/nginx/html/ EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]8. 性能调优备忘录
8.1 内核参数优化
/etc/sysctl.conf关键配置:
net.ipv4.tcp_max_syn_backlog = 8192 net.core.somaxconn = 65535 vm.swappiness = 10 fs.file-max = 655358.2 PHP性能三板斧
opcache配置示例:
opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=609. 监控与报警体系
9.1 简易监控方案
使用netdata实现实时监控:
bash <(curl -Ss https://my-netdata.io/kickstart.sh)9.2 日志分析管道
ELK栈快速搭建:
# Elasticsearch yum install -y java-11-openjdk rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch yum install -y https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.3-x86_64.rpm10. 升级与迁移策略
10.1 跨版本升级
从CentOS 7到8的过渡方案:
yum install -y centos-release-stream dnf --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync10.2 服务迁移检查清单
- 配置文件备份:
/etc/nginx,/etc/php-fpm.d - 数据库导出验证
- 证书文件迁移
- 定时任务记录
- 防火墙规则导出
每次登录服务器时,我都会先运行neofetch查看系统概况。这个小习惯帮助我多次提前发现异常情况,比如异常的负载平均值或错误的磁盘挂载。记住,好的运维不是等故障发生才行动,而是通过日常观察将问题扼杀在萌芽状态。