下面写的是本人三年以来的部署经验,仅仅是个人经验之谈,如有不足欢迎指出。

直接把修改的文件覆盖线上文件

想想一开始的时候,刚学会独立开发一个网站,然后服务器跑一个tomcat,然后每次修改后都是打包成一个war,然后传上服务器覆盖,重启tomcat。

覆盖文件的发布方式

使用git来更新文件

因为后来使用php来开发,然后每次修改都会涉及一堆文件,然后那个时候由于上传的图片跟代码都在同一个目录,所以不能发布新版直接替换整个目录,但是一个一个文件的手工替换又很容易出现遗漏,而导致系统无法正常使用。

刚好这个时候学会使用git来管理代码,所以每次发布版本都是在服务器pull最新的代码,然后手动重启服务,这样子就避免了覆盖文件遗漏的问题。

git更新文件部署

进阶级使用git自动部署

上面两种阶段只能说是手工部署,完全还算不上运维。进阶版是如何出现的呢?某一段时间,由于涉及微信公众号开发,代码需要提交到服务器来测试。那么在调一个功能的时候,需要频繁更信服务器代码,及重启服务来测试,那么就浪费大量的时间来手动部署了。然后这个时候了解到我们使用的第三方git托管平台提供钩子功能,push代码之后可以发出一个http请求到指定url,那么就是说我们可以在接收到请求调用shell命令拉取代码及重启服务,git自动部署目标实现。

git自动部署应用

服务器环境问题

回想这几年,经过自己手的服务器估计都有十多台了,也不知道配置了多少次各种各样的环境。由于都是linux系统,所以一开始都是一条命令一条命令的安装各种服务器软件。到了一定程度之后就写成shell脚本,然后每次直接运行shell脚本即可。

用shell脚本服务器环境

第三方paas平台

由于每次都要配环境,觉得挺烦的。然后发现有第三方的paas平台,只需要提交代码上去,然后点击一下发布即可,节省了99%的工作量,唯一的问题是有些特殊环境不提供支持。

第三方paas平台

使用docker来运维

只需要编写好dockerfile,然后把应用打包成docker镜像。然后通过marthon实现分布式部署即可。

docker实现分布式部署

总结

也许你看上面的内容觉得不知所云,那么下面简单说明上面在说什么

  1. 一开始,采用直接覆盖文件的方式更新版本
  2. 使用git手动拉取更新代码,避免手工一个文件一个文件上传到服务器
  3. 利用git托管平台的钩子来自动更新服务器代码
  4. 配置服务器环境太麻烦了,直接使用第三方pass平台
  5. 第三方paas平台有太多限制,所以基于docker自己实现一套paas平台

来自作者的一句话:尽量让运维自动化,手工运维风险极高!

如有问题可以在我的公众号留言,搜索 外行讲技术 或者扫描下面的二维码

![qrcode_for_gh_accc5e666c9f_344.jpg](https://upload-images.jianshu.io/upload_images/1655967-90fe8dfb3def8aa9.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)