核心要点
.gitignore
忽略某些文件并在运行部署路由之前检查这些文件是否存在来实现。其他方法还包括密码保护或 IP 地址限制。成功的 Web 开发离不开有效的网站部署工作流。无论你的工作流好坏与否,如果无法将网站上线,客户就无法支付你的辛勤劳动成果。
网站部署到生产服务器的方法有很多,每种方法都有其优缺点,但起始和结束方式都相同。一个好的网站部署工作流的关键在于中间步骤。
前几天,我使用 FileZilla 将文件上传到我的生产服务器。我一直觉得 FileZilla 的界面不太友好,但很长一段时间以来,我一直认为这是标准做法。
对于同一个项目,我还使用 Git 跟踪文件更改。当我开始输入 git push origin
时,我停下来思考了一下。如果网站部署像推送 Git 仓库一样简单,岂不是方便多了?
仔细想想,Git 是处理网站部署文件的完美工具。它跟踪所有文件更改,并只需一条命令即可推送或拉取所需内容。我决定开始在 Google 上搜索一种在部署我自己的网站时使用 Git 的方法。
我发现的一种使用 Git 部署网站的流行方法是充分利用 Git Hooks(Tom Oram 喜欢使用类似的方法)。想象一下,只要在终端控制台中输入 git push origin
,Git Hooks 就会启动预定义的脚本。该预定义脚本访问你的生产服务器并拉取最新的文件更改。使用与推送更改相同的命令,你也可以更新你的网站。我认为这种方法很棒,直到我意识到,仅仅因为我推送了本地仓库并不意味着我已准备好上线。
我想要一种像使用 Git 推送仓库一样简单的方法。更重要的是,我希望在将内容上线时拥有完全的控制权。我找到了一个类似的工作流,它使用 Git 处理文件传输。最重要的是,我还发现可以使用 PHP 框架 Laravel 来自动化更重复的任务。
以下是我的网站部署工作流:
结构设置
在本节中,我们将设置一个 --bare 仓库作为我们的中心仓库,并通过克隆创建两个仓库。一个是我们的本地网站,我们将在其中执行部署过程;另一个是我们的线上网站。我们还将安装 Laravel。
在开始之前,你需要一台安装了 Git 的本地服务器和生产服务器。
SSH 连接到你的生产服务器,找到你希望中心仓库所在的目录。
<code>ssh username@domain.com cd repos</code>
现在初始化你的仓库。
<code>git init --bare --shared mywebsite.git</code>
通常建议将此文件夹放在公共文件夹结构之外。这样,其他人就不会意外地偶然发现你的私有仓库。
确定要在你的 public_html
中托管线上网站文件的哪个位置。
<code>cd ~/public_html/</code>
现在克隆你刚刚创建的中心 --bare 仓库,并注销此 SSH 会话。
<code>git clone username@domain.com:~/repos/mywebsite.git mywebsite exit</code>
如果你使用的是 Homestead 之类的东西,你可能需要使用 Vagrant 命令来 SSH 连接到你的本地服务器以访问你的文件。
<code>vagrant ssh</code>
按照你刚刚创建线上网站的步骤进行操作。
<code>cd websites git clone username@domain.com:~/repos/mywebsite.git mywebsite</code>
在设置 Laravel 之前,你需要在本地网站上安装它。
通过打开 /app/config/remote.php
来将你的远程服务器设置添加到配置文件中。
<code>'connections' => array( 'production' => array( 'host' => 'domain.com', 'username' => 'username', 'password' => '********************', 'key' => '', 'keyphrase' => '', 'root' => '/var/www', ), ),</code>
请记住“production”键,因为我们稍后需要引用它。
将你的文件添加到本地网站仓库中,以便我们跟踪对它们的任何更改。
<code>git add .</code>
执行你的初始提交。
<code>git commit -m 'initial commit with laravel'</code>
最后,推送到生产服务器上的中心仓库。
<code>git push origin master</code>
访问你的 localhost 时,你应该会看到 Laravel 的“You have arrived.”屏幕。
干得好!你已经全部设置和配置好了,现在应该准备好深入了解有趣的内容了。
使用 Git 的核心工作流
一切设置好后,使用 Git 部署你的网站就易如反掌了。让我们看看代码,尝试理解其核心内容。
理解工作流很重要,因为我们稍后将在 PHP 中使用 Laravel 重写它。它还有助于我们调试可能出现的任何问题。
<code>ssh username@domain.com cd repos</code>
<code>git init --bare --shared mywebsite.git</code>
如果你到目前为止一切正确,访问你的线上站点时,你应该会看到 Laravel 的“You have arrived.”屏幕。
如果你想就此停止,我不会对你有什么看法。这本身就是一个相当可靠的部署工作流。但是我们可以通过使用 Laravel 自动化它来使其更高效。
使用 Laravel 自动化部署
好的,既然我们知道如何使用 Git 部署网站,那么让我们使用 Laravel 来自动化此过程。这部分可能不是必需的,但如果你已经在使用 Laravel,我会问:“为什么不呢?”在这里使用 Laravel 使这个网站部署工作流变得简单、高效、可控且可定制。
打开 /app
文件夹中的 routes.php
页面,并将以下 PHP 代码行添加到文件中。
<code>cd ~/public_html/</code>
每当我们访问 http://localhost/deploy
时,Server
控制器的公共函数 deploy
都会执行。
从一个扩展 BaseController
的空 Server
类开始。
<code>git clone username@domain.com:~/repos/mywebsite.git mywebsite exit</code>
现在将公共函数 deploy
插入到控制器中。
<code>vagrant ssh</code>
将其保存在你的 /app/controllers
文件夹中,并将其命名为 Server.php
。
有趣的部分来了!
deploy
函数中,并重复 Git 部署工作流。插入 SSH facade。我们要访问我们之前设置的生产远程配置。
<code>cd websites git clone username@domain.com:~/repos/mywebsite.git mywebsite</code>
现在 run()
函数将接受我们需要提供的两个参数。第一个也是最重要的参数是我们想要在执行 deploy
函数时运行的终端命令数组。
<code>'connections' => array( 'production' => array( 'host' => 'domain.com', 'username' => 'username', 'password' => '********************', 'key' => '', 'keyphrase' => '', 'root' => '/var/www', ), ),</code>
第二个是我们想要调用的函数,用于处理我们从服务器接收到的反馈。
<code>git add .</code>
现在,每当我们想要部署我们的网站时,我们只需要访问 http://localhost/deploy
就可以了。够简单吧?是的,也不完全是。
在我们称其为结束之前,我们需要处理一些安全漏洞。任何人都可以偶然发现 http://domain.com/deploy
并部署我们的网站。我们需要做的是设置一些东西来防止这种情况。
有很多方法可以做到这一点,我们可以争论哪种方法最安全,直到我们筋疲力尽。你可以保护路由的密码,你可以通过 IP 地址阻止访问,等等。
在这个例子中,我们将使用 .gitignore
,并检查文件是否存在,然后再运行我们刚刚创建的路由。
controllers
中创建一个 .gitignore
文件以忽略 Server.php
。创建一个新文件并将其保存在 /app/controllers
中,命名为 .gitignore
。
将以下文本行添加到文件中并保存。
<code>ssh username@domain.com cd repos</code>
Server.php
文件。还记得我们之前创建的用于部署我们网站的路由吗?我们需要用这个条件语句将其包装起来,然后我们就可以上线了。
<code>git init --bare --shared mywebsite.git</code>
完成后,它应该如下所示。
<code>cd ~/public_html/</code>
发挥创意
就是这样!只需暂存所有更新的文件、提交、推送,你就可以开始使用 Git 友好的工作流进行部署了。
如果你愿意,你可以更进一步。只需将 http://localhost/deploy
添加到你的书签中即可进行一键式快速部署。你甚至可以创建一个简单的 HTML 表单来发布到该页面,允许你拉取特定的分支。可能性是无限的。
使用 Git 和 Laravel 进行部署使我枯燥乏味的网站部署任务变得有趣起来。如果你了解 Git,它很容易设置,但使用起来更容易。
请与我分享你用来简化网站部署的创意方法!
使用 Laravel 和 Git 部署网站的常见问题解答 (FAQ)
在使用 Git 部署 Laravel 网站时,可能会出现冲突,尤其是在多个开发人员处理同一个项目时。要解决这些冲突,你需要使用 Git 的冲突解决工具。当出现冲突时,Git 将暂停变基并给你机会修复冲突。然后,你可以使用 git add
添加已解决的文件,并使用 git rebase --continue
继续变基。在开始工作之前,务必始终从仓库中拉取最新的更改,以最大限度地减少冲突。
Git 分支是管理 Laravel 项目不同版本的强大工具。你可以为每个特性或错误修复创建一个新分支,这允许你同时处理多个任务,而不会影响主代码库。任务完成后,你可以将分支合并回主代码库。这种方法确保主代码库保持稳定且无错误。
自动化部署过程可以节省大量时间和精力。你可以使用 Git hooks,它们是在提交、推送和接收等事件之前或之后 Git 执行的脚本。你可以编写一个脚本,以便每当你推送到主分支时自动部署你的网站。这样,你可以确保你的网站始终与最新的更改保持一致。
Git 提供了几种回滚更改的方法。你可以使用 git revert
创建一个新的提交来撤消特定提交中所做的更改。或者,你可以使用 git reset
将 HEAD 指针移动到之前的提交,有效地“忘记”之后出现的提交。使用 git reset
时要小心,因为它可能会永久删除你的更改。
安全性是任何 Web 开发项目的重要方面。在使用 Git 部署 Laravel 项目时,请确保将敏感文件(如 .env
)添加到你的 .gitignore
文件中,以防止它们被提交到仓库。此外,在从仓库推送和拉取时,始终使用安全协议,例如 SSH 或 HTTPS。
Laravel 的迁移系统是管理数据库模式的强大工具。部署项目时,你可以使用 php artisan migrate
来应用任何挂起的迁移。但是,在与多个开发人员一起工作时要小心,因为冲突的迁移可能会导致问题。在创建新的迁移之前,始终从仓库中拉取最新的更改,以避免冲突。
Git 是一个强大的协作工具。你可以使用分支同时处理不同的特性,并使用拉取请求来审查和将更改合并到主代码库中。此外,Git 的冲突解决工具可以帮助你解决合并更改时出现的任何冲突。
Git 提供了对项目中所有更改的完整历史记录。你可以使用 git log
查看提交历史记录,并使用 git diff
查看特定提交中所做的更改。这对于调试和理解项目的演变非常有用。
性能优化是 Web 开发的关键方面。在使用 Git 部署 Laravel 网站时,你可以使用 Laravel 的内置缓存功能来提高性能。此外,考虑使用 CDN 来提供静态资源,并优化你的图像和其他资源以减少加载时间。
正确处理错误和异常对于流畅的用户体验至关重要。Laravel 提供了一个强大的异常处理系统,你可以用它来处理不同类型的错误。当发生错误时,你可以在修复错误的同时使用 Git 回滚到之前的稳定状态。
以上是使用Laravel和Git部署您的网站的详细内容。更多信息请关注PHP中文网其他相关文章!