之前一直在本机使用Kubernetes部署Airflow项目,K8S很好,但对于小项目来说,不需要”杀鸡用牛刀”,一般使用Docker-compose就行,这几天将一个Airflow项目改造适配后,使用Docker-compose部署到了腾讯云服务器。
Fork了一份puckel/docker-airflow的Airflow Dockerfile镜像文件,做了很多调整和修改,比如将Debian apt源换成清华的apt源,将PyPI官方PIP源换成豆瓣的PIP源等等,修改完后的Dockerfile放在benbendemo/docker-airflow仓库的develop
分支下面。
主要修改内容如下,详细介绍请见develop
分支README.md文件。
|
|
本地Build镜像测试成功后,我将其提交到Docker Hub仓库benbendemo/docker-airflow,并且设置了Automatical Build,以后只要提交git push修改develop
分支的Dockerfile文件,Hub仓库就会自动Build一次版本。这样,每次使用docker pull bebendemo/docker-airflow:latest
就可以拿到最新的版本。
Airflow镜像搞定之后,需要安装dag文件,从我的私有仓库里拉取stockdata_dag文件,使用docker-compose up -d
部署docker-compose.yml文件里定义的服务。
重点介绍一下docker-compose.yml
文件里的内容,是从puckel提供的docker-compose-LocalExecutor.yml基础上修改得来。
|
|
定义了postgres和webserver两个服务,webserver依赖postgres启动后才可以运行;其它内容我不细说,如果你的docker-compose
版本与yml文件里不一致,直接修改version参数的版本即可;如果部署后发现Airflow task运行时无法写文件,添加user: root
参数即可,puckle在Dockerfile里定义好了容器启动后默认使用airflow
用户。
进入容器创建Airflow用户test
,登录http://johnlyhello.club:10089,即可访问该Airflow服务,由于进行了权限控制,`test`用户只能浏览页面,没有任何页面操作权限。
软件开发是一个细腻的手艺活,这番部署之后,离一个真正面向客户发布的产品还有重要的几步要走,先记录为Todo事项,以后再来完善它。
Todo事项:
1.站点开启SSL服务
2.将webserver和scheduler分拆成两个容器部署
3.Flask app+Bootstrap前端页面
参考资料