Node.js 后端全程實(shí)戰(zhàn)
本書(shū)是《JavaScript 全棧開(kāi)發(fā)》在后端開(kāi)發(fā)方面的續(xù)作。后端開(kāi)發(fā)(也稱服務(wù)端開(kāi)發(fā))指的是創(chuàng)建Web 應(yīng)用在服務(wù)端的實(shí)現(xiàn),并對(duì)它進(jìn)行部署與維護(hù)的過(guò)程。要想成為一名全棧工程師,后端開(kāi)發(fā)的技術(shù)棧是必須要全面了解并掌握的。本書(shū)將以基于 Node.js 運(yùn)行平臺(tái)的 Express.js 框架為工具為讀者介紹開(kāi)發(fā)并維護(hù)一個(gè)服務(wù)端應(yīng)用所涉及的全部技術(shù)棧。
本書(shū)主體由兩部分組成:第一部分以開(kāi)發(fā)一個(gè)“線上簡(jiǎn)歷”應(yīng)用的服務(wù)端業(yè)務(wù)為演示項(xiàng)目,循序漸進(jìn)地介紹使用 Express.js 框架開(kāi)發(fā)服務(wù)端應(yīng)用的具體實(shí)踐過(guò)程;第二部分以“線上簡(jiǎn)歷”應(yīng)用的部署與維護(hù)工作為例,為讀者介紹如何使用Docker、K8s 等運(yùn)維工具來(lái)進(jìn)行服務(wù)端應(yīng)用的維護(hù)工作。
本書(shū)提供了一個(gè)可讀性高、可被驗(yàn)證的示例項(xiàng)目(包含完整源代碼),以幫助讀者理解書(shū)中所介紹的技術(shù)的概念、開(kāi)發(fā)框架以及 Web 應(yīng)用的維護(hù)工具。本書(shū)適合已經(jīng)對(duì) JavaScript、HTML 和 CSS 等基本前端技術(shù),以及 Node.js 運(yùn)行平臺(tái)有所了解,并對(duì) Web 全棧開(kāi)發(fā)及其設(shè)計(jì)理念感興趣的讀者閱讀、使用。
1.內(nèi)容豐富實(shí)用。以Express.js 框架及其相關(guān)工具為例介紹Node.js應(yīng)用程序在服務(wù)端的開(kāi)發(fā)與維護(hù),從快速后端開(kāi)發(fā)到云原生環(huán)境的部署運(yùn)維。
2.作者經(jīng)驗(yàn)豐富。作者凌杰精通JavaScript、Python、C、C++等多門(mén)編程語(yǔ)言,深耕全棧領(lǐng)域多年,擁有豐富的開(kāi)發(fā)及測(cè)試經(jīng)驗(yàn)。
3.有效提升能力。提供高質(zhì)量的示例項(xiàng)目及完整源代碼,幫助讀者進(jìn)一步理解技術(shù)概念、開(kāi)發(fā)框架及維護(hù)工具。
凌杰(網(wǎng)名:owlman),浙江大學(xué)遠(yuǎn)程教育學(xué)院“榮譽(yù)學(xué)員”。自由開(kāi)發(fā)人員、技術(shù)寫(xiě)作者兼詳者、精通JavaScript、Python、C、C++等多門(mén)編程語(yǔ)言,擁有豐富的開(kāi)發(fā)及測(cè)試經(jīng)驗(yàn)。曾擔(dān)任上海交通大學(xué)飲水思源BBS 的電腦技術(shù)區(qū)區(qū)長(zhǎng)。近年來(lái)譯有《Python算法教程》《JavaScript 面向?qū)ο缶幊讨改稀贰对啬J健返茸髌贰?
第 一部分 服務(wù)端項(xiàng)目的開(kāi)發(fā)
第 1 章 服務(wù)端開(kāi)發(fā)環(huán)境 3
1.1 安裝操作系統(tǒng) 3
1.1.1 服務(wù)器操作系統(tǒng)概況 4
1.1.2 為什么選擇類Linux 系統(tǒng)? 4
1.1.3 安裝并配置 Linux發(fā)行版 6
1.2 安裝開(kāi)發(fā)工具 9
1.2.1 Node.js 運(yùn)行平臺(tái) 9
1.2.2 項(xiàng)目開(kāi)發(fā)環(huán)境 10
1.3 安裝數(shù)據(jù)庫(kù) 13
1.3.1 MySQL 數(shù)據(jù)庫(kù) 13
1.3.2 MongoDB 數(shù)據(jù)庫(kù) 16
1.3.3 關(guān)于數(shù)據(jù)庫(kù)的容器化 19
第 2 章 服務(wù)端開(kāi)發(fā)方案 20
2.1 Express.js 框架簡(jiǎn)介 20
2.1.1 小巧而富有彈性 21
2.1.2 使用中間件可擴(kuò)展機(jī)制 22
2.2 創(chuàng)建應(yīng)用程序 23
2.2.1 動(dòng)態(tài)頁(yè)面 23
2.2.2 HTTP API 服務(wù) 27
2.3 項(xiàng)目實(shí)踐 33
2.3.1 創(chuàng)建項(xiàng)目 33
2.3.2 項(xiàng)目分析 35
2.3.3 添加 API 37
第 3 章 數(shù)據(jù)庫(kù)接口設(shè)計(jì) 41
3.1 數(shù)據(jù)庫(kù)概述 41
3.1.1 數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu) 41
3.1.2 數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì) 43
3.2 關(guān)系數(shù)據(jù)庫(kù) 44
3.2.1 在數(shù)據(jù)之間建立關(guān)系 44
3.2.2 使用 Knex.js 框架 45
3.3 非關(guān)系數(shù)據(jù)庫(kù) 52
3.3.1 非關(guān)系數(shù)據(jù)庫(kù)的分類 53
3.3.2 使用 MongoDB
數(shù)據(jù)庫(kù) 53
3.4 項(xiàng)目實(shí)踐 60
第 4 章 服務(wù)端接口實(shí)現(xiàn) 67
4.1 服務(wù)端的實(shí)現(xiàn)步驟 67
4.1.1 創(chuàng)建 HTTP 服務(wù)器 68
4.1.2 創(chuàng)建路由器中間件 76
4.1.3 解析客戶端請(qǐng)求 78
4.1.4 響應(yīng)客戶端請(qǐng)求 82
4.2 部署 Web 客戶端 86
4.2.1 獲得 Web 源代碼 87
4.2.2 配置靜態(tài)資源服務(wù) 88
4.3 項(xiàng)目實(shí)踐 89
第二部分 服務(wù)端項(xiàng)目的運(yùn)維
第 5 章 非容器化部署應(yīng)用 99
5.1 運(yùn)維工作簡(jiǎn)介 99
5.2 部署工作流程 101
5.2.1 選擇服務(wù)器設(shè)備 101
5.2.2 配置服務(wù)器環(huán)境 103
5.2.3 使用進(jìn)程管理器 108
5.2.4 反向代理服務(wù)器 109
5.2.5 關(guān)于之后的任務(wù) 112
5.3 項(xiàng)目實(shí)踐 112
5.3.1 部署數(shù)據(jù)庫(kù) 112
5.3.2 添加反向代理 113
5.3.3 發(fā)現(xiàn)問(wèn)題 116
第 6 章 應(yīng)用程序的容器化 117
6.1 軟件生產(chǎn)理念回顧 117
6.1.1 流水線式生產(chǎn) 117
6.1.2 敏捷軟件開(kāi)發(fā) 118
6.1.3 DevOps 工作理念 119
6.2 配置容器化工具 120
6.2.1 Docker 簡(jiǎn)介 120
6.2.2 安裝 Docker 121
6.2.3 配置工作 124
6.3 Docker 基本使用 125
6.3.1 理解鏡像 125
6.3.2 鏡像管理 126
6.3.3 容器管理 131
6.3.4 其他操作 133
6.4 項(xiàng)目實(shí)踐 134
6.4.1 基本工作流程 134
6.4.2 容器化指令簡(jiǎn)介 136
第 7 章 自動(dòng)化部署與維護(hù)(上) 139
7.1 使用微服務(wù)架構(gòu) 139
7.1.1 微服務(wù)架構(gòu)簡(jiǎn)介 140
7.1.2 容器化實(shí)現(xiàn)方式 141
7.2 Docker Compose 簡(jiǎn)介 144
7.2.1 安裝 Docker Compose 144
7.2.2 基本操作流程演示 145
7.2.3 編寫(xiě)容器編排文件 146
7.3 項(xiàng)目實(shí)踐 151
7.3.1 自動(dòng)化部署 151
7.3.2 容器化維護(hù) 153
7.3.3 自動(dòng)化清理 155
第 8 章 自動(dòng)化部署與維護(hù)(下) 157
8.1 Kubernetes 簡(jiǎn)介 157
8.1.1 核心組成結(jié)構(gòu) 158
8.1.2 軟件架構(gòu)設(shè)計(jì) 160
8.2 構(gòu)建 K8s 服務(wù)器集群 161
8.2.1 安裝與配置 Docker+K8s 環(huán)境 162
8.2.2 設(shè)置主控節(jié)點(diǎn)與工作節(jié)點(diǎn) 163
8.2.3 使用 kubectl 遠(yuǎn)程操作集群 166
8.3 項(xiàng)目實(shí)踐 167
8.3.1 部署應(yīng)用的基本步驟 167
8.3.2 編寫(xiě)資源定義文件 172
8.3.3 使用 kubectl 173
附錄 A Git 簡(jiǎn)易教程 176
A.1 版本控制系統(tǒng)簡(jiǎn)介 176
A.1.1 版本控制術(shù)語(yǔ) 176
A.1.2 版本控制方式 177
A.2 Git 版本控制系統(tǒng) 177
A.2.1 Git 的特性 178
A.2.2 安裝與配置 178
A.3 單人項(xiàng)目管理 181
A.3.1 項(xiàng)目設(shè)置 181
A.3.2 文件管理 182
A.3.3 版本管理 187
A.3.4 分支管理 190
A.3.5 標(biāo)簽管理 193
A.4 團(tuán)隊(duì)項(xiàng)目協(xié)作 195
A.4.1 配置 SSH 客戶端 195
A.4.2 管理遠(yuǎn)程倉(cāng)庫(kù) 196
A.4.3 同步項(xiàng)目數(shù)據(jù) 199
附錄 B 使用 Vagrant 搭建 K8s服務(wù)器集群 203
B.1 Vagrant 的基本使用 203
B.1.1 項(xiàng)目的組成架構(gòu) 204
B.1.2 編寫(xiě)項(xiàng)目配置文件 204
B.1.3 Vagrant CLI 的常用命令 210
B.2 項(xiàng)目示例:搭建 K8s
服務(wù)器集群 212
B.2.1 準(zhǔn)備工作 212
B.2.2 搭建集群 215