背景
作为一名对全栈开发只有基础理解的大学生,我一直依赖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项目中的时光非常棒,学习了驱动我们周围基础设施的很酷的开源技术。这真的改变了我对应用程序部署的思考方式,我肯定会将到目前为止学到的知识应用到未来的项目中。