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

如今,要创建自己的网络应用程序,还不足以开发它。 一个重要方面是设置用于应用程序部署,监视以及对其运行环境的管理和管理的工具。 手动部署的时代已被遗忘,即使对于小型项目,自动化工具也可以带来明显的好处。 当“手动”部署时,我们常常会忘记转移某些东西,考虑到一个或另一个细微差别,进行被遗忘的测试,该列表可以持续相当长的一段时间。

本文可以为那些只了解创建Web应用程序的基础知识,并且想了解一些基本术语和约定的人提供帮助。

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

让我们从星期三开始。

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

Windows Server与Windows是相同的Windows,但服务器有所不同。 Windows的客户端(常规)版本中没有可用的某些功能,例如某些统计信息收集服务和类似的软件,但是有一组用于网络管理的实用程序,用于服务器部署的基本软件(Web,FTP,...)。 通常,Windows Server看起来像普通Windows,像普通Windows一样嘎嘎叫,但是它的价格是普通Windows的2倍。 但是,考虑到您很可能会将应用程序部署在专用/虚拟服务器上,因此最终成本(尽管可能会增加)并不重要。 由于Windows平台在用户操作系统市场上占据压倒性的地位,因此它的服务器版本将是大多数用户最熟悉的版本。

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

对于那些只了解这一领域的开发人员,我的建议是Windows ServerUbuntu 。 如果我们考虑使用Windows,那么这主要是Ubuntu系统的习惯-对更新的容忍度更高,例如,在需要新版本技术的项目上启动时,出现的问题就更少。

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

下一个重要的决定将是为其托管应用程序和服务器。 目前,最常见的是3种方式:

  • 最经济的选择是自行托管(维护)服务器,但您将不得不从提供商处订购静态IP,以便资源不会随着时间的推移而更改其地址。
  • 租用专用服务器(VDS)-并独立管理其管理和负载扩展
  • 在某些云托管上支付(通常同时免费提供平台功能)订阅,在这种云托管上,使用资源的支付模式非常普遍。 此方向最杰出的代表:亚马逊AWS(免费提供一年的服务使用,但有每月限制),Google Cloud(提供300美元到可以在一年内用于云托管服务的帐户),Yandex。Cloud(提供4000卢布。(2个月),Microsoft Azure(免费使用一年的流行服务,+ 12 500卢布用于一个月的任何服务)。 因此,您可以尝试这些提供商中的任何一家而无需花一分钱,但可以大致了解服务质量和水平。

将来,根据所选择的路径,只有事实会改变,在很大程度上,对特定管理领域的责任取决于谁。 如果您托管自己,那么您应该了解,电力,互联网,服务器本身以及部署在其上的软件的任何中断-所有这些都完全在您的肩膀上。 但是,对于培训和测试,这已经绰绰有余。

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

最后,可以选择租用云提供商的容量。 在这里,您可以配置几乎所有内容的自动控制,而无需过多关注技术细节。 此外,您可以让多个实例(实例)并行运行,而不是在一台机器上运行,例如,这些实例(实例)可以负责应用程序的不同部分,而与专用服务器的拥有成本却相差无几。 而且,还有业务流程,容器化,自动部署,持续集成等工具! 其中一些我们将在下面考虑。

通常,服务器基础结构如下:我们有一个所谓的“编排器”(“编排”-管理多个服务器实例的过程),用于管理服务器实例上的环境更改,还有一个虚拟化容器(可选,但经常使用),可用于拆分应用程序在隔离的逻辑层上,以及用于持续集成的软件-允许通过“脚本”更新托管代码。

因此,通过编排,您可以查看服务器状态,回滚或回滚服务器环境更新,等等。 最初,这方面不太可能引起您的关注,因为要编排某些内容,您需要多个服务器(一个可以,但是为什么有必要?),并且要有多个服务器,则需要它们。 在该领域的工具中,大部分是由Google开发的Kubernetes。

下一步是在操作系统级别进行虚拟化。 现在,“泊坞窗化”的概念已广泛使用,它来自Docker工具,该工具提供了彼此隔离的容器的功能,但这些容器是在同一操作系统的上下文中启动的。 这是什么意思:在这些容器中的每个容器中,您都可以运行一个应用程序,甚至可以运行一组假定它们是整个操作系统中唯一的应用程序,而无需知道此计算机上是否存在其他人。 此功能对于启动不同版本的相同应用程序,或仅冲突应用程序,以及将应用程序划分为多个层都是非常有用的。 随后可以将此层转换写入映像,该映像可用于例如部署应用程序。 也就是说,安装该映像,并扩展其中包含的容器,您将获得一个现成的环境来启动应用程序! 在第一步中,您可以将此工具用于教育目的,并且可以通过将应用程序逻辑分布到不同的层中来获得真正的好处。 但是,值得在这里说的是,并非每个人都需要dockerization,并非总是如此。 在将应用程序“碎片化”(分为多个小部分,每个小部分负责自己的任务)的情况下,对接是合理的,即所谓的“微服务体系结构”。

除了提供环境外,我们还需要提供应用程序的有效部署,其中包括各种代码转换,与应用程序关联的库和软件包的安装,运行测试,有关这些操作的通知等。 在这里,我们需要注意诸如“连续集成”( CI-Continuous Integration )的概念。 目前,这方面的主要工具是Jenkins(一开始用Java编写的CI的软件似乎有点复杂), Travis CI (主观上用Ruby编写的工具)比Jenkins简单一些,但是,部署配置区域), Gitlab CI (用Ruby和Go编写)。

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

让我们从基础开始: 后端 (backend)-服务器端。 语言的选择,一组基本功能和预定义的结构(框架)主要由个人喜好决定,但是仍然值得一提(作者对语言的看法很主观,尽管声称描述不偏不倚):

  • Python对缺乏经验的用户来说足够友好,可以容忍一些错误,但是对于开发人员来说,Python也可能非常严格,这样他就不会做任何坏事。 1991年出现的PL已经相当成熟和有意义。
  • Go是Google的一种语言,它也非常友好和方便,它很容易在任何平台上编译和获取可执行文件。 它可能简单而有趣,或者可能又困难又严重。 新鲜和年轻,出现在相对较新的2009年。
  • 鲁斯特(Rust)-比2006年发布的前任同事稍大一点,但就他的兄弟们而言还很年轻。 尽管它仍然尝试解决程序员的许多低级任务,但它针对的是经验丰富的开发人员。
  • Java是一位商业开发经验丰富的人,它于1995年出现,是目前企业应用程序开发中最常用的语言之一。 凭借其基本概念和对运行时环境的大量调整,对于初学者而言,它可能变得相当复杂。
  • ASP.net是Microsoft发布的应用程序开发平台。 为了编写该功能,主要使用的语言是C#(发音为C Sharp),该语言于2000年出现。 它的复杂性可与Java和Rust之间的水平相提并论。
  • PHP-目前最初用于HTML预处理,尽管它在语言市场上保持绝对领导地位,但使用率却有下降的趋势。 它具有较低的入门门槛,易于编写代码,但同时,在开发足够大的应用程序时,该语言的功能可能还不够。

好吧,我们应用程序的最后一部分-对用户来说最有形的- 前端 (frontend)-是您应用程序的外观 ,用户可以通过这一部分直接进行交互。

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

  • ReactJS不是框架,而是库。 实际上,该框架与骄傲的标题的区别仅在于缺少一些“开箱即用”的功能,并且不需要手动安装它们。 因此,该库的“准备”有多种变体,形成了一种框架。 对于初学者而言,由于一些基本原理以及组装环境的要求很高,安装起来可能会很复杂。 但是,为了快速入门,可以使用“ create-react-app”包。
  • VueJS是用于构建自定义接口的框架。 从这个三位一体中,他理所当然地获得了最人性化的框架的称号,因为在Vue中进行开发,入门门槛低于其他引用的兄弟。 此外,他是其中最小的。
  • Angular-被认为是给定框架中最复杂的框架,唯一一个需要TypeScript (Java语言的附加组件)。 通常用于构建大型企业应用程序。

综上所述,我们可以得出结论,现在应用程序的部署与该过程的进行方式根本不同。 但是,没有人愿意以老式的方式进行“部署”。 但是值得一开始就节省一点时间吗?选择此方法的开发人员必须踩很多步? 我相信答案是否定的。 花了一些时间熟悉这些工具(并且您不需要更多,因为您需要了解当前项目中是否需要它们),因此可以通过显着减少(例如,取决于环境和夜间解析仅在生产服务器上显示,这导致服务器崩溃以及其无法启动的原因,等等。

Source: https://habr.com/ru/post/zh-CN446642/


All Articles