当前位置:首页 > 云服务器 > 正文

如何部署PHP项目到服务器? | PHP项目上线详细教程

将 PHP 项目发布到服务器的完整流程如下,包含详细步骤和注意事项:


准备工作

  1. 项目本地测试

    • 确保项目在本地开发环境(如 XAMPP/WAMP)正常运行
    • 处理所有错误和警告(error_reporting = E_ALL)
    • 移除调试代码和测试文件
  2. 服务器环境检查

    # 连接服务器(示例) ssh username@server_ip
    • 检查 PHP 版本:php -v
    • 检查 Web 服务器(Apache/Nginx):apache2 -v 或 nginx -v
    • 检查数据库(MySQL/MariaDB):mysql --version
  3. 环境匹配

    • 确保服务器 PHP 版本 ≥ 本地版本
    • 确认扩展一致(如 mysqli、pdo、gd、openssl): php -m # 查看已安装扩展


上传项目文件

方法 1:FTP/SFTP(推荐 FileZilla)

  • 连接信息:
    • 主机:服务器 IP
    • 协议:SFTP(端口 22)
    • 用户名/密码:SSH 凭据

  • 上传路径:通常为 /var/www/html/your_project

方法 2:SCP 命令(Linux/macOS)

scp -r /本地/项目路径 username@server_ip:/var/www/html/your_project

方法 3:Git(需服务器安装 Git)

git clone https://github.com/yourname/project.git /var/www/html/your_project


服务器配置

设置文件权限

cd /var/www/html/your_project # 设置所有者(假设 Web 服务器用户为 www-data) sudo chown -R www-data:www-data . # 目录权限 755,文件权限 644 find . -type d -exec chmod 755 {} ; find . -type f -exec chmod 644 {} ; # 特殊目录(如缓存、上传文件夹) chmod -R 775 storage/ # Laravel 示例 chmod -R 775 uploads/

配置 Web 服务器

Apache 虚拟主机示例(/etc/apache2/sites-available/your_project.conf)

<VirtualHost *:80> ServerName yourdomain.com DocumentRoot /var/www/html/your_project/public # 框架需指向 public 目录 <Directory /var/www/html/your_project/public> Options Indexes FollowSymLinks AllowOverride All # 允许 .htaccess Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>

启用配置:

sudo a2ensite your_project.conf sudo systemctl restart apache2

Nginx 配置示例(/etc/nginx/sites-available/your_project)

server { listen 80; server_name yourdomain.com; root /var/www/html/your_project/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; # 修改为你的 PHP 版本 } }

启用配置:

sudo ln -s /etc/nginx/sites-available/your_project /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx


数据库部署

  1. 导入数据库: mysql -u root -p db_name < /path/to/local_dump.sql
  2. 更新配置文件
    • 修改项目中的数据库配置(如 config/database.php、.env) DB_HOST=localhost DB_DATABASE=prod_db DB_USERNAME=prod_user DB_PASSWORD=强密码


环境优化

  1. 调整 php.ini

    如何部署PHP项目到服务器? | PHP项目上线详细教程 第1张

    sudo nano /etc/php/8.1/apache2/php.ini # 根据版本修改路径

    关键设置:

  2. 重启服务

    # Apache sudo systemctl restart apache2 # Nginx + PHP-FPM sudo systemctl restart php8.1-fpm nginx
  3. 安全加固

    1. 保护敏感文件

      • 禁止访问 .env、composer.json 等

        Apache(.htaccess)

        如何部署PHP项目到服务器? | PHP项目上线详细教程 第2张

        <Files ".env"> Require all denied </Files>

        Nginx

        location ~ /.env { deny all; }
    2. 安装防火墙

      sudo apt install ufw sudo ufw allow http sudo ufw allow https sudo ufw allow ssh sudo ufw enable


    验证与监控

    1. 访问测试

      • 浏览器打开 http://server_ip 或域名
      • 检查所有功能(表单提交、文件上传、API 等)
    2. 日志检查

      # Apache tail -f /var/log/apache2/error.log # Nginx tail -f /var/log/nginx/error.log # PHP 错误 tail -f /var/log/php_errors.log


    常见问题解决

    1. 500 内部错误

      • 检查文件权限
      • 查看 Web 服务器错误日志
      • 确保 .htaccess 被支持(Apache 需启用 mod_rewrite)
    2. 数据库连接失败

      • 确认数据库用户远程访问权限: GRANT ALL PRIVILEGES ON db_name.* TO 'user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
      • 检查防火墙是否开放 3306 端口
    3. 文件权限问题

      • 不要使用 chmod 777!用 sudo chown -R www-data:www-data /path
      • 高级部署(可选)

        • 使用 Deployer 自动化部署

          // deploy.php require 'recipe/laravel.php'; set('repository', 'git@github.com:user/project.git'); server('prod', 'server_ip') ->user('deployer') ->identityFile('~/.ssh/id_rsa') ->set('deploy_path', '/var/www/html/project');

          运行:dep deploy prod

        • 配置 HTTPS

          使用 Let’s Encrypt 免费证书:

          sudo apt install certbot python3-certbot-apache # Apache sudo certbot --apache -d yourdomain.com


        按照以上步骤操作,即可完成 PHP 项目的服务器部署,关键点:权限控制环境一致性日志监控

        如何部署PHP项目到服务器? | PHP项目上线详细教程 第3张

0