Flask 应用的部署还是非常简单的,无论是用 gunicorn 还是 uwsgi,如果要用 nginx 做代理,HTTPS 加密也只需要就需要用 ubuntu 系统来做 base image 了,其实都一样,但是现在我发现了一个问题,我还没搞明白 nginx 和 gunicorn 都设置了 worker 数之后这个整个服务会是怎么启动着的,到底有几个 worker,是什么层级的,这个还需要研究一下。
Docker 化 Flask 应用,我只用了 gunicorn,因为还用了 Celery 任务队列,Celery 还要依赖 Redis,还有个问题就是在 Docker 里面 Redis 的数据持久化我还没搞明白怎么弄,挂载了目录但是没有生成 dump.rdb 文件。还要个需要注意的点就是因为 redis 也在 Docker 里面,app.py
里面的 app.config.update()
Redis 作为 Celery 的 Broker,
redis host 用 docker-compose.yml 的 container_name avatar-gen-redis
。
其实我只是把这个应用跑起来了而已,Docker 很多概念都没搞明白,比如 Dockerfile 和 docker-compose 里面都有 CMD 或者是 command,docker-compose.yml flask 配置中的 build: .
是会用到 Dockerfile,那我用 docker-compose up 启动的时候到底是哪条命令启动的 Flask 应用和 Celery 呢,这个我也不知道,还要就是Docker 化了之后怎么看日志呢,Docker 一旦用上手了是挺好,尤其是对于本地开发,但是如果上线的化就又有很多问题了,复杂度上升,原来原生的部署方式各个组件都能控制,Docker 化就进入黑盒里面了,又需要新的解决方案,所以现在各种容器云,容器编排管理,k8s 各种玩意。
Dockerfile
1 | FROM python:3.6.3 |
docker-compose.yml
1 | version: "3" |
参考链接
http://containertutorials.com/docker-compose/flask-simple-app.html
https://github.com/danriti/nginx-gunicorn-flask
https://github.com/xuqinghan/nginx-gunicorn-flask