CentOS 上部署 PHP 项目的标准流程
一 环境准备与版本选择
- 明确目标环境:选择 LAMP(Apache+MariaDB/PHP) 或 LNMP(Nginx+PHP-FPM+MariaDB/MySQL),两者在 CentOS 上的部署都较成熟。
- 更新系统并安装基础源:建议先执行 sudo yum update -y,按需启用 EPEL 源以获得更完整的软件包。
- 版本建议:选择与项目兼容的 PHP 7.x/8.x,并提前准备数据库(如 MariaDB 10.x 或 MySQL 8.0)。
二 方案一 LAMP 快速部署(Apache + MariaDB + PHP)
- 安装组件
- 执行:sudo yum install -y httpd mariadb-server php php-mysqlnd php-pdo php-gd php-mbstring
- 启动与开机自启
- 执行:sudo systemctl start httpd mariadb && sudo systemctl enable httpd mariadb
- 数据库安全初始化
- 执行:sudo mysql_secure_installation,按向导设置 root 密码、移除匿名用户、禁止远程 root 登录等。
- 创建业务库与用户
- 登录数据库后执行:
- CREATE DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- CREATE USER ‘your_user’@‘localhost’ IDENTIFIED BY ‘StrongPass!’;
- GRANT ALL PRIVILEGES ON your_db. TO ‘your_user’@‘localhost’;*
- FLUSH PRIVILEGES;
- 配置 Apache 虚拟主机
- 部署代码与权限
- 执行:sudo cp -r /path/to/app /var/www/your_app
- 执行:sudo chown -R apache:apache /var/www/your_app && sudo chmod -R 755 /var/www/your_app
- 重启与放行防火墙
- 执行:sudo systemctl restart httpd
- 放行端口:sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload
- 访问验证
- 浏览器访问 http://服务器IP或域名,确认首页或接口可达。
三 方案二 LNMP 高性能部署(Nginx + PHP-FPM + MariaDB/MySQL)
- 安装组件
- 执行:sudo yum install -y epel-release nginx mariadb-server php php-fpm php-mysqlnd php-gd php-mbstring php-xml
- 启动与开机自启
- 执行:sudo systemctl start nginx mariadb php-fpm && sudo systemctl enable nginx mariadb php-fpm
- 数据库安全初始化
- 执行:sudo mysql_secure_installation 并按向导完成加固。
- 配置 PHP-FPM(两种常见方式,二选一或并存)
- Unix 套接字(推荐):编辑 /etc/php-fpm.d/www.conf,设置 listen = /run/php-fpm/www.sock,并确保运行用户与 Nginx 一致(常见为 apache 或 nginx)。
- TCP 端口:设置 listen = 127.0.0.1:9000。
- 启动:sudo systemctl restart php-fpm
- 配置 Nginx 站点
- 部署代码与权限
- 执行:sudo cp -r /path/to/app /usr/share/nginx/html/your_app
- 执行:sudo chown -R nginx:nginx /usr/share/nginx/html/your_app && sudo chmod -R 755 /usr/share/nginx/html/your_app
- 重启与放行防火墙
- 执行:sudo systemctl restart nginx
- 放行端口:sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload
- 访问验证
- 浏览器访问 http://服务器IP或域名,确认首页或接口可达。
四 部署后验证与常见问题处理
- 基础验证
- 在项目根目录创建 info.php:,访问 /info.php 检查 PHP 版本与已启用扩展(如 mysqli/pdo_mysql、gd、mbstring、xml)。
- 数据库连接
- 确认 .env 或配置文件中的 DB_HOST/DB_USER/DB_PASS/DB_NAME 正确,且数据库用户允许从 localhost 连接。
- 权限与属主
- Web 目录建议属主为 apache:apache(LAMP)或 nginx:nginx(LNMP),权限 755,上传目录可 775 并限制运行用户写入。
- SELinux 与防火墙
- 若访问异常且 SELinux 为 enforcing,可临时 setenforce 0 排查;生产环境请使用 semanage/fcontext 做精细策略而非直接关闭。
- 确保 firewalld 放行 80/443:sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload。
- 日志定位
- Apache:/var/log/httpd/error_log;Nginx:/var/log/nginx/error.log;PHP-FPM:/var/log/php-fpm/www-error.log。
- 可选 HTTPS
- 使用 Certbot 获取并自动配置 Let’s Encrypt 证书,启用 HTTPS 提升安全性。
五 一键健康检查清单
| 检查项 |
期望结果 |
命令或路径 |
| Web 服务 |
80/443 正常访问 |
curl -I http://域名 |
| PHP 解析 |
info.php 正常显示 |
/var/www/your_app/info.php |
| 数据库 |
可本地登录并授权 |
mysql -u root -p;SHOW GRANTS; |
| 防火墙 |
80/443 放行 |
firewall-cmd --list-services |
| SELinux |
未阻断访问 |
getenforce(返回 Permissive/Disabled 便于排查) |
| 目录权限 |
属主与权限正确 |
ls -ld /var/www/your_app;ps aux |
以上流程覆盖 LAMP/LNMP 两种主流部署方式,按项目需求选择其一即可完成在 CentOS 上的 PHP 项目上线。