怎样部署PHP项目到云服务器?

wen java案例 3

怎样部署PHP项目到云服务器:完整实战指南

目录导读

  1. 部署前的准备工作
  2. 云服务器环境搭建(LNMP/LAMP)
  3. PHP项目文件上传与配置
  4. 数据库迁移与环境变量设置
  5. 安全优化与性能调优
  6. 常见问题与问答

部署前的准备工作

在将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 firewalldufw 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-xmlphp-mbstring(编码处理),如果是Laravel,还需 php-bcmathphp-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 = 20Mpost_max_size = 20M,然后重启PHP-FPM。

Q4:如何实现自动化部署?

  • 使用Git配合Webhook,或部署DeployerJenkins等工具,简单做法:在服务器执行 git pull 并刷新缓存。

部署PHP项目到云服务器本质是“环境配置 + 文件传输 + 域名绑定”的过程,掌握以上步骤后,你不仅能快速上线一个PHP网站,还能通过安全调优应对一定量的并发访问,建议初次部署时使用宝塔面板(免费版)辅助管理,但实际生产环境仍推荐手动配置以深入理解底层逻辑,每次更新代码后,记得清理框架缓存(如Laravel的 php artisan optimize)。

抱歉,评论功能暂时关闭!