1. 程式人生 > >如何部署python + flask應用

如何部署python + 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)         安裝必備的開發工具以及環境

更新系統:

[[email protected] ~]# yum update -y
[[email protected] ~]# yum groupinstall "Development tools" -y

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

[[email protected] ~]# yum install wget vim telnet python-devel zlib-devel openssl-devel bzip-devel -y

[[email protected] ~]# 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

[[email protected] ~]# wget https://bootstrap.pypa.io/get-pip.py && python get-pip.py

或者參考此網站

4)         安裝uWSGI與Flask

下載軟體

[[email protected] ~]# mkdir soft
[[email protected] ~]# cd soft
[[email protected] soft]# wget https://pypi.python.org/packages/0c/1c/44849e293e367a157f1ad863cee02b4b865840543254d8fae3ecdebdbdb9/uwsgi-2.0.12.tar.gz
[
[email protected]
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)

複製程式碼

複製程式碼

[[email protected] soft]# tar -xf Flask-0.10.1.tar.gz
[[email protected] ~]# cd Flask-0.10.1
[[email protected] Flask-0.10.1]# python setup.py install

[[email protected] soft]# tar -xf uwsgi-2.0.12.tar.gz
[[email protected] soft]# cd uwsgi-2.0.12
[[email protected] uwsgi-2.0.12]# python setup.py install

複製程式碼

複製程式碼

5)         建立一個測試應用

建立一個Web應用程式存放的資料夾

[[email protected] ~]# mkdir -pv /usr/local/webtest
[[email protected] ~]# cd /usr/local/webtest

建立一個python 指令碼,內容如下:

複製程式碼

複製程式碼

[[email protected] 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,內容如下

[[email protected] webtest]# cat wsgi.py
from myproject import application

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

6)         配置uWSGI伺服器閘道器服務執行方式,執行埠等。

上述兩個python指令碼檔案建立完成後,uwsgi命令啟動,執行在8000埠上,指定協議http,執行時會出現一些警告,暫時可以忽略,是因為當前是root賬戶執行的uwsgi,後面從配置檔案啟動時會配置普通使用者nginx即可。

[[email protected] webtest]# uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi
驗證下,看下監聽埠
[[email protected] 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   -          

7)         建立uWSGI配置檔案

以.ini格式為uwsgi啟動配置檔案(還有xml,json,等多種格式),這樣就不用在命令列輸入一大堆命令了,用uwsgi命令啟動,後面可以建立uwsgi啟動指令碼,加入到系統服務

在專案的目錄中,建立uwsgi.ini:

複製程式碼

複製程式碼

[[email protected] 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

建立完成後,賦予執行許可權,加入開機啟動

[[email protected] ~]# chmod +x /etc/init.d/uwsgid 
[[email protected] ~]# chkconfig --add uwsgid
[[email protected] ~]# chkconfig --level 2345 uwsgid on

檢查下

[[email protected] ~]# chkconfig --list uwsgid
uwsgid             0:off    1:off    2:on    3:on    4:on    5:on    6:off

啟動uwsgid

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

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

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

9)         安裝Nginx配置代理

先下載安裝6.6的epel源

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

安裝nginx

[[email protected] ~]# yum install nginx -y

安裝完成後,修改nginx預設配置檔案default.conf,修改之前可以先備份下原始檔噢。完整內容如下:

複製程式碼

複製程式碼

[[email protected] ~]# 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

[[email protected] ~]# service nginx start
Starting nginx:                                            [  OK  ]

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

如何停止uwsgi服務:

首先檢視uwsgi服務程序:

ps -ef|grep uwsgi

其次殺掉對應的pid:

sudo kill -quit pid

啟動uwsgi服務:

uwsgi --ini uwsgi.ini -d uwsgi.log --pidfile uwsgi.pid

相關推薦

如何部署python + flask應用

一、介紹   最近開發要用一個測試環境,是這樣的Nginx+uwsgi+flask 的一個結構。下面是一些記錄,在Centos 系統上使用Flask 架構部署一個簡單的Python應用。然後使用Nginx作為前端反向代理,設定uWSGI應用閘道器處理web應用程式。 二、

使用Nginx+Uwsgi在CentOS伺服器上部署Python Flask應用

寫在開頭        第一次用Flask做Web(也是第一次用Python做Web),在部署的時候遇到了不少問題,現在將過程就下來,供在這方面也有疑惑的人蔘考.(PS:使用Apache+mod_wsgi部署模式的可以參考另一個博主的這篇文章:http://blog.elnm

在Windows下用Apache+wsgi部署python+flask專案

一. 安裝Apache 從http://www.apachelounge.com/download/  下載最近版本的Apache 解壓到D盤下,我的80埠已經被佔用了,所以需要修改配置檔案:D:/Apache24/conf/httpd.conf 找到Define SRVR

windows IIS部署python Flask 網站

安裝IIS,啟用CGI 安裝Anaconda 我一般機器都安裝Anaconda,雖然比較大, 但是管理python版本以及包會很方便。 安裝wfastcgi並激活。 開啟Anaconda Prompt。 進入python安裝目錄下的scripts資料夾然後執行w

windows10上使用apache部署python flask專案

由於需要在學校機房部署,所以必須選擇windows系統。 本人電腦win10 需要清楚的事情: 生產環境所使用的python的版本,從cmd中進入python後,版本資訊將列印在cmd中。本人使用的為32位的py3.5 on win32 下載

阿里雲 centos 7.2 部署python flask 環境

首先需要買一個阿里雲伺服器,我使用的是mac 所以 買的是centos 的環境,買的是最便宜的,有優惠折扣9.9 半年。 首先連結遠端伺服器                    ssh [email protected](阿里雲實例的共有IP)        

使用Nginx+Uwsgi部署Python Flask項目

工具 stream sources ali set 最好 nginx配置 working 定義 第一次用Flask做Web(也是第一次用Python做Web),在部署的時候遇到了不少問題,現在將過程就下來,供在這方面也有疑惑的人參考.(PS:使用Apache

IIS 部署 python web框架 Flask

python windows flask IIS的安裝就不說了吧,然後運行:inetmgr ,打開iis管理器,打開 Web平臺安裝程序,(如果沒有,百度下載安裝一下吧),然後是安裝--IIS:CGI 這個包。 接下來,添加網站,添加處理程序模塊映射:

Python Flask構建微信小程式訂餐系統 從專案搭建到部署上線 讓你快速掌握Python全棧開發

本課程是python flask+微信小程式完美結合,從專案搭建到騰訊雲部署上線,打造一個全棧訂餐系統。從基礎語法入手,易於掌握,構建MVC架構,增進對小程式和後端API的理解認識。深入淺出帶你進階全棧工程師課程,幫助你快速提升專案經驗,掌握專案開發技巧,提高專案中解決問題的能力。 --

阿里雲ECS部署pythonflask

因為原先伺服器是單位的,由於安全問題,不好放個人的東西,只好找一個虛擬主機之類的來放。但我對什麼雲或者虛擬主機都不懂,只是因為在註冊域名的時候,看到阿里雲有一個免費套餐,反正不用錢,就想試試當練手,就弄了個雲伺服器ECS基礎版。以下是就我個人的部署過程做個記錄:

python + mod_wsgi + apache 部署flask框架的py程式----window環境(親測成功)

先說一下我花了多久,距離上一篇搭建好apache之後,花了我一天的時間搞定,現在回想起來其實也就5個部分,按我下列的幾個步驟來不出錯僅僅只需要15分鐘,這就是程式設計師的極易禿頂的原因,錯誤能把你磨到崩潰!!! 成功之後,我差點激動的要把電腦砸了!!!真特麼喜極而泣(誇張一

基於python flask的自動化測試平臺(一)--實現第一個應用,hello,world

一個基本的應用需要的目錄如下 先為 app 包(檔案 app/__init__.py )建立一個初始化指令碼: from flask import Flask app = Flask(__name__) from app import views 然後建立第一個h

使用flask開發RESTful架構的api伺服器端(5)–部署flask應用到nginx

nginx:一個高效能的http和反向代理伺服器,在高併發方面有良好的表現; wsgi:全稱是web server gateway interface,它是伺服器程式和應用程式之間的一個約定,它規定了兩者各實現什麼功能,以便它們能夠配合使用,作為中介軟體粘合伺服器程式和應用程式; gunicorn:一個開源

ubuntu部署python專案(virtualenv + flask + uwsgi + nginx)(附:部署過程中遇到的問題及解決方法)

以下為我部署pthon flask + virtualenv + uwsgi + nginx的艱苦之路(我使用的是ubuntu 及python3.6) 安裝好python3.6後(上一編文章有講啦): 建立python虛擬環境:VirtualEnv(非常牛逼及非常重要,在這裡你可以d

Python Flask,請求上下文,應用上下文

  請求上下文(request context)  request和session都屬於請求上下文物件。   應用上下文(application context) current_app和g都屬於應用上下文物件。 current_app:表示當前

flask應用部署到服務器

目錄結構 ams ati spa 服務器 是什麽 相關 終端 數據庫 flask是我學習的第一個python的web框架,在應用flask寫完一個應用後,當然是把它部署到我們的服務器上了。 首先,準備我們部署項目所需要的部分 1.完整的flask項目 2.服務器,或者自己用

flask筆記:13:將Flask應用程式部署在nginx,tornado的簡單方法

flask程式碼,main.py: from flask import Flask app = Flask(__name__) @app.route('/') def hello_world():

CentOS 6.8 下安裝部署flask應用記錄

一、安裝Apache 1.1直接執行: yum install httpd -y 1.2將Apache設定為開機啟動及啟動、停止命令: 二、安裝Python 3.6.5: Centos 6.8上自帶的python是2.6.6,而且yum線上更新會提示沒有可用的更

docker+ bind mount 部署復雜flask應用

關聯 鏡像 use mod RoCE nts gmail 原因 pip 報錯如下: [root@test-wenqiang flask-skeleton]# docker run -d -p 80:5000 -v $(pwd):/skeleton --name flask

使用flask開發RESTful架構的api伺服器端–部署flask應用到nginx

原文地址:http://www.mrhaoting.com/?p=199 通過前幾章的介紹,大概瞭解了怎樣利用flask框架來開發服務端後端,但flask只是一個web框架,提供使用者便捷的開發方式,它並不是一個真正的web伺服器程式,想要這個服務端應用能夠支援高併發、