FLASK 部署


一、介紹

  最近開發要用一個測試環境,是這樣的Nginx+uwsgi+flask 的一個結構。下面是一些記錄,在Centos 系統上使用Flask 架構部署一個簡單的Python應用。然后使用Nginx作為前端反向代理,設置uWSGI應用網關處理web應用程序。

二、條件

1)         環境要求

  • Server OS:最小化安裝 Centos 6.8
  • Nginx :反向代理
  • Python2.6~2.7:開發語言
  • Flask/uWSGI:框架
  • Pip:python包管理工具
  • iptables&selinux:開放用到的端口,關閉selinux。

2)         安裝必備的開發工具以及環境

更新系統:

[root@hcloud ~]# yum update -y
[root@hcloud ~]# yum groupinstall "Development tools" -y

更新完成后,記得重啟系統,然后安裝工具:

[root@hcloud ~]# yum install wget vim telnet python-devel zlib-devel openssl-devel bzip-devel -y

[root@hcloud ~]# yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel python-devel libxml2  libxml2-devel  python-setuptools  zlib-devel wget openssl-devel pcre pcre-devel sudo gcc make autoconf automake
 -y

3)         安裝python 包管理工具-pip

[root@hcloud ~]# wget https://bootstrap.pypa.io/get-pip.py && python get-pip.py

或者參考此網站

4)         安裝uWSGI與Flask

下載軟件

[root@hcloud ~]# mkdir soft
[root@hcloud ~]# cd soft
[root@hcloud soft]# wget https://pypi.python.org/packages/0c/1c/44849e293e367a157f1ad863cee02b4b865840543254d8fae3ecdebdbdb9/uwsgi-2.0.12.tar.gz
[root@hcloud soft]# wget https://pypi.python.org/packages/db/9c/149ba60c47d107f85fe52564133348458f093dd5e6b57a5b60ab9ac517bb/Flask-0.10.1.tar.gz

如果下載該軟件比較慢,可以在/etc/reslov.conf dns中添加一個8.8.8.8 ,很快的哦。

安裝軟件(開發要求固定版本,如果不介意版本的話,可以直接使用pip install packge 即可安裝,相當於linux中的yum)

復制代碼
[root@hcloud soft]# tar -xf Flask-0.10.1.tar.gz
[root@hcloud ~]# cd Flask-0.10.1
[root@hcloud Flask-0.10.1]# python setup.py install

[root@hcloud soft]# tar -xf uwsgi-2.0.12.tar.gz
[root@hcloud soft]# cd uwsgi-2.0.12
[root@hcloud uwsgi-2.0.12]# python setup.py install
復制代碼

5)         創建一個測試應用

創建一個Web應用程序存放的文件夾

[root@hcloud ~]# mkdir -pv /usr/local/webtest
[root@hcloud ~]# cd /usr/local/webtest

創建一個python 腳本,內容如下:

復制代碼
[root@hcloud webtest]# cat myproject.py
from flask import Flask
application = Flask(__name__)

@application.route("/")
def hello():
    return "<h1 style='color:blue'>Hello Flask!</h1>"

if __name__ == "__main__":
    application.run(host='0.0.0.0')
復制代碼

創建WSGI入口點文件,名字為:wsgi.py,內容如下

[root@hcloud webtest]# cat wsgi.py
from myproject import application

if __name__ == "__main__":
    application.run()

6)         配置uWSGI服務器網關服務運行方式,運行端口等。

上述兩個python腳本文件創建完成后,uwsgi命令啟動,運行在8000端口上,指定協議http,運行時會出現一些警告,暫時可以忽略,是因為當前是root賬戶運行的uwsgi,后面從配置文件啟動時會配置普通用戶nginx即可。

[root@hcloud webtest]# uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi
驗證下,看下監聽端口
[root@hcloud webtest]# netstat -aultnp | grep 8000
tcp        0      0 0.0.0.0:8000                0.0.0.0:*                   LISTEN      7181/uwsgi          
tcp        0      0 192.168.30.58:8000          192.168.30.65:48164         TIME_WAIT   -          

可以打開瀏覽器訪問測試一下:http://192.168.30.58:8000

7)         創建uWSGI配置文件

以.ini格式為uwsgi啟動配置文件(還有xml,json,等多種格式),這樣就不用在命令行輸入一大堆命令了,用uwsgi命令啟動,后面可以創建uwsgi啟動腳本,加入到系統服務

在項目的目錄中,創建uwsgi.ini:

復制代碼
[root@hcloud webtest]# cat uwsgi.ini 
[uwsgi]
uid = nginx
gid = nginx
socket = 127.0.0.1:8000  
master = true
vhost = true
workers = 8
reload-mercy = 10
vacuum = true
max-requests = 10000
limit-as = 1024
buffer-sizi = 3000
pidfile = /var/run/uwsgi.pid
daemonize = /var/log/uwsgi/uwsgi.log  
chdir = /usr/local/webtest
module = wsgi
chmod-socket = 660
enable-threads = true
復制代碼

保存並退出。配置文件參考:http://heipark.iteye.com/blog/1847421

大致的解釋下:

uid 、gid :以哪個用戶、組啟動服務

socket:監聽的ip及端口

master: 啟動主進程

workes:服務器啟動的進程數

reload-mercy:平滑的重啟

pidfile :啟動時的pid 文件。

daemonize :啟動日志

module :web應用的入口模塊名稱

enable-threads : 啟用線程模式

8)         創建開機系統啟動腳本文件,名字為uwsgid。

  uwsgid

 

創建完成后,賦予執行權限,加入開機啟動

[root@hcloud ~]# chmod +x /etc/init.d/uwsgid 
[root@hcloud ~]# chkconfig --add uwsgid
[root@hcloud ~]# chkconfig --level 2345 uwsgid on

檢查下

[root@hcloud ~]# chkconfig --list uwsgid
uwsgid             0:off    1:off    2:on    3:on    4:on    5:on    6:off

啟動uwsgid

[root@hcloud ~]# service uwsgid start
Starting uwsgi: 
[uWSGI] getting INI configuration from /usr/local/webtest/uwsgi.ini

驗證下監聽端口(注:這里我們使用127.0.0.1 作監聽,是為了后期在使用時,對外只有nginx可以訪問web應用):

[root@hcloud ~]# netstat -aultnp | grep :8000
tcp        0      0 127.0.0.1:8000              0.0.0.0:*                   LISTEN      8945/uwsgi

9)         安裝Nginx配置代理

先下載安裝6.6的epel源

[root@hcloud ~]# wget https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@hcloud ~]# rpm -ivh epel-release-6-8.noarch.rpm

安裝nginx

[root@hcloud ~]# yum install nginx -y

安裝完成后,修改nginx默認配置文件default.conf,修改之前可以先備份下源文件噢。完整內容如下:

復制代碼
[root@hcloud ~]# cat /etc/nginx/conf.d/default.conf
server {
        listen       80;
        server_name  192.168.30.58;
          
        location / {
            include  uwsgi_params;
            uwsgi_pass  127.0.0.1:8000;
            uwsgi_param UWSGI_SCRIPT wsgi;
            uwsgi_param UWSGI_CHDIR /usr/local/webtest;
            index  index.html index.htm;
            client_max_body_size 35m;
        }
} 
復制代碼

以上內容代理了uwsgi的端口,客戶端通過訪問nginx的80端口,然后nginx在將請求轉發到后台flask應用的8000端口上。

啟動nginx

[root@hcloud ~]# service nginx start
Starting nginx:                                            [  OK  ]

在瀏覽器內測試訪問一下nginx:http://192.168.30.58

每個人都應是守望者,守望我們的心智,我們的理想,以防它在生活中不知不覺地墜落、被操控和被自己遺忘。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM