我的项目服务器发布流程

作为一名前端开发者,我深知我们的工作重心通常在于构建精美的用户界面和流畅的交互逻辑。然而,在项目开发的完整链路中,服务器端的部署环节同样关键且充满挑战。在此,我想分享一下我在服务器项目发布过程中的探索与心得。 deploy.png

一、云厂商容器服务与镜像构建

在项目发布流程启动时,我借助Git进行版本管理与操作。当准备发布一个新的版本时,我会在Git中创建Release并打上特定的Tag,随后执行 git push tag。这一操作就像是给云厂商容器服务发送了一个信号,触发其开始构建容器镜像。云厂商容器服务在接收到来自Git的Webhook通知后,便着手进行镜像构建工作。它会依据项目代码以及相关依赖,将其整合并打包成一个独立的容器镜像。这一过程犹如精心雕琢一件艺术品,把项目的运行所需的各种元素巧妙地融合在一起。

以阿里云为例:

asse.png

二、为何不在本地构建镜像上传

也许有人会问,为什么不在本地构建好镜像然后上传到服务器呢?其实这里面是有原因的。构建好的镜像往往体积较大,如果从本地传输到服务器,会占用大量的网络资源和时间,尤其是在网络带宽有限的情况下,这一传输过程可能会非常漫长,甚至可能因为网络中断等问题导致传输失败。而采用云厂商的容器构建服务就可以有效避免这些问题。云厂商的容器构建服务在其内部网络环境中构建镜像,当服务器需要拉取镜像时,是在内网进行操作,这样不仅速度极快,而且稳定性高,大大节省了项目发布的时间,提高了整体效率。

三、私有镜像的构建与应用

由于国内网络环境对Docker官方镜像存在限制,且考虑到项目的安全性与独特性,我选择构建私有镜像并存储于自己的镜像仓库中。构建私有镜像并非一帆风顺,需要深入了解基础镜像的选择与定制、依赖项的管理以及镜像的优化等多方面知识。我花费了大量时间研究如何从最小化的基础镜像开始,逐步添加项目所需的软件包、配置文件等,以确保镜像既满足项目运行需求,又保持较小的体积和较高的安全性。当云厂商容器服务构建镜像时,它会优先从我的私有镜像仓库中获取基础镜像,这样就有效避免了因网络限制或官方镜像不稳定而导致的构建失败问题。这一策略就像是为项目搭建了一座坚固且专属的桥梁,保障了镜像构建环节的顺利进行。

四、拉取镜像与项目准备

在镜像构建完成后,基于Webhook传递的信息,拉取镜像的操作随即展开。这一步骤至关重要,它确保了项目部署环境能够获取到准确且最新的镜像,为项目的后续运行奠定了坚实基础。就如同为即将启航的船只准备好了合适的船帆,使其能够在在服务器的海洋中顺利航行。

五、CICD - servie:Node实现

在整个项目发布流程中,CICD - servie扮演着极为重要的角色。它负责运行新拉取的镜像,并在启动新容器之前停止旧的容器。利用Node的特性,它能够快速且稳定地完成这些操作,实现项目的无缝更新与升级,就像为一辆高速行驶的汽车更换引擎,在不影响整体运行的前提下提升性能。而且,在完成这些操作后,CICD - servie会贴心地通过电子邮件通知我,让我及时了解项目的发布状态,确保整个过程的透明度与可控性。

六、为何不选Jenkins等传统工具

或许有人会疑惑,为何不采用Jenkins等成熟的自动化构建工具呢?其实,这主要是由于我的服务器资源较为有限。Jenkins虽然功能强大且广泛应用,但它对服务器的配置要求相对较高,包括内存、CPU等资源的占用都较大。在我的服务器环境下,如果部署Jenkins,可能会导致资源紧张,进而影响项目发布流程的效率与稳定性。而我自行构建的这套基于容器镜像的项目发布流程,能够在充分利用现有服务器资源的基础上,实现高效且稳定的项目发布。它就像是为我的服务器环境量身定制的一套西装,既合身又能展现出 的最佳效果。

七、六年实践,成果斐然

值得欣慰的是,这套流程在我的服务器上已经稳定运行了五六年之久。这期间,经历了无数次项目的迭代与更新,它始终如一地保障着项目的顺利发布。每一次成功的部署,都是对我当初探索与努力的肯定。在这五六年里,我也从一个对服务器部署懵懂无知的前端开发者,成长为能够熟练驾驭整个项目发布流程的多面手。我深刻地体会到,技术的探索之路虽然充满艰辛,但只要坚持不懈,就一定能够收获满满的自信与成就感。我希望我的这些经验与感悟能够为其他前端开发者在项目发布环节提供有益的参考与借鉴,让大家在技术探索的道路上更加自信与从容。