工作之余会自己开发一下小项目,比如博客,给父母的小店做了个小程序,等等。但不想每次都进行枯燥的web项目配置工作,于是我开发了一套自动部署web的系统,如图(点击可放大):
原理非常简单,当创建一个项目的时候,会生成一个git代码仓库,提交代码后会自动部署到测试环境,测试通过后再发布到正式环境:
自己的小项目当然不可能每个都有主域名,更不可能每个项目都有自己的服务器。创建项目后会自动分配子域名,所有的项目都在www目录下,nginx会根据域名解析到对应的目录:
所有的项目都会载入common目录下的文件,vendor也在这个目录下。一开始,我把vendor放到项目目录下,这样每个项目可以用不同的框架,不过当项目多起来的时候,这简直是噩梦。相信我,如果你要管理多个项目,最好让所有项目使用同一框架的同一版本。
访问数据库必须继承common目录下的数据库基础类,它会判断是正式环境还是测试环境,分别链接不同的数据库:
当然common目录下的数据库基础类还提供了一些其它的功能,比如说对每条记录都自动增加了三个字段:
'__CREATE_TIME__', //记录创建时间
'__MODIFY_TIME__', //记录最后修改时间
'__REMOVED__' //是否删除
其中__REMOVED__
字段,对所有数据使用标记删除,万一误删数据还可以找回。
记得有一段段时间比较喜欢吃一道菜叫清水丸子(water balls),于是我写的一套MongoDB数据库可视化工具取名为WBS:
还可以查看慢查询记录,以便优化索引:
这两套系统和运维的耦合度很高,所以介绍一下我的docker配置:
server.yml控制和web相关的容器,与spider.yml、jupyter.yml等与web不相关的容器分离。部署时只需要执行
docker-compose -f server.yml up -d
就可以启动所有与web相关的容器。
项目文件会被多个用户读写,容易造成权限问题,最好的办法是画个图,规划一下
让www-data、git、apple同属一个用户组,创建文件时默认同组用户有读写权限。这样就不会有权限问题了。
原本我将仓库迁移到github上了,独乐乐不如众乐乐嘛,但是我经常要修改代码,github的速度太不稳定了,让人头大,最后我还是将代码仓库迁移回了服务器。还有一个原因,这套系统我时常修改,懒的同步更新部署文档。
如果想使用这套系统,可以留言或邮件。