在服务器领域,CentOS 以其卓越的稳定性和安全性,一直是部署 Web 服务的首选操作系统之一,而 PHP 作为一门成熟且广泛使用的服务器端脚本语言,承载着互联网上大量的网站与应用,将 PHP 项目部署到 CentOS 服务器上,是每一位后端开发和运维人员必须掌握的核心技能,本文将详细介绍如何在 CentOS 系统上,通过搭建 Nginx + PHP-FPM + MariaDB 的经典技术栈,来部署一个 PHP 项目。
准备工作
在开始部署之前,请确保您已经具备以下条件:
- 一台已安装 CentOS 7 或更高版本的云服务器或物理服务器。
- 拥有服务器的 root 权限或一个具有 sudo 权限的普通用户。
- 通过 SSH 客户端成功连接到您的服务器。
- 一个准备好的 PHP 项目代码(Laravel, ThinkPHP, WordPress 等)。
安装核心软件栈
我们将使用 dnf
(CentOS 8+)或 yum
(CentOS 7)包管理器来安装所需的软件,以下命令以 dnf
为例,在 CentOS 7 上请替换为 yum
。
安装 Nginx
Nginx 是一款高性能的 HTTP 和反向代理 Web 服务器,以其轻量级和高并发能力著称。
sudo dnf install nginx -y
安装完成后,启动 Nginx 并设置其开机自启:
sudo systemctl start nginx sudo systemctl enable nginx
在浏览器中访问您服务器的公网 IP 地址,应该能看到 Nginx 的默认欢迎页面。
安装 PHP-FPM 及常用扩展
PHP-FPM(FastCGI Process Manager)是 PHP 的一个 FastCGI 管理器,可以显著提高 PHP 的性能,我们同时安装一些项目常用的扩展。
sudo dnf install php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-json php-opcache -y
同样,启动并设置 PHP-FPM 开机自启:
sudo systemctl start php-fpm sudo systemctl enable php-fpm
安装 MariaDB
MariaDB 是 MySQL 的一个分支,完全兼容 MySQL,并且在 CentOS 中是默认的数据库系统。
sudo dnf install mariadb-server -y
启动并设置 MariaDB 开机自启:
sudo systemctl start mariadb sudo systemctl enable mariadb
安装后,建议运行安全安装脚本来进行基础安全配置,如设置 root 密码、移除匿名用户等:
sudo mysql_secure_installation
按照提示操作即可。
配置软件环境
软件安装完成后,需要进行一系列配置才能让它们协同工作。
配置 Nginx 以处理 PHP 请求
这是部署过程的核心,我们需要为 PHP 项目创建一个 Nginx 配置文件,我们会将配置文件放在 /etc/nginx/conf.d/
目录下。
创建一个新的配置文件,myproject.conf
:
sudo vi /etc/nginx/conf.d/myproject.conf
在文件中写入以下内容,请根据您的项目路径和域名进行修改:
server { listen 80; server_name your_domain.com www.your_domain.com; # 替换为您的域名或服务器IP root /var/www/myproject/public; # 项目根目录,通常是框架的 public 目录 index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ .php$ { fastcgi_pass unix:/run/php-fpm/www.sock; # PHP-FPM 的监听地址 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /.ht { deny all; } }
保存并退出后,检查 Nginx 配置文件语法是否正确:
sudo nginx -t
如果显示 syntax is ok
和 test is successful
,则重新加载 Nginx 配置:
sudo systemctl reload nginx
配置数据库
登录到 MariaDB,为您的 PHP 项目创建一个专用的数据库和用户。
sudo mysql -u root -p
进入 MariaDB 控制台后,执行以下 SQL 命令:
CREATE DATABASE myproject_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'myproject_user'@'localhost' IDENTIFIED BY 'your_strong_password'; GRANT ALL PRIVILEGES ON myproject_db.* TO 'myproject_user'@'localhost'; FLUSH PRIVILEGES; EXIT;
请将 your_strong_password
替换为一个安全的密码,将以上数据库名、用户名和密码配置到您的 PHP 项目环境文件(如 .env
文件)中。
部署项目代码与设置权限
上传代码:将您的 PHP 项目代码上传到服务器的
/var/www/
目录下,您可以使用git clone
、scp
或rsync
等工具,创建项目目录并使用 git:sudo mkdir -p /var/www/myproject sudo chown -R $USER:$USER /var/www/myproject # 暂时将所有权赋予当前用户以便操作 cd /var/www/myproject git clone https://github.com/your-repo/your-project.git .
设置权限:Nginx 运行时所使用的用户(通常是
nginx
)需要对项目目录拥有适当的权限,特别是写入权限(如存储日志、缓存、用户上传文件等)。sudo chown -R nginx:nginx /var/www/myproject sudo find /var/www/myproject -type d -exec chmod 755 {} ; sudo find /var/www/myproject -type f -exec chmod 644 {} ;
如果某些特定目录(如
storage
,bootstrap/cache
)需要可写权限,可以单独设置:sudo chmod -R 775 /var/www/myproject/storage sudo chmod -R 775 /var/www/myproject/bootstrap/cache
最终验证
完成以上所有步骤后,您的 PHP 项目应该已经成功部署,在浏览器中访问您配置的域名或 IP 地址,应该能看到项目的首页,如果遇到问题,可以检查 Nginx 和 PHP-FPM 的错误日志(通常位于 /var/log/nginx/
和 /var/log/php-fpm/
)来排查。
相关问答 FAQs
问题1:访问网站时出现 “502 Bad Gateway” 错误,是什么原因?如何解决?
解答: “502 Bad Gateway” 错误通常意味着 Nginx 作为网关,无法从上游服务(这里是 PHP-FPM)获取有效的响应,排查步骤如下:
- 检查 PHP-FPM 服务状态:确认 PHP-FPM 是否正在运行,执行
sudo systemctl status php-fpm
,如果未运行,使用sudo systemctl start php-fpm
启动它。 - 检查 Nginx 配置:确认 Nginx 配置文件中的
fastcgi_pass
指令指向的路径是否正确,默认通常是unix:/run/php-fpm/www.sock
,检查该 Socket 文件是否存在且 PHP-FPM 有权限访问。 - 检查权限:确保 PHP-FPM 进程的用户(在
/etc/php-fpm.d/www.conf
中定义,默认为apache
)和 Nginx 的用户(nginx
)对项目目录和 Socket 文件有正确的读写权限,有时需要将 PHP-FPM 的用户和组也改为nginx
。 - 查看错误日志:查看 Nginx 的错误日志 (
/var/log/nginx/error.log
),通常会记录更详细的错误信息,指明是连接超时还是权限被拒绝。
问题2:网站部分页面无法加载,或者提示文件权限错误,该如何处理?
解答: 这通常是文件或目录权限设置不当导致的,Web 服务器用户(nginx
)需要对项目文件拥有足够的权限。
- 确认所有者:确保项目文件的所有者是
nginx
用户和nginx
组,使用sudo chown -R nginx:nginx /var/www/myproject
递归地设置所有权。 - 设置基本权限:目录权限应为
755
,文件权限应为644
,这允许所有者读写执行,而组用户和其他用户只能读和执行(对于目录)或读(对于文件)。 - 设置特殊可写目录:对于需要 Web 服务器写入文件的目录,如用户上传目录、框架的缓存和日志目录(
storage
,cache
等),需要设置更高的权限,如775
或770
。775
允许所有者和同组用户写入,770
则仅允许所有者和同组用户访问和写入,确保这些目录的所有者也是nginx:nginx
。 - SELinux 问题:如果权限设置正确后仍有问题,可能是 SELinux(Security-Enhanced Linux)阻止了访问,可以临时关闭 SELinux (
sudo setenforce 0
) 测试是否是此原因,如果是,需要为相关目录设置正确的 SELinux 上下文,sudo chcon -R -t httpd_sys_rw_content_t /var/www/myproject/storage
。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复