2020 年部署 Web 应用的 4 种方式
随着时间的流逝,我们看到越来越多的人将自己的想法融入网页设计。我们所说的这些人可能熟悉也可能不熟悉网页设计和发布的技术细节,因此在搭建平台(网站)时可能会遇到不少问题。该使用什么主机服务?如何设置 DNS 和 SSL?最重要的是,如何部署 Web 应用?今天,我们将讨论和比较不同的 Web 应用部署平台,帮您找到最适合您的那一个!
首先,让我们来看看您有哪些选择:
- 常规托管(Digital Ocean、AWS、GCP)+ Jenkins
- GitHub Actions/Bitbucket Pipelines + Heroku
- Travis-CI/Circle-CI
- 全自动云平台
常规云托管 + Jenkins
Jenkins 是 CI/CD 平台的巨头之一。它是一款自动化的 CI/CD 软件(没错,对吧?),基于主代理架构运行。那么什么是主/代理呢?其实,代理只是对软件的一种更贴切的说法,它安装在一台机器上,用于协调(和绑定)不同的构建。Jenkins 使用一个主服务器来连接和协调所有可用的代理。那么,哪些机器可以完成这些任务呢?通常情况下,包含 Docker 的虚拟机 (VM) 是首选,因为这样做更容易,但 Docker 并非必需。其他可用的机器包括物理服务器,甚至是运行在 Kubernetes 上的临时容器。
优点:
- 它是高度可定制的。
- 它拥有超过 1.5K 个插件,非常灵活。所以,对于你想尝试的任何测试用例,很可能已经有人帮你完成了 :D。
- 即使您是第一个运行特定测试用例的人,您也可以构建自己的插件和/或共享库=>友好的社区。
- 它支持更快的构建和缓存模块。由于它不像竞争对手那样强制我们使用 Docker 镜像,因此服务中的任何内容都可以缓存以供后续使用,从而使其速度比许多竞争对手更快。
- 不仅限于基于Linux的系统,我们也可以使用Windows的系统。
缺点:
- 它是一种非托管服务。
- 您需要定期确保服务器正在运行、SSL 已锁定、有安全补丁或可以访问互联网。
- 您需要手动解决所有操作问题。例如,如果出现问题,您需要跟踪并修复它。
Bitbucket Pipelines/Github Actions 与 Heroku
Bitbucket 的 Pipeline 是另一个类似于 Jenkins 的平台,但使用起来更方便。Bitbucket Pipeline 的工作方式与 Github Actions 类似,都使用 Git 版本控制系统。您可以根据所使用的平台选择其中一种。Pipeline
是一个不容错过的功能。借助 Pipeline,大部分 SDLC(软件开发生命周期)都可以完全自动化。因此,Bitbucket Pipeline 是一个比 Jenkins 更简单的替代方案(尽管功能有限)。Bitbucket
使用 Docker 镜像来运行构建。每个步骤中的镜像也可以有所不同,从而更容易区分 SDLC 的每个步骤。
优点:
- 当然,它比手动操作甚至使用 Jenkins 要容易得多(如果您关心的是容易性)。
缺点:
- 由于它使用 Docker 镜像,因此它比 Jenkins 慢。
- 它无法跨管道共享工件。
- 管道基于 Docker 镜像运行。因此,每次更新都会获得一个全新的镜像,除非缓存,否则上一个管道的数据不会被保留。然而,即使缓存了数据,7 天后也会丢失。这意味着任何非远程文件都将丢失,这对于大型测试(输入或基线字段数量巨大)来说并不理想。
下面是如何使用 Bitbucket Pipelines + Heroku 进行自动持续集成和部署的分步示例:
- 前往 bitbucket.com 并创建一个新的 repo(如果您的项目已经有 repo,则可以跳过此步骤)
- 将您的项目代码推送到 bitbucket。
- 设置云提供商,我这里选择的是 Heroku。[也是第一次使用 Heroku?不用担心,只要坚持到最后就行了……]
- 前往 Heroku.com → 创建项目:
- 在 Heroku 中设置环境变量:(项目 → 设置 → 配置变量):
- 一旦您的项目与 Heroku 兼容(检查https://devcenter.heroku.com/categories/reference),我们就可以配置 Bitbucket 设置。
- 前往 Heroku.com → 创建项目:
- 在 Bitbucket → 项目 → 存储库设置 → 存储库变量中,添加应用程序的所有环境变量。
- 在 bitbucket 上添加以下两个变量:
HEROKU_APP_NAME: <'Name of Your Heroku App'>
HEROKU_API_KEY: <'API Key for Your Heroku Account'>
您可以从 Heroku → Profiles → API Key 获取 API Key
- 设置管道:
- 前往 Bitbucket → Pipelines → 选择您的语言并继续。以下是示例:
image: python:3.7.2
pipelines:
default:
- step:
name: Testing The WebApp
script:
- pip install -r requirements.txt
- ./manage.py test
- step:
name: Build Process
script:
- git archive --format=tar.gz master -o sample-app.tar.gz
artifacts:
- sample-app.tar.gz
- step:
name: Deploying to production Using Heroku
deployment: production
caches:
- pip
script:
- git push -f https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_APP_NAME.git $BITBUCKET_BRANCH
- 配置完管道后,提交/推送更改。现在,在“管道”选项卡中,您可以找到正在运行和/或已完成的管道的日志。
- 如果测试、构建和部署过程成功,您将获得一个绿色勾号,表示成功:
- 如果测试、构建和部署过程失败,您将收到一个红色错误信息“失败”:
*如果代码通过测试且没有构建错误,则部署将继续,新代码将上线。现在,您将能够使用您的域名或 Heroku 提供的子域名访问您的网站:
- 如果测试、构建和部署过程成功,您将获得一个绿色勾号,表示成功:
Travis-CI/Circle-CI
Travis-CI 是社区中知名的托管 CI 服务,原因有很多。其中一个主要原因是它对开源项目免费,这意味着您只需为私有项目付费。它的持续集成环境还提供多种运行时,例如 Node.JS、PHP、Python 版本、数据存储等等。因此,当您在此平台上托管时,您可以轻松地针对多个运行时/数据存储测试您的库,而无需承担本地安装的负担。
优点:
- Travis 是一个易于设置的平台。只需向您的项目添加一些基本的构建说明,提交代码……瞧!您的网站就上线了。
- 大量服务和数据库(如 MySQL、PostgreSQL、Elasticsearch、Redis、Riak、RabbitMQ、Memcached)已安装并等待在配置中启用。
- Travis 支持很多部署平台,比如 Heroku、Cloud Foundry、OpenShift、Cloud Control、Nedejitsu 等。
- Travis CI 目前已经是一个成熟的平台,大多数(如果不是全部的话)常见的问题都得到了改进。这包括文档和日志的彩色支持……[很棒,不是吗?]
缺点:
- 虽然对于开源项目来说是免费的,但付费计划的代价是高昂的——每月 69 美元是垫脚石。
- 无法在 Travis 上直接修改存储库(如果您付费的话可以...),因此每次(即使)需要进行微小的调整时,都要转到存储库中的文件,这相当麻烦。
- 在 travis.yml 文件上设置构建矩阵相当困难。
- 对于免费计划,由于基础设施有限,构建队列有时会变得很长。
好的,既然我们已经讨论了这么多关于 Travis-CI 的内容,那么另开一个关于 Circle-CI 的讨论帖就有些多余了——它们在大多数方面本质上是相同的。但是,如果您的目标是一个小型项目,那么 Circle-CI 是您的首选,而 Travis-CI 更适合那些需要在各种环境中进行测试的开源项目。
如何使用 Travis-CI 进行 CI-CD?步骤如下:
- 创建一个 GitHub 仓库,设置 Travis-CI 帐户,并创建一个新的 Heroku 项目。这与我们之前在 Bitbucket 管道中所做的非常相似。*注意:默认情况下,Travis 会将您的项目部署到 Heroku 的应用中,应用名称与 GitHub 仓库名称相同。您可以在配置文件中更改此默认行为。
在使用 bitbucket 时,已经演示了如何设置 Heroku 项目。这里的步骤也是一样的,所以我就不再赘述了。
- 创建 Travis-CI 并将其链接到你的 GitHub 帐户后,你将能够看到 GitHub 中的所有仓库。所有仓库都会显示在 Travis 中,但任何包含 .tavis.yml 文件的仓库都将包含在 Travis-CI 构建中:
- 在项目的根目录中创建一个 .travis.yml 文件并添加以下配置(针对 Python)。
language: python
python:
- "3.8"
# command to install dependencies
install:
- pip install -r requirements.txt
# command to run tests
script:
- ./manage.py test
# command to deploy to heroku
deploy:
provider: Heroku
api_key: $HEROKU_API_KEY
请注意,这并非编写配置文件的唯一方法,但由于我在 Travis-CI 文档中读到过这种方法,因此我将按照其推荐的格式进行编写。您可以在他们的文档中找到特定于您语言的参考资料。
- 在你的 Travis-CI 帐户中,前往仓库设置并添加环境变量。你需要像在 bitbucket 管道中一样添加 $HEROKU_API_KEY 环境变量。前往“设置”->“变量”->“添加变量”。
- 现在您可以将您的存储库推送到 GitHub,一旦您推送它,Travis-CI 将自动启动该过程,您可以在 Travis-CI 中看到日志。
- 构建完成后:
- 如果成功,您将看到绿色的文字“#[Number] 已通过”。您的网站应该可以上线了。
- 如果构建失败,您将看到红色的“#[Number] 失败”字样。以下是由于 API_KEY 配置不当导致部署失败的示例:测试期间也可能出现此故障。
默认情况下,当提交者和提交作者是存储库成员时,会向他们发送电子邮件通知,即他们具有:
- 公共存储库的推送或管理权限。
- 私有仓库的拉取、推送或管理权限。在以下情况下,将在给定分支上发送电子邮件:
- 构建刚刚损坏或仍然损坏。
- 之前构建失败的问题刚刚修复。你还可以通过在配置文件 (.travis.yml) 中添加其他参数来配置其他通知选项,例如 Slack 或 IRC 等:
notifications:
slack:
on_success: always
请参阅他们的文档以获取更多信息
自动化云平台
最后,为了获得完整且简单的自动化解决方案,我们可以选择众多自动化云平台之一。 [其中,我个人更喜欢Hostman,但这完全是主观的。] 基本上,大多数幕后的编码工作都已经为您完成,因此您可以直接从 git 存储库部署代码。
您无需担心设置云服务器、Web 服务器和类似繁琐任务。
在大多数情况下,您将获得免费的 SSL 和 CDN,以获得最新的安全性和许多其他额外福利。由于比其他服务便宜且更易于使用,这些平台可以满足大部分使用需求。因此,除非您有一个专门的团队准备全力进行手动测试,或者想要支付其他自动化系统(如 Jenkins(仍然有大量手动工作要做)),否则最明智的选择是选择像 Hostman 这样的自动化云平台。
优点:
- 设置起来非常容易。
- 它是完全自动化的,因此菜单上没有太多手动操作。
- 所有运营问题都将由 Hostman 等提供商负责。
- 一次设置,无需定期管理,专注于编写优秀的代码。
- 它开箱即用地支持自动 Git 部署,因此您无需进行配置。
- 无供应商锁定。
缺点:
- 与 Jenkins 等其他平台相比,其功能可能有限。
- 截至目前,开箱即用的语言和框架略有限制。例如,Hostman 支持 22 个框架。但像 Jenkins 这样的提供商支持 100 多个插件,并且可以根据需要构建更多插件。
目前更新解决了大多数问题,因此我们对未来的更新如何将缺点数量转移到优点部分感到乐观。
同时,让我们看一个为自动持续集成和部署设置网站的简单方法:
- 在 Github 或 BitBucket 上创建一个 repo 并推送您的代码。
- 现在打开Hostman 仪表板并单击
+Create
左上角的按钮: - 选择您要托管的网站类型。就我而言,它是 Django 的后端,因此我将选择后端应用程序:
- 现在它会要求我选择一个仓库,我将选择我的仓库,托管在 GitHub 账户上,并链接到我的 hostman 账户。你也可以提供你的仓库链接,但不添加你的 GitHub 账户,但请确保它是一个公共仓库。
- 选择您想要的服务器规格。您可以轻松扩展。
- 选择 Repo 后,它会要求我自定义应用。根据你使用的语言输入正确的构建命令和启动命令。我这里部署的是 Django 项目,所以配置如下:
- 构建命令:
Python manage.py collectstatic --noinput && python manage.py test
- 启动命令:
gunicorn <projectname>.wsgi
- 点击
Deploy
并等待部署完成。- 如果您的项目通过测试,您将收到一封电子邮件或 Slack 消息,告知您构建成功。您也可以在控制面板中查看此信息。
- 如果您的项目未通过测试,您将收到一封电子邮件或 Slack 消息,提示“构建失败”。您也可以在控制面板中查看此信息。
如果构建成功,您的网站将立即上线。您可以在仪表盘中配置环境变量。
所有部署方法之间的表格比较:
比较类型/开发方法 | Travis-CI/Circle-CI | 云+詹金斯 | Bitbucket Pipelines/Github Actions | 自动化云平台 |
---|---|---|---|---|
所需知识 | 平均的 | 高的 | 平均的 | 低的 |
灵活性 | 高的 | 高的 | 中等的 | 低的 |
价格 | 对于开源项目免费,对于私有项目则为中等。 | 高的 | 中等的 | 低的 |
学习曲线 | 低的 | 高的 | 中等的 | 低的 |