全棧最後一千米 - Node.js 項目的線上服務器部署與發佈

圖片描述

本文技術軟文,閱讀需謹慎,長約 7000 字,通讀需 5 分鐘css

你們好,我是 Scott,本文經過提供給你們學習的方法,以及我我的錄製的一系列視頻,幫助你更快更好的學習 Nodejs,瞭解先後端的 HTTP 知識,以及配置和使用阿里雲 ECS 來部署你的 Nodejs 項目,成爲那個具備爭議的全棧開發工程師。html

沒有耐心閱讀的同窗,能夠直接前往學習 全棧最後一千米前端

先回答下被不少新入行同窗常常問的問題,我從業 7 年,前 4 年在阿里巴巴作前端開發工程師,開發全網的通用創意模板,最近 3 年在創業公司擔任技術負責人,也就是聽上去高大上的 CTO,我職業的前 6 年月工資不到 1 萬 5,最近一年才調薪過 2 萬,我選擇了一條荊棘的跨專業自學入行之路,以後又創業,彎路多多踩坑無數,但願從個人親身經歷中,你們能夠對本身有更準確的定位和投資,掌握更好的技術/職業上升的方法,自此我走過的彎路再也不是束縛你的套路。git

要不要學習 Nodejs

若是你是前端開發工程師,你本地電腦上不可避免的要安裝 Nodejs,做爲工具也好,做爲服務器也好,要幫助你作掉不少又髒又累的事情,好比 LESS/Scss 的編譯,ES6/7 到 ES5 的轉換,Javascript 代碼的壓縮合並,切頁面調試樣式的熱更新,不管是經過社區迅速更新換代的 Grunt/Gulp/Webpack,仍是經過本身集成或者定製到本地的其餘模塊,Nodejs 的這個運行環境都是你得力的助手。github

若是你是後端開發工程師,好比以前是開發 PHP,Java,最近轉行作 Nodejs 或者想要增長一個語言技能纔來學習 Nodejs,你也不可避免的要去了解 ES5/6/7 或者說 Javascipt 的整個語法概念,去翻閱 Nodejs 的各個 API,最後藉助 Nodejs 社區的一些流行框架,好比 Express/Koa,甚至是阿里開源的 Egg,用你既有的後端開發經驗,對於 Web 服務層交互的知識,再套上這些框架的 API,來玩票性質的搭建一些子項目運行一些產品業務。數據庫

若是你是運營或者產品經理,可是你已具有一些基本的開發技能,好比 HTML/CSS/Javascript,甚至是對 Linux 主機的系統使用,域名解析也有一些經驗,你可能也更願意在不去學習另一種全新的語言下,來藉助 Nodejs 搭建你的 Web 服務,幫你的小點子小創意快速上線測試,獲取一些用戶的反饋或者價值驗證,事實上我認識的很多產品經理對 Express/React/Vue 這些很喜歡,能高效的幫他們實現一些產品原型的測試。express

以上舉例,實際上是爲了說明影響你漲薪,也影響你職業發展的其中一個因素,即是某項技能的深度,或者是某些技能的廣度,這些技能包含但不限於前端後端或者產品,不要給本身設限,從事某個工種不表明你只能夠鑽研這個工種,就拿前端舉例,既然本地有了 Nodejs 的運行環境,那麼適度的往下擴展技能樹是順水推舟的事情,而對 Nodejs 很感興趣的不管任何職業的人來講,何時學習它都不晚,由於整個互聯網通過幾十年的發展目前的現狀就是, Javascript 成爲了 Web 層最容易入門使用且最被工業標準和廠商推廣的語言,掌握了這個語言,就掌握了 Nodejs 的 1/3,剩下的 2/3 分別是 HTTP 知識和 Nodejs 自己的運行機制和系統能力。編程

我在 2016 年被杭州芋頭哥邀請去大搜車作了個小分享,當時現場氛圍特別好,整個杭州甚至蘇州的許多作 Nodejs 的同窗,其中超過 2/3 都是前端工程師,都跑來一塊兒嗨皮,我以後又模擬錄製了一遍,對於 Nodejs 不熟悉的同窗依然有參考意義,你們能夠聽一下:小程序

Nodejs 與 Javascript 先學哪一個

掌握 Javascript 和掌握 Nodejs 並不衝突也並無絕對的前後順序,由於每每咱們開始使用 Nodejs,是從 Web 的層面,而這個層面,咱們有不少簡易入手的框架使用,好比 Express,即使不瞭解它的原理,照着 API 和 Best Practice 來模仿,適當翻翻文檔來均可以幫助你編寫一個簡單的網站程序,再基於這種迅速可見可得的體驗進一步激發咱們學習的興趣,花更多的時間去從多維度反覆敲打本身對於 Nodejs 的知識結構,這樣一天兩天慢慢就理解它的知識點了,經過實際的手寫代碼,運行服務器,看預覽效果,再去查文檔,寫更復雜的代碼,有些關鍵字不懂再去查查,這樣其實就是一個不斷反覆不斷倒帶學習的過程,說是學習,其實並無刻意的去啃 Javascript 或者 Nodejs 的語法和 API,而是天然的從工具使用走向理論構建的過程。

上面這段是面向很是初級的 Nodejs 學習者,若是已經有了其餘語言的編程能力,那麼入門 Javascript 也不會有太大障礙,能夠先去了解 Javascript 這門語言的特色,再去嘗試使用 Nodejs,在我看來,只要你對於 Javascript 和 Nodejs 是陌生的,那麼學習這兩個就是交替並行來回穿梭的過程,在去熟悉 Nodejs 的過程當中,也就逐步的瞭解到了 Javascript 的語法規則,在研究 Javascript 的過程當中,也就更容易領會 Nodejs 暴露出來的框架封裝出來的方法函數變量他們的使用姿式和運行特色。

先看書看文檔仍是先找項目練手

對於學習習慣不一樣記憶能力不一樣的人來講,看文檔和作項目哪一個更優先,應該不會有標準答案,並且這兩個在中期之後每每是交叉的,我我的的學習習慣通常是,先作項目,若是項目太難,我就把項目中難的功能都去掉,梳理出一個最簡版本,以寫代碼爲爲主,以看文檔做爲補充,好比白天或者核心時間寫代碼,午間或者公交車上這些零碎時間翻文檔,能夠有目的的看,也能夠隨便挑幾個感興趣的看,這樣作的缺點是,在項目一開始啓動的時候,會由於不熟悉文檔,走一些彎路並且比較耗腦力,它的優勢是,一開始就寫代碼有做品雛形出來,容易激發我征服它的鬥志,更有慾望把它作出來,因此這樣開始的方式,每每我都不會中途放棄,而看文檔的方式,我會以爲枯燥,或者不知所云,可能看看就困了放棄了,這種不太適合我,可是它的優勢也很明顯,若是充分的看了文檔,基於原做者或者原始團隊的角度理解技術點,更容易一開始就走在正確的道路上,不管是名詞仍是原理或者 API,心中會頗有方寸,作項目的時候也容易推測出來出問題的環節去哪裏找答案。

對於新人來講,先把項目作起來會比較實用,走彎路和踩的坑必然會多一些,可是這樣更容易產生興趣把硬骨頭啃下來,也會提升解決問題的即時反應能力,所謂臨陣不懼,運籌有度。

哪裏找練手項目

練手項目從觀看類型上分兩種,一種是純文字形式的,好比連載的博客,一種是視頻,或者是直播或者是錄播的視頻,連載的博客好處是都造成了文字,而且有代碼示例,看的時候能夠用腦力集中消化某一個技術點,容易看懂,這同時也是它的一個缺點,由於博客中不一樣的技術點都用大腦消化後,就會產生一種已經理解了它的直覺,這種直覺會促使你快速的通讀全完直到最後,全部的編程環節卻沒有動手實施,致使過了三五天後再來回想這些文字和當初所理解的概念,腦海中就會印象模糊甚至一片空白,用行話說就是沒有把消化後的知識持久化。

直播的視頻對我的的時間要求比較嚴格,同時直播中不能暫停甚至不能提問,會致使本身被動的 Push 往前走,容易遺留下一些關鍵的問題點沒有及時消化,不過如今有的直播平臺會自動存儲有備份,因此也能夠重播。

我我的傾向於看錄播的視頻,能夠暫停,能夠快進,能夠重播,跟着屏幕敲代碼大概是目前最好的一種跟隨實戰的方式了,錄播的視頻這方面有不少的學習平臺,我本身平時是泡在慕課網,雖然我也是講師,可是我也常常聽別的講師講的課程,收穫仍是挺大的。

若是你對 Nodejs 已經有必定的掌握了,那麼其實能夠跳開一些簡單的博客啊視頻啊,直接上 Github 上搜一些別人開源的 Github 項目,Clone 到本地,跑起來,再去讀他們的源碼,這是最直接也最有效的學習方式了,可是這個對於初學者每每比較難,由於閱讀源代碼的前提是要有必定的編程量,上來就一通讀不只會增長理解項目的難度,更會所以失去閱讀代碼的興趣。

我下面會羅列一些,我本身錄製過的一些項目,或者其餘的我以爲能夠按照這個路線繼續深刻學習的項目資源。

Express 實現一個電影網站

在我入行的那個年代,通常編程的第一個練手項目,每每是一個增刪改查的博客系統,或者是一個聊天室,這方面資源不少,可是我我的以爲起點略低並且提不起興趣,因而就錄製了一個開發電影網站的免費視頻課程,課程地址以下:

這兩個課程,是採用 Nodejs+MongoDB 外加一些必要的中間件,好比 Mongoose 建模,body 解析,Jade 模板等等,有前端的頁面也有後端的頁面,有註冊登陸也有密碼的加鹽設計,後端這裏也有管理員的角色,請求豆瓣數據寫入數據庫包括評論的數據結構和評論流程的實現,算是一個五臟俱全的小小麻雀。

課程中用到的 Express 框架,須要理解 req 和 res 兩個跟業務密切相關的知識點,一個是數據流進,一個是數據流出,而後就是 Express 的中間件機制基本是基於回調或者是基於事件的,這些都是在跟着把代碼所有實現後就能理解的東西,一開始不用太糾結細節,先關注流程就行,同時由於數據存儲用到了 MongoDB,項目中也使用了 Mongoose 來配置和連接數據庫,來設計每個數據模型的 Schema,能夠理解爲表的概念,另外因爲課程錄製的比較早,你們要特別留意版本,在 2 期課程中有一個補錄的升級課程,能夠在一期的學習中,跳過去看升級再回過頭看。

或者若是不喜歡 Scott 早期課程的聲音或者講解的方式,也能夠直接看下面的這個課程,裏面有許多小例子,跟着敲代碼不累。

Nodejs 的基礎概念和 API 講解

這個是純面向新手的課程,地址以下:

在這兩個課程中,我嘗試了新的錄製風格,但同時也致使了錄製的時候,描述過於逗比不夠嚴謹,還好不少看過的童鞋們還都表示頗有收穫,看來激起學習興趣的確是全部市面的博客也好,視頻也好都要去提高的一個點。

用 Nodejs 開發微信公衆號

在微信公衆號推出的那個風口,滿大街都在找能開發微信公衆號的工程師,並且因爲公衆號自己與微信打通的鏈路和易傳播性,H5 工程師成了各個類媒體公司和創業公司的標配,可是微信公衆號因爲它的特殊性,須要先後端協做完成,而且須要經過微信的官方服務器進行消息的分發和中轉接收,給不少公司是前端後端同窗帶去困擾,增長了協做的成本,因而具有 Nodejs 開發能力的前端工程師在市面上備受歡迎,由於 Java/PHP 這種傳統後端能夠賦予公衆號純數據的接口調用權限,而多變的業務邏輯則能夠由前端本身經過 Nodejs 來自由控制,同時微信公衆號裏面的消息和跳轉的頁面本身都能徹底控制,因而 Nodejs 微信開發工程師每每經過一兩我的的配合,就能極高效率的完成公司在微信端的的業務實現,涉及到複雜數據或者大致積數據存儲的部分,仍然能夠交還給 Java/PHP 工程師來負責,從公司層面,產品作的更輕更快並且人員成本上也更省錢,從我的層面,對於產品研發的流程也更有控制權,同時我的也更有競爭力更值錢。

在如今,公衆號依然是不少傳統公司走向互聯網化所優先考慮的方向,加上小程序的推出和一系列附加能力的擴展,這兩個能夠很好的協做來拉新和轉化,如今具有 Nodejs 在微信的使用層面,依然是有很大的成本優點。

因而響應慕課網的需求,推出了這個收費的視頻課程:

在這個課程裏面,把上面的電影網站,進行了大刀闊斧的升級改造,基於原來的登陸註冊後臺上傳這些功能外

  • 把原來的 Express 框架也切換到 Koa 框架

  • 利用 yield 來作異步操做的執行

  • 從零開始封裝微信中間件

  • 深刻到最底層的請求邏輯

  • 微信第三方接口調用過程

  • ES2015 新特性使用(Promise, Generator)

  • 充分理解 http 請求和實現二跳換 token 請求

  • ...

讓這個微信公衆號,自己能夠響應用戶的消息,好比上傳圖片/視頻,文字自動回覆,電影的檢索和數組消息推送,還能夠在公衆號裏面跳到電影網站的手機版本,裏面能夠調用語音 SDK 進行搜尋,能夠基於微信的 openid 進行用戶註冊和評論等等,這時候原來那個電影網站的小麻雀就變成了一隻犀利的老鷹,能對微信用戶提供更豐富的功能和體驗,而這一切的背後,僅僅是 Nodejs+MongoDB 外加 Koa 框架的支撐。

React Native App 開發

React 問世以來,特別是 React Native 問世以來,整個前端世界再一次陷入了變革狂潮,用聲音或者行動宣示要搞事要運動,因循守舊的工程師被動主動的被淘汰,因時制宜的工程師和大量的前端新人,踩在老人的屍體上大步前行,不管認可與否,互聯網世界一每天變得更豐富多彩,技術的圈子亦然,變革的速度快慢不重要,基於變革而能及時上車的勇氣很重要,不管是 Microsoft,Facebook,Google,Instagram,仍是 Alibaba, 騰訊,地球上的一線大公司的一線牛人,在過往的幾年中,開源了巨量的框架,尤爲在 Nodejs 和 React Native 方面,也都有了許多實踐和改造,給許多的中小公司帶去更多的信心,有了更多的選擇。

開發 App 就是這樣,世界再也不是過去的非 Object-C(Swift) 即 Java,也再也不是犧牲性能追求效率的 Cordova 和 PhoneGap,而是有了介於兩者直接的 React Native,更多的養不起兩個不一樣語種工程師的小公司和創業公司,開始眷顧能適應兩個平臺,且能知足本身業務和展示需求的 React Native,而開發一個 App 並不簡單,除了肉眼可見的前臺,還有做爲純 API 接口的後臺,先後之間依然有種種的門檻,這時候 Nodejs 的輕便就又派上用場,具有 Nodejs 開發能力的 React Native 工程師,到今天爲止依然是香餑餑。

仍是順應潮流,結合慕課網推出了這個課程,同時慕課網的官方設計師負責給 App 出插圖潤色,不過這個課程是收費的:

在這個課程中,先撇開 React Native 這個純 App 端展示的部分,整個後端是用 Nodejs 開發的,框架依然是 Koa,涉及到了用戶 token 生成獲取,短信驗證碼,無後臺的 Mock 數據,以及基於 MongoDB 的 Restful API 服務,對於音頻視頻資源的轉碼和合並都是在後端完成,裏面涉及到大量的異步操做,對於一個初級和中級工程師,有很是好的實戰借鑑意義。

上面發了都是個人我的做品,下面提供下其餘的我認爲學習 Nodejs 須要投入時間研究的知識或者方向;

培養英文讀寫提問的能力

有句話怎麼說,編程三分靠資歷,7 分靠 Google,大部分你在業務場景中遇到的技術問題,在網上都有現成的答案,問題是你不知道用什麼關鍵詞去搜出來,這個仍是比較考察英文的表述能力,這些最前沿的技術,都是老外們實踐出來的,咱們的腦回路也應該在編程以外,多適應一下英文的思考方式,多逼本身閱讀英文技術文檔,隨着時間慢慢就能習慣,只要解鎖了英文的這把枷鎖,就打開了新世界的大門,不管是從檢索和閱讀角度,仍是從提問參與的角度。

關注 Github 倉庫 Wiki 和產品榜單

咱們上 Github 的時候,每每會很關注熱門的框架庫,那麼這些框架庫裏每每蘊含着更有參考價值的寶藏,那就是 Wiki,好比 Express,在它的 Wiki 裏面,除了有 Express 的升級指南,中間件列表以外,還有一個 Frameworks built with Express,什麼意思呢,就是不少團隊或者我的對 Express 不夠滿意,或者本身的場景更特殊,Express 不能知足,他們都基於 Express 這個框架基礎或者思想來構建了一個新的框架,這些新的框架,都的基於他們的需求或者他們認爲合理的方向來實現的,這些框架的源代碼包括文檔,你們在學習 Nodejs 的時候,能夠好好研究一下,能學習到更多他人在設計框架時候考慮的方向,實現的方式,好比這些:

  • Feathers -- 一個迷你的數據驅動的框架

  • Monorail.js -- 一個極輕量級的 MVC 框架

  • Locomotive -- 受 Ruby on Rails 啓發而開發的強大的 MVC 框架

  • CompoundJS -- 一樣是受 Ruby on Rails 啓發的高水平 MVC 框架

  • Calipso -- 基於 Express/Mongoose 的內容管理系統

  • Derby -- 一個實時的協做應用框架

  • Bones -- 基於 Express/Backbone 實現的 CS 應用框架

  • Matador -- Twitter 工程師開發的 MVC 框架

  • Lemmy -- 一個不可描述(爆粗口)的神祕框架

  • Mojito -- Yahoo 開發的 MVC 框架

綜合比較一下,就能找出更適合本身用的框架,等到對框架足夠熟悉的時候,就能夠去閱讀他們的 issues 甚至是源代碼,看的多了想的多了,就愈來愈上道了。

全棧的最後一千米

全棧這個詞很敏感,有人不認同有人無所謂,對我而言,它就像是一個 H5 工程師同樣,只是表述了一種印象或者概念,具體嚴謹與否不重要,由於跟人溝通,心照不宣便可沒必要強究細節。

那麼在學習 Nodejs 的過程當中,有一道門檻是不管如何也逃不過去的,那就是 服務器的選購配置,域名的解析指向,Nodejs 項目的部署等這些偏運維方向,這些讓不少新人甚至是已經工做的工程師困擾,本身去琢磨太花費時間,不去琢磨,始終沒有能力憑本身雙手,讓一個產品上線或者讓本身的一個想法實現到互聯網上,不管是成爲獨立站長,仍是隻是讓朋友同窗訪問,因而我把這些總結了一下,以以上幾個項目爲例,大概分爲以下幾個步驟:

  • 部署方案規劃

  • 待部署項目分析

  • 選購及備案域名

  • 廠商對比與選配阿里雲服務器

  • 初步 SSH 無密碼登陸鏈接和配置

  • 搭建 Nodejs/MongoDB/Nginx 環境

  • 配置 IPTables/Fail2Ban 防火牆及主動防護

  • 域名 DNS 轉移及 A 記錄/CNAME 解析配置

  • MongoDB 角色配置與安全規則設置

  • 線上 MongoDB 單表單庫導入導出與跨機遷移備份上傳

  • PM2 發佈環境配置

  • 服務器與 Git 倉庫讀寫配置

  • PM2 一鍵部署線上 Nodejs 項目

  • 電影網站/ReactNative App 後臺/微信公衆號/微信小程序後臺等項目實戰部署

  • SSL 證書申請及 Nginx 證書集成提供 HTTPS 協議

  • 上線方案覆盤總結

這個新課程 全棧最後一千米 - Node.js項目的線上服務器部署與發佈 已經在 4 月 10 日上線,感興趣的同窗們能夠關注一下。

編程路漫漫,與你們共勉!

相關文章
相關標籤/搜索