Day29-结合全部所学-後端实作篇

前言

不知不觉就到系列文的最终篇同时也是实作的最後一篇了,今天要把後端一起介绍完,由於後端会牵扯到资料库的存取所以这边笔者也会稍微介绍一下後端程序码的架构,接下来就正式进入实作最後一篇的介绍吧!

由於笔者本身是前端工程师出身,所以对於 JavaScript 算是比较熟悉,因此这边的後端语言就以 Node.js 为主,如果是想要看到其他後端语言的读者可能就要说一声抱歉了,笔者会在努力学习更多後端语言的XD

後端资料库介绍

首先是资料库的部分,相信读者不管是在课业上还是事业上通常都是接触关联式资料库,像是 MySQLPostgreSQL 这种基於 SQL 语法而产生的资料库,相较之下非关联式资料库就比较少接触了,为了让自己可以多学到更多东西所以这次笔者选择的就是在非关联式资料库中相当有名的 MongoDB

这边笔者推荐读者如果懒得自己架一个资料库的话(就像我一样XD),可以使用 mlab 所提供的免费 500MB 体验 MongoDB 的服务,不但可以利用 web 介面轻松操作资料库外,还可以即时监测流量非常方便,建立好後你会得到一串 DB_URL 像是这样:mongodb+srv://<dbuser>:<dbpassword>@cluster0.ak6ms.mongodb.net/dbName?retryWrites=true&w=majority,这串 URL 就是用来连线资料库的网址非常重要,笔者建议可以利用 .env 档来保管这串 URL 不要随便推到 GitHub repo 上以免资料库被攻击。

後端程序码介绍

设定好後接下来就是处理资料库连线的部分啦,首先我们要安装 mongodb 这个 package,之後就要撰写一个 function 来做连线。

由於笔者这边只是单纯的 DEMO 用就把资料库以及 collection 的部分写死,倘若之後读者真的要开发这段还是建议根据 api endpoint 来决定要连线哪个资料库会比较好。

有了资料库跟 collection 下一步就可以开始做 CRUD 了。

可以发现 MongoDB 的写法真的跟 SQL 完全不一样,不用下一堆有的没的 SELECT xxx FROM xxx WHERE xxx 这种语法,只要简单用几个 MongoDB 原生提供的 method 操作即可,是不是相当好上手呢XD

最後就是设计 api endpoint 了,相信只要是有使用过 Node.js 的读者都知道有一个非常好用的 web 框架 叫 express,这边笔者也是使用这个框架,不得不说 express 进步真的飞快,想当年笔者要处理 JSON format 的 body 还要使用 bodyParser 这个 package,如今 express 已经完全支援这块了非常方便,最终写法就会像这样。

後端 K8s 设定档

由於 express 本身就是一个 web server 了,所以後端就不用像前端那样要特别写一个 Nginx 的设定档使用,直接利用 Node 把整个 server 运行起来即可,但笔者也会利用後端的时间介绍一下前面带过的 Ingress Controller 在这边可以如何一起使用的方法。

首先是 Deployment 的设定,基本上设定档跟前端的差不多,这边为了做个区隔所以笔者刻意多加了 health check 的写法进去,毕竟 server 不能随便挂掉不然会尴尬XD

建立好 Deployment 後就可以建立 service 了,这里笔者也为了确保安全性,所以没有使用 NodePort 而是用预设的 ClusterIP。

之後就可以建立 Ingress 了,可以发现笔者在 Ingress 这边设定了很多 Annotations,这些 Annotations 的设定最後会被 Ingress Controller 中的 Nginx 使用,所以如果想让後端也可以有 Nginx 的设定档可以像笔者这样设定喔!至於更多的 Annotations 的设定档可以参考这个网站

建立後端环境

首先一样要先在本地端建立起後端的 Docker image。

前置作业做好了後就可以建立 Deployment,让 Pod 可以利用刚刚建立好的 Docker image 建立起 container 并且跑起来。

建立好 Deployment 就可以建立 Service 来进行连接。

最後就是建立 Ingress 作为一个统一对外的窗口。

DEMO time

等到後端的环境也建立起来後就可以尝试进行一些 api 操作了!下面分别演示了 GET 以及 POST 两种不同的效果给读者看~

首先是 GET

再来是 POST

最後详细的後端架构可以参考这里,笔者都有把程序码摆在 GitHub 上,有兴趣的读者不妨可以抓下来自己亲自跑跑看会更有感觉喔!

小结

终於把前後端的实作都介绍完了,相信这个比起自己亲手写程序来的更有成就感,而且藉由整个系统架构可以更了解网页的世界是如何一点一滴的被建立起来,也能明白 SRE 这个职位真的不是那麽好当XD

最後也来到系列文的尾声了,希望这几天的文章都不会让读者们觉得过於难懂,明天就要准备做最後的总结了,如果对於文章有任何问题都欢迎留言给我,那我们就最後一篇文章见喽~


<<:  【Day 30】实作 - 如何在 AWS Quicksight 设定告警以及结语

>>:  Day-30: 设计转工程师这趟旅程,一些感言

Python - 根据输入的英文字母排列出有意义的单词-参考笔记

Python - 根据输入的英文字母排列出有意义的单词-参考笔记 参考资料 Day26- pytho...

活到老,学到老,Ruby 30 天刷题修行篇第三话

哈罗,我是 A Fei,今天是铁人赛开赛第三天,大家连假有去哪里走走吗?在这边叮咛大家,还是要多注意...

[Day28] HTB Optimum

URL : https://app.hackthebox.eu/machines/6 IP : 1...

TypeScript 能手养成之旅 Day 2 环境安装

前言 每当要学习一个新的语言时,都有一个 SOP 开始流程,就是 安装环境 => 运行程序码 ...

IT 铁人赛 k8s 入门30天 -- day6 主要 Kubectl 指令 - K8s CLI

前言 今天将要介绍 kubectl 一些常用的指令 这些指令会在後面实作的部份使用到 前置状态 mi...