创建和发布 Web 应用程序的清单

为了在我们这个时代创建您自己的 Web 应用程序,仅仅能够开发它是不够的。 一个重要的方面是设置用于应用程序部署、监控以及管理其运行环境的工具。 随着手动部署时代逐渐被遗忘,即使对于小型项目,自动化工具也可以带来切实的好处。 当“手动”部署时,我们经常会忘记移动某些东西,考虑到这个或那个细微差别,运行一个被遗忘的测试,这个列表可以持续很长一段时间。

本文可能会对那些刚刚学习创建 Web 应用程序的基础知识并想要了解一些基本术语和约定的人有所帮助。

因此,构建应用程序仍然可以分为两部分:与应用程序代码相关的所有内容,以及与执行该代码的环境相关的所有内容。 反过来,应用程序代码也分为服务器代码(在服务器上运行的代码,通常:业务逻辑、授权、数据存储等)和客户端代码(在用户计算机上运行的代码:通常接口以及与之相关的逻辑)。

我们从周三开始吧。

任何代码、系统或软件运行的基础都是操作系统,因此下面我们将看看托管市场上最流行的系统并对其进行简要描述:

Windows服务器 - 相同的 Windows,但采用服务器版本。 Windows 客户端(常规)版本中提供的某些功能此处不存在,例如,一些用于收集统计数据的服务和类似软件,但有一组用于网络管理的实用程序、用于部署服务器的基本软件(web、ftp、 ...)。 一般来说,Windows Server 看起来像普通 Windows,功能也像普通 Windows,但其成本却是普通 Windows 的 2 倍。 但是,鉴于您很可能将应用程序部署在专用/虚拟服务器上,因此您的最终成本虽然可能会增加,但并不重要。 由于Windows平台在消费操作系统市场占据压倒性的地位,因此其服务器版本将是大多数用户最熟悉的。

Unix的- 类似的系统。 这些系统中的传统工作不需要熟悉的图形界面,仅向用户提供控制台作为控制元素。 对于没有经验的用户来说,以这种格式工作可能很困难,退出数据中非常流行的文本编辑器的成本是多少 Vim的与此相关的一个问题在6年内已经获得了超过1.8万的浏览量。 该系列的主要发行版(版本)有: Debian - 一个流行的发行版,其中的软件包版本主要集中在 LTS (长期支持 – 长期支持),表现为系统和软件包具有相当高的可靠性和稳定性; Ubuntu – 包含最新版本的所有软件包的发行版,这可能会影响稳定性,但允许您使用新版本附带的功能; 红帽企业 Linux – 操作系统定位于商业用途,是付费的,不过,包括软件供应商的支持、一些专有包和驱动程序包; CentOS——开源 红帽企业 Linux 的一种变体,其特点是缺乏专有软件包和支持。

对于那些刚刚开始掌握这个领域的人,我的建议是系统 Windows服务器Ubuntu。 如果我们考虑Windows,那么这主要是对系统的熟悉程度, Ubuntu – 对更新的容忍度更高,从而减少了在需要新版本的技术上启动项目时出现的问题。

因此,在决定操作系统之后,让我们继续使用一组工具,这些工具允许您在服务器上部署(安装)、更新和监视应用程序或其部分的状态。

下一个重要的决定将是应用程序及其服务器的放置。 目前最常见的有3种方式:

  • 自己托管(保留)服务器是最经济实惠的选择,但您必须从提供商处订购静态 IP,以便您的资源不会随着时间的推移而更改其地址。
  • 租用专用服务器 (VDS) – 并独立管理它并扩展负载
  • 付费(通常他们会给你一个免费尝试平台功能的机会)订阅某些云托管,其中所使用资源的付费模式相当常见。 这个方向最突出的代表:亚马逊AWS(他们提供一年免费使用服务,但有每月限制)、谷歌云(他们给账户300美元,可以在一年内用于云托管服务) 、Yandex.Cloud(他们提供 4000 卢布 2 个月)、Microsoft Azure(免费使用流行服务一年,任何服务+ 12 卢布一个月)。 因此,您可以尝试这些提供商中的任何一个,而无需花费一分钱,但可以获得有关所提供服务的质量和水平的大致意见。

根据所选择的路径,未来唯一会改变的是谁主要负责这个或那个行政领域。 如果您自己托管,那么您必须了解任何电力、互联网、服务器本身、部署在其上的软件的中断 - 所有这一切都完全由您承担。 然而,对于训练和测试来说,这已经足够了。

如果您没有额外的机器可以充当服务器的角色,那么您将需要使用第二种或第三种方式。 第二种情况与第一种情况相同,不同之处在于您将服务器可用性及其权力的责任转移到了托管商的肩上。 服务器和软件的管理仍然在您的控制之下。

最后,可以选择租用云提供商的容量。 在这里,您可以设置几乎所有内容的自动控制,而无需涉及太多技术细节。 此外,您可以拥有多个并行运行的实例,而不是一台机器,例如,它们可以负责应用程序的不同部分,同时与拥有专用服务器的成本没有太大区别。 此外,还有用于编排、容器化、自动部署、持续集成等等的工具! 我们将在下面讨论其中的一些内容。

一般来说,服务器基础设施看起来像这样:我们有一个所谓的“编排器”(“编排”是管理多个服务器实例的过程),它管理服务器实例上的环境变化,一个虚拟化容器(可选,但相当经常使用),它允许您将应用程序划分为独立的逻辑层和持续集成软件 - 允许通过“脚本”更新托管代码。

因此,编排允许您查看服务器的状态、推出或回滚服务器环境的更新等等。 首先,这方面不太可能影响您,因为为了协调任何事情,您需要多台服务器(您可以拥有一台,但为什么这是必要的?),并且为了拥有多台服务器,您需要它们。 在这个方向的工具中,最受欢迎的是 Kubernetes,由 谷歌.

下一步是操作系统级别的虚拟化。 如今,“docker化”的概念已经广泛传播,它来自于工具 码头工人,它提供了彼此隔离的容器功能,但在一个操作系统的上下文中启动。 这意味着什么:在每个容器中,您可以运行一个应用程序,甚至一组应用程序,这些应用程序将相信它们是整个操作系统中唯一的应用程序,甚至不需要怀疑这台机器上是否存在其他应用程序。 此功能对于启动不同版本的相同应用程序或简单的冲突应用程序以及将应用程序的各个部分分层非常有用。 此层投射稍后可以写入图像,例如可用于部署应用程序。 也就是说,通过安装此映像并部署它包含的容器,您将获得一个用于运行应用程序的现成环境! 在第一步中,您可以使用此工具来获取信息,并通过将应用程序逻辑划分为不同的层来获得真正的好处。 但值得一提的是,并不是每个人都需要 Docker 化,而且并非总是如此。 Docker 化在应用程序“碎片化”、分成小部分、每个部分负责自己的任务(即所谓的“微服务架构”)的情况下是合理的。

此外,除了提供环境之外,我们还需要确保应用程序的正确部署,包括各种代码转换、应用程序相关库和包的安装、运行测试、有关这些操作的通知等等。 这里需要注意一个概念“持续集成”(CI——持续集成)。 目前这方面的主要工具是Jenkins(用Java编写的CI软件一开始可能看起来有点复杂), 特拉维斯CI (用Ruby写的,主观的,稍微简单一些 詹金斯不过,仍然需要一些部署配置领域的知识), 亚特实验室持续集成 (写在 Ruby 和 Go).

因此,在讨论了应用程序的运行环境之后,是时候最终看看现代世界为我们提供了哪些工具来创建这些应用程序。

让我们从基础开始: 后端 (后端)——服务器部分。 这里语言的选择、基本功能集和预定义的结构(框架)主要由个人喜好决定,但尽管如此,还是值得考虑的(作者对语言的看法相当主观,尽管有一个主张)公正的描述):

  • Python对于没有经验的用户来说是一种相当友好的语言,它可以原谅一些错误,但它也可以对开发人员非常严格,这样他就不会做任何坏事。 1991 年出现,已经是一种相当成熟且有意义的语言。
  • Go——来自Google的语言,也相当友好和方便,在任何平台上都很容易编译并获得可执行文件。 它可以是简单而愉快的,也可以是复杂而严肃的。 新鲜而年轻,是在 2009 年才出现的。
  • Rust 比 2006 年发布的前一个版本要老一些,但与同类产品相比仍然相当年轻。 针对更有经验的开发人员,尽管它仍然试图为程序员解决许多低级任务。
  • Java是商业开发的元老,于1995年推出,是当今企业应用开发中最常用的语言之一。 由于其基本概念和繁重的设置,运行时对于初学者来说可能变得相当具有挑战性。
  • ASP.net是微软公司发布的一个应用程序开发平台。 为了编写功能,主要使用2000年出现的C#语言(发音为C Sharp)。 其复杂度相当于Java和Rust之间的水平。
  • PHP最初用于HTML预处理,目前虽然在语言市场上占据绝对领导地位,但使用量有下降的趋势。 它的入门门槛较低,易于编写代码,但同时,在开发相当大型的应用程序时,该语言的功能可能会不够。

好吧,我们应用程序的最后一部分 - 对用户来说最有形的部分 - 前端 (前端)——是应用程序的表面;用户正是通过这部分直接交互的。

无需赘述,现代前端基于三个支柱:框架(但不是那么多),用于创建用户界面。 因此,最受欢迎的三个是:

  • ReactJS 不是一个框架,而是一个库。 实际上,该框架与其引以为豪的标题的不同之处仅在于缺少一些“开箱即用”的功能并且需要手动安装它们。 因此,这个库的“准备”有多种变体,形成了独特的框架。 由于一些基本原则和构建环境的相当激进的设置,对于初学者来说可能有点困难。 但是,为了快速启动,您可以使用“create-react-app”包。
  • VueJS 是一个用于构建用户界面的框架。 在这三位一体中,它理所当然地获得了最用户友好的框架的称号;对于 Vue 开发来说,进入门槛比其他提到的兄弟要低。 而且,他还是他们之中最年轻的一个。
  • Angular 被认为是这些框架中最复杂的一个,也是唯一一个需要 打字稿 (Javascript 语言的附加组件)。 通常用于构建大型企业应用程序。

总结上面所写的内容,我们可以得出结论,现在部署应用程序与以前的过程完全不同。 但是,没有人会阻止您以老式方式进行“部署”。 但是,一开始节省的一点时间值得选择这条道路的开发人员不得不犯的大量错误吗? 我相信答案是否定的。 通过花更多的时间熟悉这些工具(并且您不需要更多的时间,因为您需要了解当前项目中是否需要它们),您可以发挥作用,显着减少,例如、取决于环境且仅出现在生产服务器上的幽灵错误案例、每晚分析导致服务器崩溃的原因以及无法启动的原因等等。

来源: habr.com

添加评论