brunodebarros/git-deploy-php

git-deploy-php 是一个简单的基于 PHP 的工具,可以将您的 Git 仓库部署到 FTP/SFTP 服务器,并自动保持更新。

2.0.4 2019-05-16 18:52 UTC

README

git-deploy-php 允许快速轻松地将 Git 仓库部署到 FTP 或 SFTP 服务器。您不需要在服务器上安装 git。非常适合没有 shell 访问的共享服务器,并且可以通过只上传已更改的文件来节省带宽和时间。

用法

  1. git-deploy 添加到您的项目中。
  2. 创建 deploy.ini 文件(见下文)。
  3. 在您的命令行/终端中运行 php git-deploy

就是这样。就这么简单。

deploy.ini

在您的项目的根目录中创建一个 deploy.ini 文件。

注意:deploy.ini 是默认文件名。您可以将其命名为任何您想要的名称(例如,staging.ini),并运行 php git-deploy staging。这可以作为区分预发布和产品服务器部署的简单方法。

; This is a sample deploy.ini file.

[example]

skip = false
user = example
pass = password    
host = example.com
port = 21
path = /path/to/installation
passive = true

; If that seemed too long for you, you can specify servers like this:
[ftp://example:password@example.com:21/path/to/installation]

第一次执行时,git-deploy 假设您的部署服务器为空,并将上传 git 仓库中的所有文件。如果您之前已经部署过您的项目文件,您必须在您的部署服务器上创建一个包含当前提交哈希值的 REVISION 文件。

要获取当前提交的哈希值,您可以使用以下命令:

git rev-parse HEAD

高级用法

使用 SFTP

要使用 SFTP,您有两个选项。使用长形式 deploy.ini 配置,您只需添加 scheme = sftp。使用短形式,只需将 ftp:// 更改为 sftp://

如果您想使用私钥登录而不是密码,您可以在 deploy.ini 配置中添加以下内容

sftp_key = /path/to/key/file

撤销部署

如果您使用 git-deploy 进行部署,并想回到之前的部署,您只需要使用 --revert

php git-deploy --revert [your_ini_file_name]

如果您使用 deploy.ini(即,如果您没有为 .ini 文件提供自定义名称),那么您可以直接使用以下命令

php git-deploy --revert

部署特定的提交

php git-deploy -r [your_commit_hash] [your_ini_file_name]

如果您使用 deploy.ini(即,如果您没有为 .ini 文件提供自定义名称),那么您可以直接使用以下命令

php git-deploy -r [your_commit_hash]

注意:如果您想,您可以使用标签或任何其他有效引用,而不是使用提交哈希值。

从不同的分支部署最新的提交

有时您可能需要将不同分支的代码部署到不同的服务器(例如,从 develop 分支到预发布服务器,从 master 分支到生产服务器)。这很容易做到。将以下内容添加到您的 deploy.ini 配置中

branch = develop

然后 git-deploy 将始终将 develop 分支的最新提交部署到服务器。

列出要上传和删除的文件

有时,您可能只想查看要上传到 FTP 服务器的文件以及要删除的文件。在这种情况下,您可以使用 -l(小写 L)

php git-deploy -l [your_ini_file_name]

如果您使用 deploy.ini(即,如果您没有为 .ini 文件提供自定义名称),那么您可以直接使用以下命令

php git-deploy -l

很简单,对吧?

自动清理远程目录

如果您有希望在部署新提交时清除的用于缓存的目录,您可以在您的 .ini 文件中添加以下内容

clean_directories[] = folder/to/clean
clean_directories[] = another/folder

然后 git-deploy 将为您清空这些目录。

忽略文件

如果您有不想上传到服务器的文件,您可以在您的 .ini 文件中添加以下内容

ignore_files[] = file/toignore.txt
ignore_files[] = another/file/toignore.php

然后 git-deploy 将忽略这些文件。

上传未跟踪的文件

如果您有未跟踪在您的仓库中但希望上传的文件,您可以在您的 .ini 文件中添加以下内容

upload_untracked[] = folder/to/upload
upload_untracked[] = another/file/toignore.php

git-deploy 会自动为您上传这些文件。这对于像 Composer 这样的工具非常有用,它建议您不要在 git 仓库中跟踪 vendor 文件夹。这样,您可以让 git-deploy 将整个 vendor 文件夹上传到服务器,而无需在该服务器上安装 Composer。

只有当仓库与远程同步时才进行部署

如果仓库由多个人维护,并且您担心有人在本地仓库未与远程对齐时进行部署,您可以在这种情况下让 git-deploy-php 阻止操作。要配置此行为,只需将以下内容添加到您的 .ini 文件中

check_sync_with_remote = true

在部署期间启用您的网站的维护模式

如果您想在部署过程中关闭网站,显示“正在维护”页面以防止用户看到错误,您可以让 git-deploy 在部署前自动启用维护模式,并在部署结束时关闭。

它通过修改您的 deploy.ini 中指定的 maintenance_file 选项的文件来实现。它将在部署开始时将文件的 内容设置为 maintenance_on_value,然后在部署结束时将其内容设置为 maintenance_off_value。例如

maintenance_file = 'maintenance.php'
maintenance_on_value = '<?php $under_maintenance = true;?>'
maintenance_off_value = '<?php $under_maintenance = false;?>'

注意:您的应用程序需要通过检查 maintenance_file 来检测维护模式是否开启,并据此进行操作。

一些框架在特定位置查找文件,如果文件存在,则显示其维护页面,而不考虑文件的内容。您可以在部署结束时通过不设置 maintenance_off_value 来删除此文件。以下示例适用于 Laravel 5:maintenance_file = 'storage/framework/down' maintenance_on_value = 'Down for maintenance'

工作原理

git-deploy 在您的服务器上存储一个名为 REVISION 的文件。该文件包含您已部署到服务器的提交的哈希值。当您运行 git-deploy 时,它将下载该文件,并比较其中的提交引用与您要部署的提交,以确定要上传哪些文件。

git-deploy 还为您的仓库中的每个子模块存储一个 REVISION 文件,以及为您的仓库和每个子模块存储一个 PREVIOUS_REVISION 文件。这允许它保持您的子模块更新,并在您运行 php git-deploy --revert 时知道要回滚到哪个提交。

建议、问题和投诉。

如果您有任何建议、问题或对 git-deploy 的任何不满,您应该在下面创建一个问题。如果您想为此项目做出贡献,请随意 fork 此项目。