①安装python3(可以更改系统默认的python为python3)

②创建python虚拟环境(当然也可以直接用系统的python环境)

③部署项目到服务器

④以development WSGI server方式直接运行项目

⑤结合Nginx服务器用uWSGI部署 Flask

1.在CentOS7上安装python3

详见: python2与python3共存文档

2.不使用python虚拟环境

  若想使用python虚拟环境, 请看之后的内容.

①得到开发环境需要的依赖

1
2
3
# 在本地的 Flask 开发环境中 env 下执行:
pip freeze
>requirements.txt

②pip3安装依赖

1
2
# 将 requirements.txt 上传到服务器, 执行:
pip3 install -r requirements.txt

③上传项目并运行(确保端口开放)

  将 Flask 项目上传到 服务器, 测试运行. 这里直接在 /opt/project/hello.py 简单测试.


第一步: 新建 hello.py 文件, 注意: app.run(host=‘0.0.0.0’), 否则外网无法访问.

1
2
3
4
5
6
7
8
9
# hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(host='0.0.0.0')
# 默认为 0.0.0.0:5000

第二步: 运行 Flask 应用, hello.py

1
python3 hello.py

第三步: 浏览器访问 http://你的服务器IP:端口号测试结果.

hello.py



3.创建python虚拟环境

虚拟环境:

  建议在开发环境和生产环境下都使用虚拟环境来管理项目的依赖。

  为什么要使用虚拟环境?随着你的 Python 项目越来越多,你会发现不同的项目会需要 不同的版本的 Python 库。同一个 Python 库的不同版本可能不兼容。

①安装python虚拟环境

1
2
pip3 install virtualenv
pip3 install virtualenvwrapper

②配置虚拟环境

  一般用 pip 安装完后都是OK的, 可以直接使用. 若不能使用, 再来配置 python 虚拟环境.

  • 编辑文件 vim ~/.bashrc, 在最后添加:
1
2
3
4
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
# 可以使用find命令找出virtualenvwrapper.sh的路径
source /usr/local/python3.7.1/bin/virtualenvwrapper.sh
  • 执行 source ~/.bashrc 生效.
  • 利用 find 找出 virtualenv 的路径, 一般会在 /usr/local/python3.x.x/bin/ 中.
1
sudo find / -name "virtualenv"
  • 建立 virtualenv 的软连接
1
ln -s /usr/local/python3.7.1/bin/virtualenv /usr/bin/virtualenv

③创建 python 虚拟环境

1
2
# --python 指定python版本, wpwl-env为虚拟环境的名字.
mkvirtualenv --python=/usr/bin/python3 wpwl-env

4.在虚拟环境中运行Flask

①虚拟环境简单命令

1
2
3
4
# 进入虚拟环境
workon wpwl-env
# 退出虚拟环境
deactivate

②将项目打包放到服务器

  这里直接在 /opt/project/hello.py 简单测试.


第一步: 新建 hello.py 文件, 注意: app.run(host=‘0.0.0.0’), 否则外网无法访问.

1
2
3
4
5
6
7
8
9
# hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(host='0.0.0.0')
# 默认为 0.0.0.0:5000

第二步: 进入虚拟环境运行 Flask 应用, hello.py

1
2
workon wpwl-env
python hello.py

第三步: 浏览器访问 http://你的服务器IP:端口号测试结果.

hello.py



5.结合Nginx服务器用uWSGI部署 Flask

  将 uWSGI 和 Nginx Web 服务器结合使用,实现更高的并发性能。

①python安装uwsgi

1
pip3 install uwsgi

②uwsgi启动Flask应用

第一种启动方式: 命令行参数启动.

1
2
3
4
5
uwsgi --http 0.0.0.0:5000 --wsgi-file /opt/project/hello.py --callable app -H /root/.virtualenvs/wpwl-env
# --http: 指定通过 HTTP 请求访问
# --wsgi-file: 指定 Flask 应用文件
# -H 指定要使用的python虚拟环境
# 当然, 还有其他参数, 可到 uwsgi 的 API 中查看.

之后, 可通过浏览器访问 http://你的服务器IP:端口号测试结果.

hello.py


第二种启动方式: .ini 配置文件启动.

  先在项目根目录下创建 .ini 配置文件. 这里的是: /opt/project/hello.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
[uwsgi]
master = true
http=:5000
chdir = /opt/project
wsgi-file=/opt/project/hello.py
callable=app
processes=4
threads=2
buffer-size = 65536
vacuum=true
pidfile =/opt/project/uwsgi.pid
daemonize =/opt/project/hello.log
stats = 127.0.0.1:9191

  再通过命令行运行 Flask 应用.

1
uwsgi hello.ini
  • 之后, 可通过浏览器访问 http://你的服务器IP:端口号测试结果.

hello.py


③通过Nginx代理到uwsgi

  之前用 uwsgi 启动的 Flask 应用, 并不是我们想要的, 我们想通过 直接访问 WEB 应用(80端口) 来访问 Flask 应用.

  因此, 我们需要用 Nginx 来做代理, 将请求代理到 Flask 应用. 同时, 不能再为 uwsgi 配置 http 协议, 而改用 socket:

1
2
3
4
5
6
7
8
9
10
11
12
13
[uwsgi]
master = true
socket=127.0.0.1:5000
chdir = /opt/project
wsgi-file=/opt/project/hello.py
callable=app
processes=4
threads=2
buffer-size = 65536
vacuum=true
pidfile =/opt/project/uwsgi.pid
daemonize =/opt/project/hello.log
stats = 127.0.0.1:9191

  Nginx配置:

注意, 若是有其他代理信息, 要注意多个代理之间的顺序.

1
2
3
4
5
6
7
8
# 当然在 listen 80的 server 块中
server{
listen 80;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000;
}
}
  • 之后, 可通过浏览器访问 http://你的服务器IP/测试结果.

  注意: 若是不想 Nginx 直接代理网站根路径 ‘/’ 到 Flask应用, 而是想将 '/flask’代理到 Flask 应用, 则需修改两部分:

①修改 Nginx 配置: location /flask {

②修改应用 py 文件, 每个路由添加上 ‘/flask’前缀, 如 hello.py更改为: @app.route(’/flask’)

  • 之后, 可通过浏览器访问 http://你的服务器IP/flask测试结果.

评论