直接在生产服务器

时间:2017-06-22 10:09:43

标签: php laravel server ftp bitbucket

我使用bitbucket来存储我们的项目。现在的问题是项目非常庞大,其中包含more then 20k files。我的服务器有FTP connection所以我无法在服务器上复制和粘贴完整的项目代码。所以我想直接将我的代码从bitbucket部署到我的生产服务器。

我可以连接到bitbucket服务器并创建一个git pull,但我真的想找到automate这个内容。

我正在寻找一个简单快速的解决方案,但我没有找到任何针对bitbucket的解决方案,所有解决方案似乎都是为github设计的......

是否有servicetool来自动执行此流程?

3 个答案:

答案 0 :(得分:3)

有几种方法可以做到这一点我倾向于遵循和adapt this Turotial

这可以通过使用BitBucket Webhooks来做一些注意事项

1)git安全性很糟糕创建repo的用户通常是唯一可以影响它的人,所以你必须确保你的apache用户或组(在Ubuntu Server的情况下www-data:www-data有使用git repo的abillity(通过使用我的意思是它需要能够拉/结出/提交)

2)您的Web服务器必须联机才能使自动部署正常工作

3)您的网络摘要接收文件将在您的网站上过度使用,确保您可以使用.htpasswd设置进行此操作。如果您在设置webhook时在BitBucket中使用.htpasswd设置,则可以在URL中使用它们E.G http://<username>:<passwd>@yourdomain.com/path/to/deployment.php

但你的webhook php文件应该类似于:

<?php
$repo_dir = '/home/<username>/<repo-name>.git';
$web_root_dir = '/home/<username>/www';

// Full path to git binary is required if git is not in your PHP user's path. Otherwise just use 'git'.
$git_bin_path = 'git';

$update = false;

// Parse data from Bitbucket hook payload
$payload = json_decode($_POST['payload']);

if (empty($payload->commits)){
  // When merging and pushing to bitbucket, the commits array will be empty.
  // In this case there is no way to know what branch was pushed to, so we will do an update.
  $update = true;
} else {
  foreach ($payload->commits as $commit) {
    $branch = $commit->branch;
    if ($branch === 'production' || isset($commit->branches) && in_array('production', $commit->branches)) {
      $update = true;
      break;
    }
  }
}

if ($update) {
  // Do a git checkout to the web root
  exec('cd ' . $repo_dir . ' && ' . $git_bin_path  . ' fetch');
  exec('cd ' . $repo_dir . ' && GIT_WORK_TREE=' . $web_root_dir . ' ' . $git_bin_path  . ' checkout -f');

  // Log the deployment
  $commit_hash = shell_exec('cd ' . $repo_dir . ' && ' . $git_bin_path  . ' rev-parse --short HEAD');
  file_put_contents('deploy.log', date('m/d/Y h:i:s a') . " Deployed branch: " .  $branch . " Commit: " . $commit_hash . "\n", FILE_APPEND);
}
?>

确保它在公共html目录中并且它没有被Larvel加载它应该是一个原始访问php文件。

答案 1 :(得分:1)

Laravel forge非常适合将代码从git部署到生产环境。它还涉及服务器配置和服务器设置。

答案 2 :(得分:1)