Cntrains.com Docker 自动部署

很久之前就发现余票信息网yupiao.info 上能查到余票、正晚点、车次信息,作者还介绍了网站的实现,我也想自己写一个相似的网站。想了很久都没有动手,几个月前突发奇想去找域名,刚好在 Godaddy 上搜到 cntrains.com 这个域名在拍卖,截止日期刚好是当天,于是我用底价就拍到了,好幸运:-)

买到之后闲置了很久,后来写了个抓盛名时刻表 rar 压缩包的东西。

网站:cntrains.com/smsk

代码:github.com/greenmoon55/cntrains

##获取数据

这个,我不好意思叫爬虫。。盛名时刻表官方的下载地址很好搞到,从下载页面正则匹配一下就可以获取到最新的下载地址,直接 GET 就能下载到,下载地址里时包含发布时间的,我暴力了一下,找到的最旧的版本是去年的,可惜没有更早的。现在用 crontab 每小时查询一次。

##存储

最开始是把压缩包存在本地,然后用数据库记录下来,现在放在七牛云上了,每月免费配额很多,完全用不完,代码也好写。

##代码

代码是用 Django 写的,你可能想问了,为嘛用 Django 呢,就这么一个破网页,呃,因为公司有用到(horizon),顺便看看。

##服务器

最开始用的是Azure免费试用,最近刚刚换成DigitalOcean,DO在墙外要方便一点,感觉Azure还有点小问题,比如内网的DNS。DO看起来挺好用的,一个月5刀可以接受。

##Docker

嗯,这个是跑在 Docker 上的,有必要么?我只是跑着玩玩嘛。Dockerfile里主要就是 pip install了,另外还要自己起 cron。

玩了一下 Docker Hub 的 webhook,就是每次 push 的时候会 POST 一个 json 到自己指定的 URL,我在服务器上又起了个 python http server,接到这个请求就重新 pull image 再 run image。只要 push 就能自动部署啦,分分中搞定,有木有 Heroku 的感觉!

参考:Automagical Deploys from Docker Hub

##未来

首先要把页面稍微改改,至少声明跟软件作者无关。其他功能嘛,暂时懒得弄,我最终目标时要做个自动更新带历史记录的火车时刻表,最好提供个API,其实和 yupiao.info 之前做的差不多,但是没空研究爬虫、验证码方面的东西,很可能会无限期推迟(但愿不会)。

监控和测试目前没有,可以考虑加上。

Docker Hub 支持 Automated Build,就是 push 到 GitHub 之后可以自动根据 Dockerfile build image,但是我有些文件不想传到 GitHub 上(密码、access key),不知道该怎么办,其实现在也不错了。

有个基于 Ubuntu 修改过的 Docker image phusion/baseimage,解决了一些问题,有 cron 和 ssh server,挺热门的。

部署方面,要看看 CoreOS,现在 DO 和 UStack 都支持了。现在还有一些 Docker container hosting 的公司,也就是说以后想部署服务,连 VM 都不用搞,直接 push docker image就可以。比如这两家:Quay.iotutum

前几天看到陈沙克的这条微博,感觉确实很多东西可以用 Docker 来搞了,没必要搞那些 VM 了。

zhxq 最近做了票.今天,能生成每小时余票趋势图,看起来好厉害~


comments powered by Disqus