最近学习了flask,准备把flask部署到服务器上,这里记录部署的过程和期间遇到的一些问题
一、安装
1. flask
我们建立一个最简单的flask应用,目录如下
1 | /home/ubuntu/python/flask |
为run.py
模块添加一个helloworld示例代码
1 | from flask import Flask |
通常我们的应用是放在virtualenv环境下的,这里我的虚拟环境路径为
1 | $ cd /home/ubuntu/python/env |
2. nginx
nginx不用多介绍,高性能web服务器,通常用来在前端做反向代理服务器,下面是安装
1 | # 先更新一下源 |
安装完成后重启nginx服务
1 | $ sudo service nginx restart |
就可以通过ip访问了,如果是外网并绑定了域名,也可以通过域名访问,nginx默认访问的是/usr/share/nginx/html
这个文件
3. gunicorn
flask自带的服务器只适合在开发调试时候用,并不能满足性能的要求,我们这里采用 gunicorn做wsgi容器,用来部署python,安装很简单,进入虚拟环境安装,使用pip安装
1 | (env) $ sudo pip install gunicorn |
安装完后运行
1 | # 先进到目录 |
后面的
run:app
的run表示模块,app表示模块里面的对象,即Flask实例,接着就可以访问了:http://127.0.0.1:8080
二、配置gunicorn到nginx
1. 配置nginx
修改nginx默认配置之前,我们先备份一下
1 | $ sudo cp /etc/nginx/site-avalidable/default /etc/nginx/site-avalidable/default.bak |
修改配置
1 | $ sudo vim /etc/nginx/site-avalidable/default |
内容如下
1 | server { |
配置完重启nginx
1 | $ sudo service nginx restart |
当访问ip或域名的时候,nginx会自动代理到http://127.0.0.1:8080
,即gunicorn服务
2. 将gunicorn作为系统服务启动
上面配置完成后需要启动gunicorn才能看到hello world页面,我们需要让gunicorn在后台运行,而不是在控制台手动启动
2.1 Ubuntu15.04系统版本以上
由于这里用到了virtualenv
,为了减少一些配置的问题,这里我把gunicorn服务的启动包装到一个myflask.sh
文件里面
1 |
|
这里我用的是Ubuntu16.04
,需要通过systemd
来配置系统服务,我们先定义一个服务配置myflask.service
1 | [Unit] |
拷贝服务到/etc/systemd/system/
目录下
1 | $ sudo cp myflask.service /etc/systemd/system/myflask.service |
启动服务
1 | # 重载所有修改过的配置文件 |
启动完后访问成功
2.2 Ubuntu 15.05系统版本以下
如果系统为12.04的版本,可以把服务配置文件加到/etc/init.d/
目录中,服务配置myflaskserver
如下
1 | description "The myflask service" |
拷贝到/etc/init.d/
目录
1 | $ sudo cp myflaskserver /etc/init.d/myflaskserver |