资讯动态

CentOS 7 软件安装与网站环境搭建实战指南

发布时间:2026/10/20 15:33:42 来源:尧图企业网站定制
1. 为什么还要折腾 CentOS 7 的软件安装先把话说在前头CentOS 7 已经进入维护周期的尾声官方在 2024 年 6 月 30 日停止了常规维护更新。但现实情况是大量企业内部系统、学校实验室的服务器、外包交付的虚拟机镜像仍然跑着 CentOS 7。你接手一台机器cat /etc/redhat-release一看CentOS Linux release 7.9.2009 (Core)这就是你的战场。抱怨没用活还得干。这篇内容面向三类人第一类是完全没碰过 Linux 的新手拿到一台 CentOS 7 服务器不知道从哪下手第二类是会一点命令但每次装软件都靠搜索引擎拼凑、装完不知道装到哪去了的半吊子第三类是需要在 CentOS 7 上搭一套完整的网站运行环境Web 服务 数据库 运行环境的开发者或运维。核心关键词就三个CentOS 7 软件安装、网站环境搭建、yum 与源码编译。我会把软件安装的几条路径讲透再把网站环境从零搭一遍最后把踩过的坑整理成速查表。需要提前说明的是CentOS 7 的软件生态和现在的发行版差别很大。它的默认包管理器是yum底层是 RPM默认的 Python 是 2.7默认的数据库仓库里 MySQL 已经被 MariaDB 替代PHP 默认版本是 5.4。这些默认就是新手最大的坑源——你照着新教程敲命令十有八九报错。所以理解 CentOS 7 的软件安装逻辑比记住几条命令重要得多。2. CentOS 7 软件安装的四条路径拆解2.1 先搞懂 RPM 和 yum 的关系很多人分不清 RPM 和 yum我用一个生活化的类比RPM 就像是去超市买一盒已经封装好的菜包装上写清楚了它依赖哪些配料yum 则是外卖平台你点一道菜平台自动帮你把缺的配料一起配齐送到。RPM 是包本身yum 是解决依赖关系的管理器。CentOS 7 里所有通过包管理器安装的软件本质都是 RPM 包。你可以用rpm -qa列出系统上所有已安装的包用rpm -ql 包名查看某个包装了哪些文件到哪些路径。这两个命令是排查问题的基本功后面会反复用到。yum 的核心价值在于自动解决依赖。比如你装 PHP它依赖libxml2、openssl、curl等一堆库手动一个个装 RPM 会疯掉yum 一条命令搞定。但 yum 有个前提它只能装仓库repository里有的包。CentOS 7 默认的仓库叫base、updates、extras里面的软件版本都比较老。想要新版本就得加第三方仓库这是后面要重点讲的。2.2 四条安装路径的适用场景对比在 CentOS 7 上装软件无非这四条路我先把它们的取舍讲清楚你再决定用哪条。安装方式命令示例优点缺点适用场景yum 官方仓库yum install nginx自动解决依赖干净版本老装系统级基础工具yum 第三方仓库yum install php74版本新仍自动解决依赖需配置仓库可能有冲突装 Web 运行环境RPM 手动安装rpm -ivh xxx.rpm精确控制版本依赖要手动解决装仓库里没有的特定包源码编译./configure make版本完全可控可定制慢依赖要自己装升级麻烦需要特定编译参数时我的经验是能用 yum 就别用 RPM能用 RPM 就别源码编译。源码编译看着高级实际上维护成本极高——升级要重新编译卸载要手动删文件出了问题不好排查。只有在需要特定编译选项比如给 Nginx 加某个第三方模块时才值得走源码这条路。2.3 配置第三方仓库的正确姿势CentOS 7 最常用的第三方仓库是 EPEL 和 Remi。EPEL 提供大量官方仓库没有的常用工具Remi 则专门提供新版本的 PHP 等 Web 组件。装 EPEL 很简单yum install -y epel-release装完之后yum repolist就能看到多了一个epel仓库。Remi 仓库的配置稍微麻烦一点需要先装它的 release 包yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm装完之后Remi 的仓库默认是禁用的你需要用yum-config-manager --enable remi-php74这样的命令来启用特定版本的仓库。这个设计是为了避免不同版本的 PHP 包互相冲突很合理。注意第三方仓库不是越多越好。仓库加多了同一个软件包在多个仓库里都有yum 可能装到你不想要的那个版本。建议只加真正需要的仓库并且用yum --disablerepoxxx临时排除某个仓库来排查冲突。2.4 源码编译前必须装的依赖组如果你确实需要源码编译CentOS 7 上第一件事是装编译工具链yum groupinstall -y Development Tools yum install -y gcc gcc-c make cmake autoconf automakeDevelopment Tools是一个软件包组一次性把 gcc、make、libtool 等编译必需的工具装齐。这一步不做后面./configure会各种报错说找不到编译器。另外源码编译最头疼的是开发库依赖。比如编译 Nginx 需要pcre-devel、zlib-devel、openssl-devel注意这些包名都带-devel后缀。带-devel的包提供的是头文件.h和链接库编译时需要不带-devel的包提供的是运行时库程序跑起来才需要。新手经常只装了运行时库编译时报找不到 xxx.h就是这个原因。3. 网站环境搭建的完整实操流程3.1 环境规划与前置准备搭网站环境之前先想清楚要搭什么。一套典型的网站环境包含三部分Web 服务器Nginx 或 Apache、数据库MySQL 或 MariaDB、运行环境PHP、Python、Node.js 等。我以最常见的 Nginx MariaDB PHP 组合为例这也是 CentOS 7 上最稳的组合。第一步是系统更新和基础工具安装yum update -y yum install -y wget vim net-tools lsof telnetnet-tools提供netstatlsof用来查端口占用telnet用来测端口连通性这几个是排查问题的利器建议一开始就装上。第二步是关闭 SELinux 或者配置它。SELinux 是 CentOS 的安全模块新手最容易被它坑——明明 Nginx 配置没问题就是访问不了八成是 SELinux 拦了。学习阶段建议先设为宽容模式setenforce 0 sed -i s/SELINUXenforcing/SELINUXpermissive/g /etc/selinux/configsetenforce 0是临时生效改配置文件是永久生效。生产环境不建议直接关但学习阶段先关掉能省掉大量排查时间等环境跑通了再研究怎么配 SELinux 策略。第三步是配置防火墙。CentOS 7 默认用firewalld要放行 HTTP 和 HTTPS 端口firewall-cmd --permanent --add-servicehttp firewall-cmd --permanent --add-servicehttps firewall-cmd --reload--permanent表示永久规则不加这个参数重启防火墙就失效了。--reload让规则立即生效。3.2 安装 Nginx 并验证CentOS 7 官方仓库里没有Nginx需要先装 EPELyum install -y epel-release yum install -y nginx装完之后启动并设置开机自启systemctl start nginx systemctl enable nginx systemctl status nginxsystemctl status会显示服务状态看到绿色的active (running)就说明起来了。这时候在浏览器访问服务器 IP应该能看到 Nginx 的欢迎页面。Nginx 的关键路径要记牢主配置文件在/etc/nginx/nginx.conf站点配置通常放在/etc/nginx/conf.d/目录下默认网站根目录在/usr/share/nginx/html日志在/var/log/nginx/。这几个路径后面配站点、看日志都要用。实操心得如果访问不了按这个顺序排查——先systemctl status nginx看服务起没起再netstat -tlnp | grep 80看 80 端口有没有监听再firewall-cmd --list-all看防火墙放行没有最后看 SELinux 状态。这个顺序能覆盖 90% 的访问不了问题。3.3 安装 MariaDB 并做安全初始化CentOS 7 官方仓库里的mysql包实际上就是 MariaDB这是 MySQL 的一个分支命令和用法基本兼容。直接装yum install -y mariadb-server mariadb systemctl start mariadb systemctl enable mariadb装完之后必须做安全初始化这一步新手经常跳过后果很严重mysql_secure_installation这个交互式脚本会引导你做几件事设置 root 密码、删除匿名用户、禁止 root 远程登录、删除测试数据库。每一项都建议选 yes尤其是删除匿名用户和测试库这是基本的安全底线。初始化完成后登录测试mysql -u root -p输入密码能进去就说明数据库正常。进去之后可以show databases;看看有哪些库exit退出。3.4 安装 PHP 及常用扩展CentOS 7 官方仓库的 PHP 是 5.4 版本太老了很多现代框架跑不起来。用 Remi 仓库装新版本yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm yum install -y yum-utils yum-config-manager --enable remi-php74 yum install -y php php-fpm php-mysql php-gd php-mbstring php-xml php-json php-curl这里装的扩展都是有讲究的php-fpm是 PHP 的 FastCGI 进程管理器Nginx 通过它来执行 PHPphp-mysql让 PHP 能连数据库php-gd处理图片php-mbstring处理多字节字符串中文必需php-xml和php-json是很多框架的基础依赖php-curl用于发起 HTTP 请求。装完启动 php-fpmsystemctl start php-fpm systemctl enable php-fpm验证 PHP 版本php -v应该显示 7.4.x。3.5 打通 Nginx 与 PHP 的配置这一步是新手最容易卡住的地方。Nginx 本身不处理 PHP它把 PHP 请求转发给 php-fpm 处理。需要在 Nginx 站点配置里加一段server { listen 80; server_name your_domain; root /var/www/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; } }关键点解释fastcgi_pass 127.0.0.1:9000指向 php-fpm 监听的地址和端口这个要和/etc/php-fpm.d/www.conf里的listen配置一致SCRIPT_FILENAME告诉 php-fpm 要执行哪个文件写错了会报 File not found。配置改完要测试语法再重载nginx -t systemctl reload nginxnginx -t会检查配置文件语法有错会明确告诉你哪一行有问题。养成改完配置先-t的习惯能避免服务起不来。3.6 用测试页面验证整条链路在网站根目录建一个测试文件echo ?php phpinfo(); ? /var/www/html/info.php浏览器访问http://你的IP/info.php如果能看到 PHP 信息页面说明 Nginx PHP 链路通了。再写一个连数据库的测试?php $conn new mysqli(localhost, root, 你的密码); if ($conn-connect_error) { die(连接失败: . $conn-connect_error); } echo 数据库连接成功; ?能输出数据库连接成功说明三层全部打通。验证完记得删掉 info.php这个文件会暴露大量服务器信息留在生产环境是安全隐患。4. 常见问题与排查技巧实录4.1 软件安装类问题速查现象可能原因排查命令解决方向No package xxx available仓库里没有这个包yum search xxx加对应第三方仓库Error: Package xxx conflicts包版本冲突yum list installed | grep xxx先卸载冲突包再装Cannot retrieve metalink仓库地址不可达ping 仓库域名检查网络或换镜像源xxx.h: No such file缺开发库yum provides */xxx.h装对应的-devel包command not found软件没装或不在 PATHwhich xxx装软件或检查 PATHyum provides这个命令特别有用当你编译报错说缺某个文件时用它反查这个文件属于哪个包然后装上就行。比如yum provides */pcre.h会告诉你需要装pcre-devel。4.2 网站访问类问题排查思路访问不了网站按从内到外的顺序排查最有效率。先在服务器本机测curl -I http://127.0.0.1如果本机都访问不了问题在 Nginx 本身看systemctl status nginx和/var/log/nginx/error.log。如果本机能访问但外部访问不了问题在防火墙或网络层检查firewall-cmd --list-all和云服务商的安全组。如果返回 502 Bad Gateway说明 Nginx 通了但连不上 php-fpm检查 php-fpm 有没有启动、监听地址和 Nginx 配置是否一致。如果返回 403 Forbidden通常是文件权限问题检查网站目录的属主和权限Nginx 默认以nginx用户运行网站目录要让它有读权限。如果返回 404 但文件明明存在八成是root路径配错了或者try_files规则有问题。用nginx -T可以打印出完整的生效配置确认实际用的是哪份配置。4.3 数据库连接类问题PHP 连不上数据库常见原因有几个。一是php-mysql扩展没装用php -m | grep mysql确认二是数据库没启动systemctl status mariadb看状态三是密码或主机名不对注意localhost和127.0.0.1在 MySQL 里含义不同前者走 socket后者走 TCP四是权限问题MySQL 的用户是分主机的rootlocalhost和root%是两个不同的用户。踩坑记录有一次帮人排查PHP 报Access denied for user rootlocalhost密码明明是对的。最后发现是 MariaDB 里 root 用户只允许从localhost登录而 PHP 配置里写的是127.0.0.1走 TCP 连接时被当成远程连接拒绝了。改成localhost或者给 root 授权127.0.0.1就好了。这个坑很隐蔽因为报错信息看起来就是密码错误。4.4 权限与 SELinux 的坑文件权限问题在 CentOS 7 上特别常见。Nginx 以nginx用户运行网站目录如果属主是root且权限是 700Nginx 就读不了。标准做法是把网站目录属主设为运行 Web 服务的用户chown -R nginx:nginx /var/www/html chmod -R 755 /var/www/html但要注意如果 PHP 需要写文件比如上传目录、缓存目录那个目录要给写权限通常是 775 或者 777777 不推荐但学习阶段图省事可以用。SELinux 的坑更隐蔽。即使文件权限对了SELinux 也可能拦截。临时排查用setenforce 0如果关掉就好了说明是 SELinux 问题。永久解决要么改配置文件关掉要么用semanage fcontext给目录打正确的标签。学习阶段建议先关掉把环境跑通再说。5. 环境搭建后的加固与维护建议5.1 基础安全加固清单环境跑通只是第一步暴露在公网前必须做几件事。第一改 SSH 默认端口并禁用 root 直接登录编辑/etc/ssh/sshd_config把PermitRootLogin改成no改完systemctl restart sshd。第二数据库不要监听0.0.0.0编辑/etc/my.cnf加bind-address 127.0.0.1只允许本机连接。第三删掉所有测试文件尤其是info.php。第四给网站目录设置合理的权限不要图省事全给 777。5.2 日志查看与日常巡检出问题时日志是第一手资料。Nginx 的访问日志在/var/log/nginx/access.log错误日志在/var/log/nginx/error.log。PHP 的错误日志位置在/etc/php.ini里由error_log指定php-fpm 的日志在/var/log/php-fpm/。数据库的日志在/var/log/mariadb/。日常巡检可以看几个关键指标df -h看磁盘空间free -m看内存top看 CPU 和进程netstat -tlnp看端口监听。这几个命令组合起来能快速判断服务器健康状况。5.3 备份与版本管理配置文件改之前先备份这是血泪教训。我习惯在改任何配置前先cp xxx.conf xxx.conf.bak出问题能快速回滚。网站代码建议用 Git 管理数据库定期mysqldump备份mysqldump -u root -p 数据库名 backup_$(date %Y%m%d).sql这个命令按日期生成备份文件配合定时任务就能实现自动备份。备份文件要存到服务器之外的地方不然服务器挂了备份也跟着没了。5.4 关于 CentOS 7 的后续选择最后说点实在的。CentOS 7 停止维护后继续用它意味着安全更新没了新软件也越来越难装。如果条件允许新项目建议考虑其他仍在积极维护的发行版。但如果是维护现有系统短期内也不必恐慌做好安全加固、控制好对外暴露的服务、定期备份还能稳定运行相当长一段时间。技术选型没有绝对的对错只有适不适合当下的约束条件。我个人在多次搭建 CentOS 7 环境的过程中最大的体会是把每一步的验证做扎实比追求一步到位更重要。装完一个组件就验证一个组件不要一口气全装完再一起调那样出问题时你根本不知道是哪一步引入的。这个习惯能帮你省下大量排查时间也是我从无数次装完打不开的崩溃中总结出来的。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑