brunodebarros / git-deploy-php
git-deploy-php 是一个简单的基于 PHP 的工具,可以将您的 Git 仓库部署到 FTP/SFTP 服务器,并自动保持更新。
Requires
- ext-ftp: *
Requires (Dev)
- league/climate: ^3.2
- league/flysystem: ^1.0
- phpseclib/phpseclib: ^2.0
- phpunit/phpunit: ^5.1
This package is auto-updated.
Last update: 2024-08-29 04:14:29 UTC
README
git-deploy-php 允许快速轻松地将 Git 仓库部署到 FTP 或 SFTP 服务器。您不需要在服务器上安装 git。非常适合没有 shell 访问的共享服务器,并且可以通过只上传已更改的文件来节省带宽和时间。
用法
- 将
git-deploy
添加到您的项目中。 - 创建
deploy.ini
文件(见下文)。 - 在您的命令行/终端中运行
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 此项目。