怎样部署PHP项目到云服务器:完整实战指南
目录导读
部署前的准备工作
在将PHP项目部署到云服务器之前,需要确认以下三点:

- 云服务器选择:建议使用CentOS 7/8或Ubuntu 20.04/22.04 LTS,新手推荐阿里云、腾讯云或华为云的轻量应用服务器,配置1核2G即可。
- 域名与DNS解析:提前将域名解析至服务器IP,并确保HTTP(80)和HTTPS(443)端口开放。
- 项目代码备份:确保本地代码已通过Git托管(如Gitee或GitHub),避免上传时丢失。
问:是否需要配置防火墙?
答:是的,云服务器默认安全组需放行22(SSH)、80(HTTP)、443(HTTPS)端口,在服务器内部也需执行 systemctl stop firewalld 或 ufw allow 80 等操作。
云服务器环境搭建(LNMP/LAMP)
PHP项目通常运行在LNMP(Linux + Nginx + MySQL + PHP)或LAMP(Apache替代Nginx)环境下,以下以LNMP为例(更推荐Nginx处理高并发):
1 安装Nginx
# Ubuntu/Debian sudo apt update && sudo apt install nginx -y # CentOS sudo yum install epel-release -y && sudo yum install nginx -y
2 安装PHP及扩展
# 安装PHP 8.1(常见框架如Laravel/ThinkPHP需此版本) sudo apt install php8.1-fpm php8.1-mysql php8.1-curl php8.1-xml php8.1-mbstring php8.1-gd php8.1-redis -y
问:哪些PHP扩展是必须的?
答:根据项目需求,至少安装 php-mysql(数据库连接)、php-curl(API请求)、php-xml 和 php-mbstring(编码处理),如果是Laravel,还需 php-bcmath 和 php-tokenizer。
3 安装MySQL/MariaDB
sudo apt install mysql-server -y sudo mysql_secure_installation # 设置root密码并删除测试数据库
配置完成后,启动所有服务:
sudo systemctl start nginx php8.1-fpm mysql sudo systemctl enable nginx php8.1-fpm mysql # 设置开机自启
PHP项目文件上传与配置
1 上传项目文件
使用scp命令从本地传输到服务器 /var/www/html 目录:
scp -r ./本地项目 root@你的服务器IP:/var/www/html/
通过Git拉取(推荐):
cd /var/www/html git clone https://gitee.com/你的仓库/项目名.git
2 配置Nginx站点
创建 /etc/nginx/sites-available/你的项目.conf(Ubuntu)或 /etc/nginx/conf.d/项目名.conf(CentOS),写入:
server {
listen 80;
server_name 你的域名.com;
root /var/www/html/你的项目名/public; # 注意入口目录(如Laravel是public)
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
}
问:如何测试Nginx配置是否正确?
答:运行 sudo nginx -t,若显示 syntax is ok 则重启Nginx:sudo systemctl restart nginx。
数据库迁移与环境变量设置
1 导入数据库
登录MySQL创建数据库:
CREATE DATABASE 你的数据库名 CHARACTER SET utf8mb4;
然后导入本地SQL文件:
mysql -u root -p 你的数据库名 < /var/www/html/你的项目/database.sql
2 配置.env文件
大多数PHP框架(如Laravel、ThinkPHP)使用环境变量文件,在项目根目录下修改.env:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=你的数据库名 DB_USERNAME=root DB_PASSWORD=你的密码 APP_ENV=production APP_DEBUG=false # 生产环境务必关闭调试模式
问:为什么需要关闭APP_DEBUG?
答:开启调试模式会暴露敏感路径和SQL错误信息,极易被黑客利用。
3 目录权限设置
# 给storage和bootstrap/cache写入权限(Laravel为例) sudo chmod -R 775 /var/www/html/你的项目/storage sudo chmod -R 775 /var/www/html/你的项目/bootstrap/cache sudo chown -R www-data:www-data /var/www/html/你的项目 # 让Nginx用户拥有所有权
安全优化与性能调优
1 启用HTTPS
使用Certbot免费申请Let's Encrypt SSL证书:
sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d 你的域名.com
2 优化PHP-FPM
编辑 /etc/php/8.1/fpm/pool.d/www.conf,调整参数:
pm = dynamic pm.max_children = 50 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 20
然后重启PHP-FPM。
3 开启OPcache
在 /etc/php/8.1/cli/conf.d/10-opcache.ini 中添加:
opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=4000
问:部署后网站访问速度慢怎么办?
答:首先检查是否开启了OPcache和Nginx的gzip压缩;其次可尝试使用Redis缓存session和数据库查询结果,配置如下:
sudo apt install php8.1-redis redis-server -y,然后在.env中设置 CACHE_DRIVER=redis。
常见问题与问答
Q1:访问网站显示404 Not Found
- 原因:Nginx的
root路径指向错误,或.htaccess未生效(Nginx不支持.htaccess)。 - 解决方法:检查
server块中的try_files规则是否正确,确保入口文件(如index.php)存在。
Q2:数据库连接失败“SQLSTATE[HY000] [1045]”
- 原因:MySQL用户密码错误,或MySQL未允许远程连接(本地连接无需开放远程)。
- 解决方法:登录MySQL修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';,并更新.env。
Q3:上传文件大小限制
- 解决方案:修改
/etc/php/8.1/fpm/php.ini中的upload_max_filesize = 20M和post_max_size = 20M,然后重启PHP-FPM。
Q4:如何实现自动化部署?
- 使用
Git配合Webhook,或部署Deployer、Jenkins等工具,简单做法:在服务器执行git pull并刷新缓存。
部署PHP项目到云服务器本质是“环境配置 + 文件传输 + 域名绑定”的过程,掌握以上步骤后,你不仅能快速上线一个PHP网站,还能通过安全调优应对一定量的并发访问,建议初次部署时使用宝塔面板(免费版)辅助管理,但实际生产环境仍推荐手动配置以深入理解底层逻辑,每次更新代码后,记得清理框架缓存(如Laravel的 php artisan optimize)。