如何在 CentOS 上部署 Flask

在 CentOS 6.5 中部署 Flask

平时开发的时候,Flask 自带的 Web Server 可以满足需要,但是部署到服务器上则需要专门的符合 WSGI 协议的 Web Server。一种常见的组合是 Nginx + uWSGI。网上的教程挺多的,但大多也只是贴命令,对于关键点未做说明。本文希望能完整介绍 Flask 在 CentOS 上的部署,并且突出几个关键要点。

安装 Python 3.6

CentOS 6 自带的 Python 版本为 2.6.6,因为我是用 Python 3 开发的,为了不与系统自带的 Python 2.6.6 冲突,考虑使用虚拟环境 VirtualEnv,Python 3 在虚拟环境中运行。

安装步骤:

# 下载 python 3.6.1
wget https://www.Python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz

# 解压
tar xJf  Python-3.6.1.tar.xz

# 进入 python-3.6.1 目录
cd  Python-3.6.1

# 安装
./configure  --prefix=/usr/local/python3 && make && make install

#创建软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

创建软连接的作用是能够区分 Python 2 和 Python 3,能够区分 Python 2 中的 pip 和 Python 3 中的 pip3。因为我们接下来要使用 Python 3 中的 pip 来安装 VirtualEnv。正确安装 python3 应该会同时安装好 pip,如果没有,参考这篇文章:

CentOS6.8编译安装Python3.6 + pip + Nginx - CSDN博客

安装 virtualenv

pip3 install virtualenv

创建 python 的虚拟环境

/usr/local/python3/bin/virtualenv  -p /usr/bin/python3 venv

进入操作系统的目标目录,比如 在 \~/py36venv 下运行上述命令创建虚拟环境。命令说明:virtualenv 命令位于 /usr/local/python3/bin 目录下。使用 -p PYTHON_EXE 选项,作用是在创建虚拟环境的时候指定 Python 版本 (只能指定已安装好的 Python 版本)。

激活和关闭虚拟环境

激活:

[root@localhost py36venv]#  source venv/bin/activate

关闭

(venv)[root@localhost py36venv]#  deactivate

安装 Flask

在虚拟环境下安装 使用 pip install flask 安装 Flask。

安装 Nginx

安装 Nginx 有两种方式, yum 安装和源码安装的方式。两种方式有一些区别。这里使用 yum 安装:

yum install nginx

安装之后通过 rpm -ql nginx 命令查看安装路径。可能碰到的错误: No package nginx available, 则先进行如下操作:

# CentOS Linux v6.x user type the following command:
# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm

Reference: https://www.cyberciti.biz/faq/install-nginx-centos-rhel-6-server-rpm-using-yum-command/

查看 Nginx 版本及配置参数

nginx -V

nginx 的主配置文件是:/etc/nginx/nginx.conf,用 vi 或者 vim 查看配置文件, 文件中这样的一行:

include /etc/nginx/conf.d/*.conf;

表示在 /etc/nginx/conf.d 目录下面创建扩展名为 conf 的文件,将会被加载作为配置文件。所以并需要修改 nginx.conf 主配置文件。并且可以创建多个不同的配置文件从来区分不同的 Web 服务。后面我将创建支持 WSGI 规范运行 Flask 的 Web 服务。

启动和停止 Nginx

# 启动
service nginx start 

# 停止
service nginx stop

# 重新启动
service nginx restart

# 重新加载
service nginx reload

启动 Nginx 后,在浏览器中输入: http://localhost ,显示 nginx 的初始界面,表示启动成功。

在虚拟环境中安装 uWSGI

在虚拟环境中安装 uWSGI: pip install uwsgi

测试 uWSGI

安装 uWSGI 后,创建一个名为 test.py 的 Python 文件,输入以下测试代码:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

使用命令:

uwsgi --http :9090 --wsgi-file test.py

来测试 uwsgi 能否能正确提供 Web 服务,如果启动正常,在浏览器中输入 http://localhost:9090 ,将收到返回的字符串 Hello World。当然,对于长期需要提供服务的 Flask Web 应用程序,最好是将配置放在配配置文件中。在 ~/py36venv 路径下配置 config.ini 文件。文件的内容如下:

[uwsgi]
# uwsgi 启动时所使用的地址与端口
socket = 127.0.0.1:8001

# 指向网站目录
chdir=/root/flask_restful_mysql

# python 启动程序文件
wsgi-file = manage.py

# python 程序内用以启动的 application 变量名
callable = app

# 处理器数
processes = 4

# 线程数
threads = 2

buffer-size = 32768

#状态检测地址
stats = 127.0.0.1:9191

启动及关闭 uWSGI

  • uwsgi 启动 :虚拟环境下 uwsgi config.ini

  • uwsgi 关闭:虚拟环境下 killall -9 uwsgi

  • 查看 uwsgi 进程: ps -ef | grep uwsgi

启动 uWSGI 要注意一个问题,因为一般我们通过 SSH 工具远程操作 Linux,所以当我们退出 SSH 的时候,服务就会终止。如果希望在关闭 SSH 后,操作系统仍然能提供服务,在启动 uwsgi 的时候,使用 nohup 命令:

nohup uwsgi config.ini &

源代码如何上传到 Linux

最简单的办法是通过 WinSCP工具,可以将 Windows 中的源代码上传到 Linux。但可能每次对代码的修改都需要重新部署,比较费时。自动化可以考虑 Fabric 自动部署。这里就不展开了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容