如何通过git pull部署网站?

时间:2017-08-05 04:59:32

标签: git github deployment web-deployment

我计划使用GitHub来管理我的下一个网站的代码。虽然我过去使用过GitHub,但我从未用它来部署网站。我相当简单的计划如下:

enter image description here

但是,我对这个模型有几个担忧:

  1. 如果我在远程服务器上使用git pull,这是否意味着我的网站目录本身将成为git存储库?如果是这样,有没有办法可以避免这种情况?例如,我可以创建一个/var/repo目录来包含git存储库,然后" copy"代码到实际的网站目录(/var/www)?有没有一种有效的方法来设置它?

  2. 我们假设我是第一次运行git pull并在我的服务器上部署网站。接下来,让我们假设我编辑现有文件,并通过FTP直接在服务器上添加文件。当我第二次运行git pull时,git将如何处理这两个文件?我的编辑文件会被替换,我的新文件会被删除吗?我的编辑文件会被替换,我的新文件是否会被取消?我根本不能运行git pull吗?

  3. 假设我的计算机上有一个名为config.php的文件,其中包含可以访问我的数据库的各种用户的用户名/密码。由于我的计算机上的config.php是为我的localhost环境配置的,所以当我第一次在服务器上使用git pull时,我将不得不编辑变量。因此,当我第二次运行git pull时,我的服务器上的文件是否又被localhost版本替换了?

  4. 作为最后一个问题的后续问题:处理包含用户名和密码等数据的配置文件的最佳方法是什么?我不仅想要从公共GitHub存储库中隐藏这些敏感数据,而且我还想确保在运行git pull时,我服务器上已修改的配置文件保持不变。

2 个答案:

答案 0 :(得分:1)

  1. 如果没有使用git repo,则无法运行git pull,因此第一次必须执行git clone repo_url才能将代码提供给远程服务器。如果您不想将.git保留在var/www即您的git repo中,那么您可以将代码提取到其他目录,然后使用rsyncmv移动代码。

  2. 直接在远程服务器上编辑文件被认为是一种不好的做法,它可能会给你的回购带来冲突。无论如何,如果你直接在远程服务器上编辑,你将无法从github中提取,因为git会抛出错误your local changes will be overwritten with this merge。因此,您必须隐藏更改或完全删除它们。

  3. 对于包含密码和其他内容的文件,我建议为本地和远程服务器使用环境变量。使用config.php中的环境变量从系统中获取敏感信息。您只需在远程服务器中设置一次这些环境变量

  4. 如果您有任何敏感数据,请将这些文件放在.gitignore中。当您从github中提取代码时,gitignore中的任何文件都将保持不变,因为git将忽略这些文件。

答案 1 :(得分:1)

  1. 是的,它会的。但是,如果您在.htaccess(或等效文件)中指定不提供.git文件夹,则不应对最终用户造成太大影响。

  2. 如果您要使用服务器git pull,那么您不想直接修改服务器上的内容。如果这样做,则必须在服务器上提交更改,然后将其与本地更改合并。这将变得凌乱。因此,只需在本地计算机上进行修改,然后相应地推拉。

  3. 您应该从不以纯文本格式存储密码,尤其是在公共GitHub存储库中。拥有一个完全独立的服务器部分(不在git下),用于存储用户名/密码哈希和盐渍。您可以单独FTP到这个位置。您还可以拥有2个单独的文件,一个用于本地开发,另一个用于服务器。

  4. 我已经回答了这个问题,请确保将用户名/密码存储在其他地方。