怎样部署PHP项目到服务器:从零开始的全流程实战指南
目录导读
部署前的准备工作
在开始部署之前,你需要完成以下基础准备:

- 服务器选购:推荐使用Linux服务器(CentOS 7/8、Ubuntu 22.04或Debian 11),根据项目访问量选择配置,个人项目一般1核2G内存即可。
- 域名解析:将你的域名A记录指向服务器公网IP(如
example.com->123.123.123)。 - SSH客户端:准备Xshell、FinalShell或直接使用终端连接服务器。
- PHP项目文件:确认项目代码无语法错误,本地测试通过,并已使用版本控制(Git)管理。
小提示:提前关闭服务器防火墙的测试端口(如3306),生产环境只开放80(HTTP)和443(HTTPS)。
服务器环境搭建(LAMP/LEMP)
1 选择技术栈
- LAMP:Linux + Apache + MySQL + PHP(传统稳定)
- LEMP:Linux + Nginx + MySQL + PHP(高性能,推荐)
以下以 Ubuntu + Nginx + PHP 8.1 + MySQL 8 为例:
# 更新系统包 sudo apt update && sudo apt upgrade -y # 安装Nginx sudo apt install nginx -y # 安装PHP及常用扩展 sudo apt install php8.1-fpm php8.1-mysql php8.1-mbstring php8.1-xml php8.1-curl php8.1-gd -y # 安装MySQL sudo apt install mysql-server -y sudo mysql_secure_installation
2 验证安装
# 检查PHP版本 php -v # 检查Nginx状态 sudo systemctl status nginx # 测试PHP处理 echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
访问 http://服务器IP/info.php 看到PHP信息页面即成功。
本地项目打包与代码上传
1 排除不必要的文件
在本地项目根目录创建 .gitignore,排除以下内容:
/node_modules
/vendor
.env
*.log
.idea
.DS_Store
使用 composer install --no-dev 只安装生产依赖(如果使用Composer)。
2 上传代码(推荐两种方式)
方式A:通过SCP或FTP(简单直接)
scp -r /本地项目路径/* root@服务器IP:/var/www/your-project/
方式B:使用Git(推荐,便于版本管理)
# 在服务器端 cd /var/www/ git clone https://github.com/你的用户名/项目名.git git checkout main # 或指定分支
3 设置正确的文件权限
sudo chown -R www-data:www-data /var/www/your-project/ sudo chmod -R 755 /var/www/your-project/storage sudo chmod -R 755 /var/www/your-project/bootstrap/cache
注意:
www-data是Nginx运行用户,storage和cache目录需要写入权限。
数据库迁移与配置
1 创建生产数据库
mysql -u root -p CREATE DATABASE yourdbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'youruser'@'localhost' IDENTIFIED BY '强密码'; GRANT ALL PRIVILEGES ON yourdbname.* TO 'youruser'@'localhost'; FLUSH PRIVILEGES;
2 导入数据
mysql -u youruser -p yourdbname < 本地导出的sql文件
3 修改项目配置文件
编辑 .env 或 config/database.php,填入生产环境数据库信息:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=yourdbname
DB_USERNAME=youruser
DB_PASSWORD=你的密码
域名绑定与Nginx/Apache配置
1 创建Nginx虚拟主机配置文件
sudo nano /etc/nginx/sites-available/example.com.conf
写入以下配置(以ThinkPHP或Laravel典型结构为例):
server {
listen 80;
server_name example.com www.example.com;
root /var/www/your-project/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
2 启用站点并重载Nginx
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/ sudo nginx -t # 检查语法 sudo systemctl reload nginx
3 开启HTTPS(免费SSL证书)
推荐使用Certbot:
sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d example.com -d www.example.com
常见问题与排错问答
Q1:访问域名显示“403 Forbidden”怎么办?
A:检查目录权限,确保Nginx用户(www-data)能读取项目文件:
sudo chmod 755 /var/www/your-project/ sudo chown -R www-data:www-data /var/www/your-project/
Q2:安装Composer后提示“proc_open”错误?
A:禁用PHP的pcntl函数(生产环境安全需要),或添加:
// composer.json
"config": {
"process-timeout": 2000
}
Q3:数据库连接不上?
A:三步排查:
- 确认MySQL服务运行:
sudo systemctl status mysql - 检查用户权限:
mysql -u youruser -p能否登录 - 查看防火墙:
sudo ufw status,确保3306端口未对外开放
Q4:图片上传失败或无法显示?
A:检查 storage 目录权限和URL重写规则:
# 创建符号链接(Laravel) php artisan storage:link # 确保public目录有读权限 sudo chmod -R 755 /var/www/your-project/public
Q5:部署后页面空白(白屏)?
A:开启PHP错误显示辅助排查:
sudo nano /etc/php/8.1/fpm/php.ini # 设置 display_errors = On # 重启PHP sudo systemctl restart php8.1-fpm
或在项目入口文件中加入 error_reporting(E_ALL);
安全优化与运维建议
- 禁用危险PHP函数:在
php.ini中禁用exec、system、passthru等。 - 定期备份:使用
crontab定时备份数据库和项目文件。 - 启用Fail2Ban:防止暴力破解SSH和Nginx登录。
- 使用OPcache:提高PHP执行效率:
opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000
- 日志监控:定期检查Nginx和PHP错误日志:
sudo tail -f /var/log/nginx/error.log sudo tail -f /var/log/php8.1-fpm.log
部署PHP项目并非高深技术,核心在于:环境匹配 → 权限正确 → 配置精准 → 持续维护,本文从0到1走通了部署全流程,涵盖LAMP/LEMP选型、代码上传、数据库迁移、域名绑定和安全加固,根据实际项目(ThinkPHP/Laravel/原生PHP)微调Nginx伪静态规则和目录结构,即可顺利完成上线。
如果你在部署过程中遇到“Class not found”或“500 Internal Server Error”,请优先检查 composer install 是否完成以及扩展是否安装,希望这份指南能帮你一次部署成功。