当前位置:首页 > PHP

实现php自动部署

2026-02-15 18:59:16PHP

PHP自动部署的实现方法

使用Git钩子实现自动部署

在服务器上配置Git的post-receive钩子,当代码推送到远程仓库时自动触发部署脚本。在服务器的Git仓库中创建hooks/post-receive文件并添加执行权限:

#!/bin/sh
TARGET="/var/www/your_project"
GIT_DIR="/path/to/your/git/repo.git"
BRANCH="master"

while read oldrev newrev ref
do
    if [[ $ref = refs/heads/$BRANCH ]];
    then
        echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
        git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
        cd $TARGET
        composer install --no-dev
        php artisan migrate --force
    else
        echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed."
    fi
done

使用Webhook实现自动部署

在代码托管平台(如GitHub、GitLab)设置Webhook,当有代码推送时触发服务器端的部署脚本。创建接收Webhook的PHP脚本:

<?php
$secret = 'your_secret_key';
$branch = 'refs/heads/master';
$target_dir = '/var/www/your_project';

$headers = getallheaders();
$hubSignature = $headers['X-Hub-Signature'];

list($algo, $hash) = explode('=', $hubSignature, 2);
$payload = file_get_contents('php://input');
$payloadHash = hash_hmac($algo, $payload, $secret);

if ($hash !== $payloadHash) {
    die('Invalid secret');
}

$payload = json_decode($payload, true);
if ($payload['ref'] === $branch) {
    exec("cd {$target_dir} && git pull origin master");
    exec("cd {$target_dir} && composer install --no-dev");
    exec("cd {$target_dir} && php artisan migrate --force");
    echo "Deployment successful";
} else {
    echo "Push received but not deploying";
}

使用部署工具实现自动部署

配置专业部署工具如Deployer、Capistrano或Envoyer,这些工具提供更完善的部署流程:

  1. 安装Deployer:

    curl -LO https://deployer.org/deployer.phar
    mv deployer.phar /usr/local/bin/dep
    chmod +x /usr/local/bin/dep
  2. 创建deploy.php配置文件:

    
    <?php
    namespace Deployer;

require 'recipe/laravel.php';

实现php自动部署

set('application', 'Your Project'); set('repository', 'git@github.com:your/repo.git'); set('git_tty', true); set('keep_releases', 3);

host('your_server_ip') ->set('deploy_path', '/var/www/your_project') ->set('identityFile', '~/.ssh/id_rsa') ->set('user', 'deployer');

after('deploy:failed', 'deploy:unlock');

实现php自动部署


3. 执行部署命令:
```bash
dep deploy

使用CI/CD管道实现自动部署

配置持续集成服务如GitHub Actions、GitLab CI或Jenkins来自动化测试和部署流程。示例GitHub Actions工作流文件:

name: Deploy

on:
  push:
    branches: [ master ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Install dependencies
        run: composer install --no-dev

      - name: Run tests
        run: phpunit

      - name: Deploy to production
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            cd /var/www/your_project
            git pull origin master
            composer install --no-dev
            php artisan migrate --force

部署后的常见操作

自动清除缓存和优化应用:

php artisan cache:clear
php artisan view:clear
php artisan route:cache
php artisan config:cache

设置正确的文件权限:

chown -R www-data:www-data /var/www/your_project
chmod -R 755 /var/www/your_project/storage

重启PHP-FPM服务:

systemctl restart php-fpm

标签: php
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…