建立和發布 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 被認為是這些框架中最複雜的一個,也是唯一需要 TypeScript (Javascript 語言的附加元件)。 通常用於建立大型企業應用程式。

總結上面所寫的內容,我們可以得出結論,現在部署應用程式與先前的過程完全不同。 但是,沒有人會阻止您以老式方式進行「部署」。 但是,一開始節省的一點時間值得選擇這條道路的開發人員不得不犯的大量錯誤嗎? 我相信答案是否定的。 花更多的時間熟悉這些工具(而且您不需要更多的時間,因為您需要了解當前專案中是否需要它們),您可以發揮作用,顯著減少,例如、取決於環境且僅出現在生產伺服器上的幽靈錯誤案例、每晚分析伺服器崩潰的原因以及無法啟動的原因等等。

來源: www.habr.com

添加評論