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

wen java案例 2

怎样部署PHP项目到服务器:从零开始的全流程实战指南

目录导读

  1. 部署前的准备工作
  2. 服务器环境搭建(LAMP/LEMP)
  3. 本地项目打包与代码上传
  4. 数据库迁移与配置
  5. 域名绑定与Nginx/Apache配置
  6. 常见问题与排错问答
  7. 安全优化与运维建议

部署前的准备工作

在开始部署之前,你需要完成以下基础准备:

怎样部署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运行用户,storagecache 目录需要写入权限。


数据库迁移与配置

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 修改项目配置文件

编辑 .envconfig/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:三步排查:

  1. 确认MySQL服务运行:sudo systemctl status mysql
  2. 检查用户权限:mysql -u youruser -p 能否登录
  3. 查看防火墙: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);


安全优化与运维建议

  1. 禁用危险PHP函数:在 php.ini 中禁用 execsystempassthru 等。
  2. 定期备份:使用 crontab 定时备份数据库和项目文件。
  3. 启用Fail2Ban:防止暴力破解SSH和Nginx登录。
  4. 使用OPcache:提高PHP执行效率:
    opcache.enable=1
    opcache.memory_consumption=128
    opcache.max_accelerated_files=10000
  5. 日志监控:定期检查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 是否完成以及扩展是否安装,希望这份指南能帮你一次部署成功。

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