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