在 CentOS 7.6 上部署本地网站项目,核心逻辑其实就三步:环境准备 -> 文件传输 -> 服务配置。
CentOS 7.6 虽然已经接近生命周期尾声(EOL),但在很多传统企业内网或老项目中依然广泛存在。针对这个系统版本,我们需要特别注意防火墙(firewalld)和 SELinux 的配置,这是新手最容易踩坑的地方。
下面我以最常见的 Nginx + PHP (FPM) 架构为例,梳理一套标准、可落地的操作流程。如果你用的是 Apache 或 Node.js,思路类似,只是替换对应的服务即可。
第一步:基础环境搭建(最小化安装视角)
假设你拿到的是一个刚装好的 CentOS 7.6 最小化镜像服务器。首先确保你能通过 SSH 连上去,并且拥有 root 权限。
- 更新系统包
yum update -y - 安装 EPEL 源
CentOS 自带的仓库软件版本通常较旧,EPEL 能提供更多常用软件包。yum install epel-release -y - 安装 Nginx 和 PHP-FPM
这里推荐直接装官方源或 EPEL 提供的稳定版。如果业务对 PHP 版本有强依赖(比如必须用 PHP 7.4+),可能需要额外配置 Remi 源,但为了稳定性,先按默认来:yum install nginx php-fpm php-mysqlnd php-pdo php-gd php-mbstring -y - 设置开机自启并启动服务
systemctl enable nginx systemctl start nginx systemctl enable php-fpm systemctl start php-fpm
第二步:处理网络与安全策略(关键步骤)
很多新手代码写好了,访问 http://IP 却显示“连接超时”或“拒绝连接”,90% 的原因出在这里。
-
开放端口(Firewalld)
CentOS 7 默认启用 firewalld。你需要开放 HTTP (80) 和 HTTPS (443) 端口:firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload注意:如果你是在阿里云、腾讯云等公有云厂商,别忘了去控制台的安全组里也放行 80/443 端口。
-
SELinux 处理(二选一)
SELinux 是 CentOS 的安全模块,经常导致 Nginx 无法读取文件或 PHP-FPM 通信失败。- 方案 A(推荐生产环境使用): 保持开启,正确设置上下文。但这需要较多命令操作,如
semanage fcontext等,调试成本高。 - 方案 B(开发/测试/个人项目快速上线): 临时关闭。对于非核心业务,为了效率可以直接关掉:
setenforce 0 # 永久生效需修改 /etc/selinux/config 中 SELINUX=disabled建议:如果是正式对外服务,务必研究 SELinux 策略;如果是内部测试或快速演示,先设为 Permissive 模式排查问题。
- 方案 A(推荐生产环境使用): 保持开启,正确设置上下文。但这需要较多命令操作,如
第三步:部署项目文件
不要直接把文件扔进 /var/www/html,除非你的项目结构简单。更规范的做法是建立独立的目录。
- 创建项目目录
mkdir -p /data/www/myproject - 上传文件
使用scp、rsync或者 FTP/SFTP 工具(如 FileZilla、WinSCP)将本地项目代码上传到服务器。scp -r ./dist/* root@your_ip:/data/www/myproject/
- 设置权限
确保 Nginx 用户(通常是nginx或apache,取决于安装方式,CentOS 7 Nginx 包用户名为nginx)有权读取这些文件。chown -R nginx:nginx /data/www/myproject chmod -R 755 /data/www/myproject注意:如果有上传功能,需要确保
upload目录有写入权限(777 或特定用户组权限)。
第四步:配置 Web 服务器(Nginx 示例)
我们需要告诉 Nginx:“当有人访问域名/IP 时,去哪个目录找文件,以及如何处理 PHP 请求”。
-
编辑配置文件
CentOS 7 的 Nginx 主配置在/etc/nginx/nginx.conf,通常我们会为每个项目创建一个单独的 server 块配置文件,放在/etc/nginx/conf.d/目录下。vi /etc/nginx/conf.d/default.conf(注:如果 default.conf 已存在且包含其他内容,建议重命名备份,新建一个如 myproject.conf)
-
写入 Server Block 配置
以下是一个通用的 PHP 站点配置模板:server { listen 80; server_name your_domain.com; # 如果没有域名,可以留空或填 IP root /data/www/myproject; # 项目根目录 index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; # 适用于 Laravel, ThinkPHP 等需要路由重写的项目 } # 处理 PHP 请求 location ~ .php$ { fastcgi_pass 127.0.0.1:9000; # PHP-FPM 监听地址 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # 禁止访问隐藏文件(如 .git, .env) location ~ /. { deny all; } } -
检查语法并重启 Nginx
nginx -t # 如果显示 "syntax is ok" and "test is successful" systemctl restart nginx
第五步:验证与排错
-
简单测试
在项目根目录/data/www/myproject下创建一个info.php:<?php phpinfo(); ?>浏览器访问
http://your_server_ip/info.php。- 能看到 PHP 信息页:说明 Nginx + PHP-FPM 链路打通,部署成功。
- 下载了文件:说明 Nginx 没把
.php交给 PHP-FPM 处理,检查上面的location ~ .php$配置。 - 403 Forbidden:检查文件权限或 SELinux。
- 502 Bad Gateway:PHP-FPM 没启动,或者 socket/port 配置不匹配。
-
清理测试文件
确认无误后,删除info.php,以防泄露服务器信息。
常见问题与避坑指南
-
数据库连接失败?
检查my.cnf中的bind-address。如果是本地部署,确保 MySQL 允许 localhost 连接。如果是远程数据库,确保防火墙放行了 MySQL 端口(3306)。 -
中文乱码?
CentOS 7 默认语言环境可能是 en_US.UTF-8。如果你的项目涉及中文,建议在 SSH 客户端设置 UTF-8,并在服务器上安装中文字体库:yum install fonts-chinese -y -
为什么不用 Apache?
Apache 配置相对复杂(.htaccess 性能损耗大),且在并发场景下不如 Nginx 轻量。现代 PHP 项目(尤其是框架类)标配都是 Nginx + PHP-FPM。 -
关于 CentOS 7.6 的生命周期
作为技术人员,必须提醒:CentOS 7 将于 2024 年 6 月 30 日停止维护。如果这是新上的生产项目,强烈建议迁移到 Rocky Linux、AlmaLinux 或 CentOS Stream 8/9。如果必须是 7.6,请确保所有补丁都已打全,并严格限制外部暴露面。
这套流程涵盖了从裸机到可用站点的完整路径。如果遇到具体的报错日志,查看 /var/log/nginx/error.log 和 /var/log/php-fpm/www-error.log 是最直接的定位手段。
云技术博客