努力
加油

如何将本地网站项目部署到 CentOS 7.6 服务器上?

在 CentOS 7.6 上部署本地网站项目,核心逻辑其实就三步:环境准备 -> 文件传输 -> 服务配置。

CentOS 7.6 虽然已经接近生命周期尾声(EOL),但在很多传统企业内网或老项目中依然广泛存在。针对这个系统版本,我们需要特别注意防火墙(firewalld)和 SELinux 的配置,这是新手最容易踩坑的地方。

下面我以最常见的 Nginx + PHP (FPM) 架构为例,梳理一套标准、可落地的操作流程。如果你用的是 Apache 或 Node.js,思路类似,只是替换对应的服务即可。

第一步:基础环境搭建(最小化安装视角)

假设你拿到的是一个刚装好的 CentOS 7.6 最小化镜像服务器。首先确保你能通过 SSH 连上去,并且拥有 root 权限。

  1. 更新系统包
    yum update -y
  2. 安装 EPEL 源
    CentOS 自带的仓库软件版本通常较旧,EPEL 能提供更多常用软件包。

    yum install epel-release -y
  3. 安装 Nginx 和 PHP-FPM
    这里推荐直接装官方源或 EPEL 提供的稳定版。如果业务对 PHP 版本有强依赖(比如必须用 PHP 7.4+),可能需要额外配置 Remi 源,但为了稳定性,先按默认来:

    yum install nginx php-fpm php-mysqlnd php-pdo php-gd php-mbstring -y
  4. 设置开机自启并启动服务
    systemctl enable nginx
    systemctl start nginx
    systemctl enable php-fpm
    systemctl start php-fpm

第二步:处理网络与安全策略(关键步骤)

很多新手代码写好了,访问 http://IP 却显示“连接超时”或“拒绝连接”,90% 的原因出在这里。

  1. 开放端口(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 端口。

  2. SELinux 处理(二选一)
    SELinux 是 CentOS 的安全模块,经常导致 Nginx 无法读取文件或 PHP-FPM 通信失败。

    • 方案 A(推荐生产环境使用): 保持开启,正确设置上下文。但这需要较多命令操作,如 semanage fcontext 等,调试成本高。
    • 方案 B(开发/测试/个人项目快速上线): 临时关闭。对于非核心业务,为了效率可以直接关掉:
      setenforce 0
      # 永久生效需修改 /etc/selinux/config 中 SELINUX=disabled

      建议:如果是正式对外服务,务必研究 SELinux 策略;如果是内部测试或快速演示,先设为 Permissive 模式排查问题。

第三步:部署项目文件

不要直接把文件扔进 /var/www/html,除非你的项目结构简单。更规范的做法是建立独立的目录。

  1. 创建项目目录
    mkdir -p /data/www/myproject
  2. 上传文件
    使用 scp、rsync 或者 FTP/SFTP 工具(如 FileZilla、WinSCP)将本地项目代码上传到服务器。

    • scp -r ./dist/* root@your_ip:/data/www/myproject/
  3. 设置权限
    确保 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 请求”。

  1. 编辑配置文件
    CentOS 7 的 Nginx 主配置在 /etc/nginx/nginx.conf,通常我们会为每个项目创建一个单独的 server 块配置文件,放在 /etc/nginx/conf.d/ 目录下。

    vi /etc/nginx/conf.d/default.conf

    (注:如果 default.conf 已存在且包含其他内容,建议重命名备份,新建一个如 myproject.conf)

  2. 写入 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;
        }
    }
  3. 检查语法并重启 Nginx

    nginx -t
    # 如果显示 "syntax is ok" and "test is successful"
    systemctl restart nginx

第五步:验证与排错

  1. 简单测试
    在项目根目录 /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 配置不匹配。
  2. 清理测试文件
    确认无误后,删除 info.php,以防泄露服务器信息。

常见问题与避坑指南

  1. 数据库连接失败?
    检查 my.cnf 中的 bind-address。如果是本地部署,确保 MySQL 允许 localhost 连接。如果是远程数据库,确保防火墙放行了 MySQL 端口(3306)。

  2. 中文乱码?
    CentOS 7 默认语言环境可能是 en_US.UTF-8。如果你的项目涉及中文,建议在 SSH 客户端设置 UTF-8,并在服务器上安装中文字体库:

    yum install fonts-chinese -y
  3. 为什么不用 Apache?
    Apache 配置相对复杂(.htaccess 性能损耗大),且在并发场景下不如 Nginx 轻量。现代 PHP 项目(尤其是框架类)标配都是 Nginx + PHP-FPM。

  4. 关于 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 是最直接的定位手段。