MLH生产工程实习经验分享:从手动部署到Docker容器化

本文分享了作者在MLH Fellowship生产工程实习项目中的学习经验,涵盖了从手动部署Flask应用到使用Bash脚本、Systemd服务管理,再到Docker容器化的完整技术实践过程。

背景

作为一名对全栈开发只有基础理解的大学生,我一直依赖Vercel或Netlify等托管平台来部署项目。虽然我一直对CI/CD的工作原理感到好奇,但学习的机会从未真正出现。至少直到最近才出现。7周前,我开始了今年夏季MLH生产工程实习项目的旅程,从那以后我学到了很多。

特别感谢DigitalOcean和MLH提供的VPS!

手动部署

这是我第一次在自己的服务器上部署Web应用程序!MLH为项目中的所有参与者提供了VPS,用于部署我们在项目第一周构建的Web应用程序(使用Flask构建)。

为此我需要完成以下任务:

  • 通过tmux运行并分离Web服务器
  • 在duckdns注册VPS IP

但是以这种方式部署我们的网站存在一些明显的问题。如果Flask应用崩溃,没有备用机制来重启服务。如果VPS重启,也无法自动让服务重新运行。

显然Systemd是红帽公司的产品

Bash脚本和Systemd

为了解决这个问题,我学习了使用bash脚本和systemd来自动化网站部署。虽然我觉得bash语法非常令人讨厌,但它使得在更改/中断后重新部署网站变得极其容易。学习如何编写和部署systemd单元文件使我能够将网站部署直接集成到systemd中,从而实现在服务器重启时自动重新部署。

真的很喜欢鲸鱼图标

Docker化一切

但是直接在裸机上运行东西并不是超级可扩展或可复现的。所以下一个逻辑步骤当然是学习和使用Docker。大约在这个时候,网站添加了数据库,并添加了NGINX作为反向代理。将这些服务Docker化使得每个程序能够在隔离环境中工作,便于查看日志和创建可复现的环境。NGINX也特别令人着迷,可以轻松实现API速率限制(这是我以前从未成功实现过的功能)。

最终思考

到目前为止,我在MLH Fellowship项目中的时光非常棒,学习了驱动我们周围基础设施的很酷的开源技术。这真的改变了我对应用程序部署的思考方式,我肯定会将到目前为止学到的知识应用到未来的项目中。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计