部署Flask

Flask在部署上面有别于Tornado,因为Tornado本身就是一个HTTP Server,这里主要记录下Flask的部署方式,Tornado的之前已经记录过,这里就不再叙述了,本次的项目均使用docker部署,其中gunicorn采用docker-compse的方式。uwsgi采用原生dockerr命令的方式

gunicorn

在项目根目录下创建docker文件夹,下面存放docker-compose.yml和start.sh两个文件。项目根目录下还存放gunicorn.conf文件。

docker-compose.yml文件内容大致如下

1
2
3
4
5
6
7
项目名称:
image: 镜像名称:镜像版本 # 这里是使用的镜像信息
ports:
- "映射出来的端口:容器内部的端口" # 这里是端口映射
volumes:
- ../../项目名称/:/root/www/项目名称/ # 这里将项目文件映射到容器中的/root/www下
command: ['bash', '-c', '/root/www/项目名称/docker/start.sh'] # 执行start.sh脚本文件

gunicorn.conf内容大致如下

1
2
3
4
5
6
7
8
9
bind = '0.0.0.0:8673'  # 注意这里的端口,就是容器中项目启动的端口
workers = 4 # 工作进程数
backlog = 2048
#worker_class = "gevent" # 工作模式协程
debug = True # debug模式
proc_name = 'gunicorn.pid'
pidfile = 'gunicorn.pid'
logfile = 'debug.log'
loglevel='debug'

uwsgi

在项目根目录下创建uwsgi.ini文件,内容大致如下

1
2
3
4
5
6
7
8
9
10
11
12
[uwsgi]
http = 0.0.0.0:8673 # 启动服务的端口
processes = 8
#threads = 1
master = true
pythonpath = /root/www/项目名称/
module = main # 这里最好填写和uwsgi.ini在同一位置的另一个Python文件的名称
callable = app
memory-report = true
buffer-size = 32768
#plugins = python
#gevent = 500/

使用原生docker命令启动服务

1
docker run -d --restart=always -p 8673:8673 -v 项目地址:容器中的项目地址 -v /etc/localtime:/etc/localtime:ro -e "SERVICE_NAME=服务名称(比如test_project)" -e "SERVICE_TAGS=环境名称(比如test)" -w 工作目录(这里要和映射进去的路径一样,因为我们要执行uwsgi.ini文件) --name=容器名称 镜像名称:版本 nohup uwsgi --ini uwsgi.ini --wsgi-disable-file-wrapper