use*_*065 11 git wordpress ssh
总的新手问题但是在使用SSH和Git时最好的做法是什么?我正在开发一个WordPress项目.在根目录中我有gulp和其他开发文件/文件夹,如SASS和Scripts,我不需要在服务器和同一项目中,我有我的WordPress文件夹,其中包含一个主题和一些自定义插件.正如您可以想象的那样,当主题或任何插件准备好部署时,我不想将服务器上的所有内容都拉出来.至于一个新手,我总是拉动并推动整个存储库并使用FTP将我需要的内容上传到服务器,那么如何使用SSH和Git完成这项工作是否有更好的方法?
编辑:为了让我的问题更清楚一点,让我举一个例子,说明我认为我的问题是什么.在我的主项目文件夹中,我的WordPress文件夹旁边有一个SASS文件夹.我真正需要部署到服务器的是WordPress文件夹.我的开发机器上发生的构建过程将所有SASS文件组合成一个CSS,然后放入WordPress文件夹.我需要Git跟踪SASS文件夹,以便任何其他开发人员可以拉动它们并继续开发,所以我不能让git忽略它.但是,这些SASS文件都不需要在服务器上供WordPress工作.我只需要部署WordPress文件夹及其中的所有内容.
我理解在服务器上创建一个裸存储库并使用post-receive hook指向位于web根目录之外的git文件夹以指向web根目录的想法.但这基本上就是GIT和SSH如何运作,而这并没有回答我的担忧.
Git不是专门用于提取特定文件或目录.它是一个有向的非循环图,其中二进制blob作为对象,有时多个对象被压缩成一个更大的对象.
由于Git设计,您无法提出具体要求.
如果您的网站只包含简单的静态文件,那么可以通过SSH推送到git存储库.实际上,只要您没有非文本文件,您的存储库就不可能很大.
以下面的设置为例.
/var/lib/www - apache web dir是克隆的副本 www.git/var/lib/www.git - 一个简单的git存储库./var/lib/www.git/hooks/post-recieve - 服务器端git hook.它可以是一个shell脚本,可在www更新此存储库时提取存储库.示例post-recieve钩子脚本:
#!/bin/bash
cd /home/sam/sandbox/git-hooks/www
unset GIT_DIR
git fetch origin master
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)
在构建结束时,您可以在tar.gz中压缩文件.这个文件应该托管在某个地方(如果你使用的是GitHub,可能会发布GitHub).有些企业使用像Nexus或Artifactory这样的内部工件托管.
这个想法是:你有一个具有特定sha256sum的测试工件.您测试的工件是完全相同的工件,最终会生产.
深入了解诸如持续集成,持续交付和软件开发生命周期等更多细节可能超出了您的问题的范围.
Git用于源代码控制,而不是用于部署.没有最佳实践以这种方式使用git,因为git不是部署工具.您也不需要在服务器上使用git历史记录.实际上,除非您坚持使用它进行部署,否则根本不需要git.欢迎您以这种方式使用它,但它并不理想,因为您正在询问的问题类型.
您可以使用许多工具来处理部署.大多数工具通常允许您设置一系列步骤,以便将所需的代码部署到所需的环境中.您可以使用PHP世界中的Phing或Deployer等简单工具,或者如果您有更复杂的需求,可以使用像Puppet或Chef这样的更复杂的工具.如果您需要的东西非常简单,您可以编写自己的bash脚本.鉴于您提供的信息,我推荐Phing或Deployer.https://deployer.org/ https://www.phing.info/
您只需将您希望ssh的任何工具配置到目标框中,并将您想要的文件复制到服务器上所需的目录中,无论您希望以何种方式执行此操作.通常,您将脚本副本文件复制到临时目录中,然后将它们压缩,将它们ssh过来并解压缩它们.之后,您通常会在服务器上做一些额外的工作来移动文件,更改符号链接,以及您可能需要做的任何其他事情.
您需要做的就是添加步骤以处理静态文件以及您希望它们到达的位置.在推送内容时将生成的静态文件包含在tarball中,并在解压缩后将它们放在服务器中的正确目录中.
当您配置SASS编译器以及您可能具有的任何其他预编译静态代码时 - 您将其配置为创建目标文件.也就是说,它们生成的实际CSS和JS的文件.这就是你需要携带的所有内容 - 如果你的目标目录设置在你的wordpress主题中,你可能甚至不需要特别注意它的处理.一旦它们在服务器上,您可能需要将它们移动到其他位置,但这一切都取决于服务器中的特定设置,我认为这超出了本问题的范围.
你没有问过这个,但我认为值得一提的是,每次更新时都不应该发送整个wordpress存储库.就像您不需要未编译的SASS代码一样,您也不需要重新打包核心WordPress.你甚至不需要提交核心WordPress,它是一个依赖项,你不需要改变它.
所有应该由你提交的是你的主题和插件代码,以及未编译的静态文件.编译的静态文件和外部依赖项(如WordPress核心)不属于您的git历史记录.出于部署目的,应该已经安装了WordPress.你的tarball中的东西应该只是插件和主题,以及其他静态文件,如果由于某种原因它们还没有.
不要使用git.使用像Phing或Deployer这样的工具.将静态文件构建到您的主题中,并创建phing/deployer脚本,这些脚本只会压缩您想要的代码,将SSH连接到您的服务器,并将其解压缩到您想要的目录中.如果服务器上有一些特殊的静态文件位置,请确保在脚本中添加步骤.
因此,根据您的问题和评论,涉及三台计算机。有一个Web服务器(当你说“服务器”时,我将其视为本场景中的Web服务器,或者运行Web服务器程序的服务器计算机)。还有另一台服务器托管您的 git 存储库。并且,还有您的开发工作站。它是否正确?
看起来,您的 Web 服务器上有一个克隆的 git 存储库。您当前的实践/工作流程似乎是(1)(基于您的表达“通过 SSH 连接到我的服务器”)您通过 SSH(就像 Telnet 一样)从您的工作站登录到 Web 服务器(SSH 只是一种协议,它可以用于不同的目的)。(2) 从托管服务(例如 github)上的存储库中提取数据,(3) 将其部署到同一服务器上的“www”目录。它是否正确?
(我可以根据您对“FTP”等词的使用想到另一种场景,但现在让我们关注上述场景。)
现在,您的问题是,每当您(在 Web 服务器上)“拉取”时,您都会感觉正在从托管服务上的存储库中拉取所有内容。还有,有更好的办法吗?我正确理解你的问题吗?
如果是这样,正如另一位评论者所建议的那样,git(以及一般情况下的任何版本控制系统)非常擅长仅获取“增量”。如果您担心每次拉取时都会“获取所有内容”(上面的步骤(2)),那么您的担心是没有根据的。
现在的问题是,如果确实如此,为什么您的 Web 服务器上有 git 存储库?这是一个非常合法的设置,我之前已经这样做过(例如,在 EC2 上)。但是,作为最佳实践,人们通常不会在“生产”服务器上这样做。这是因为您必须“构建”您的 Web 应用程序,而您确实不想在生产服务器上执行此操作。
下一个问题是,您在步骤(3)中具体做了什么?构建过程(无论您使用什么过程)通常会生成一个“输出”,可以直接部署到 Web 服务器。(约定是输出通常是单个文件夹,“public”、“www”、“dist”等,或者单个文件(例如 tar.gz、zip、jar、war)等)无论您是在开发工作站(或构建机器)上还是在 Web 服务器上构建可部署输出,通常不会在这种情况下执行“增量”。即使您只更改了一个文件(例如 CSS 文件),通常也会再次构建整个输出(而不是仅替换更改后的 CSS 文件)。当您使用FTP上传文件等时,您可以选择性地上传某些文件和/或目录等,但作为一般做法,我们不这样做。我们总是从头开始构建完整的输出并将其部署到 Web 服务器。(这主要是为了减少潜在的部署错误并提高可靠性。)
因此,要回答您的问题,(A) 如果您要在 Web 服务器上拉取 git 存储库,您应该真正改变这种做法,并将构建过程移至您的开发计算机或专用构建机器上。(顺便说一句,像 github、gitlab、TFS 这样的服务为您提供构建服务。) (B) 如果您当前有选择地将 Web 应用程序文件 FTP 到您的 Web 服务器,那么您确实应该考虑采用某种类型正式构建和部署过程的进展。
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |