將flask項目通過centos部署到公網


基本的部署方式是通過Flaks + WSGI + Nginx

首先通過遠程連接到服務器

ssh root@遠程服務器ip  -p 遠程服務器端口

輸入密碼之后進入遠程服務器的操作

首先安裝pip

獲取get-pip.py文件

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

執行安裝:

python get-pip.py

安裝virtualenv

因為不同的項目可能需要不同的安裝包的版本,所以我們往往不是直接在系統中安裝Python的各種包,而是通過virtualenv建立虛擬的Python環境

首先通過pip安裝virtualenv

pip install virtual

然后創建一個項目文件夾

mkdir my_web_app
cd my_web_app

在my_web_app文件夾中創建虛擬環境:

virtualenv venv

開啟虛擬環境:

source ./venv/bin/activate

如果需要關閉虛擬環境deactivate

此時你的命令行在最前面多了一個(venv)的標志,證明你已經進入了虛擬環境

安裝依賴庫

要使用Flask框架寫網頁,就需要安裝一系列跟Flask相關的庫,此時可以使用pip命令的通過文件進行安裝:

先建立一個requirements.txt,在其中寫上需要安裝的庫的名稱和版本號(版本號可以不寫,默認安裝最新版本)

$touch requirements.txt
$vim requirements.txt

在其中寫入以下內容:

Flask==0.10.1
Flask-Login==0.2.11
Flask-Mail==0.9.1
Flask-Moment==0.4.0
Flask-PageDown==0.1.5
Flask-SQLAlchemy==2.0
Flask-Script==2.0.5
Flask-WTF==0.10.2
Flask-Cache==0.13.1
Flask-Restless==0.15.0
Flask-Uploads==0.1.3
Jinja2==2.7.3
Mako==1.0.0
Markdown==2.5.1
MarkupSafe==0.23
SQLAlchemy==0.9.8
WTForms==2.0.1
Werkzeug==0.9.6
html5lib==1.0b3
itsdangerous==0.24
six==1.8.0
awesome-slugify==1.6

然后通過pip進行批量安裝:

pip install -r requirements.txt

然后我們需要安裝uSWGI,主要用於部署Flask項目:

pip install uSWGI

上傳項目文件

項目文件的組織結構如下:

root/wz/
└── my_flask  
│   ├── logs
│   └── venv  //虛擬目錄
│   │   ├── bin
│   │   │         ├── activate
│   │   │         ├── easy_install
│   │   │         ├── gunicorn
│   │   │         ├── pip
│   │   │         └── python
│   │   ├── include
│   │   │          └── python2.7 -> /usr/include/python2.7
│   │   ├── lib
│   │   │         └── python2.7
│   │   ├── local
│   │   │         ├── bin -> /home/shenye/shenyefuli/bin
│   │   │         ├── include -> /home/shenye/shenyefuli/include
│   │   │         └── lib -> /home/shenye/shenyefuli/lib
│   └── app  //Flask 程序目錄
│   │           └──  __init__.py //這是程序包文件。這個目錄下還有其它的文件此處略過
│   ├── manage.py   
│   ├── requirements.txt             

在app文件夾下的__init__.py文件進行修改,我們使用一個最簡單的程序進行演示:

from flask import Flask
 
app = Flask(__name__)
 
@app.route("/")
def hello():
    return "Hello World!"

然后在app的上一級文件夾建立manage.py文件用於運行程序

from flask_script import Manager,Server
from app import app


manager = Manager(app)
manager.add_command('runserver',Server(host='0.0.0.0',port=5000,use_debugger=True))


if __name__ == '__main__':
    manager.run()

此時如果我們使用命令:

python manage.py runserver

已經可以運行在本地 http://127.0.0.1:5000

接下來開始配置uWSGI

uWSGI有兩種啟動方式,在這里我們選了通過配置文件啟動的方法

在項目目錄中新建config.ini,寫入如下內容:

[uwsgi]

# uwsgi 啟動時所使用的地址與端口
http = 0.0.0.0:8000

# 指向網站目錄
chdir = /root/wz

home = /root/wz/venv

# python 啟動程序文件
wsgi-file = manage.py

# python 程序內用以啟動的 application 變量名
callable = app

# 處理器數
processes = 4

# 線程數
threads = 2

這里的8000就是我們外網訪問時服務器監聽的地址,由於我的路由器是搭在一個路由器下面的,此時我們需要登錄路由器的設置界面設置端口轉發:

填寫內網ip地址和本地端口,以及需要映射到外網的端口,在項目中,我們把本地的8000端口映射為外網的6000端口

配置好端口之后,輸入命令直接運行uWSGI:

uwsgi config.ini

到此為止,我們已經可以通過服務器公網ip:6000訪問你的Flask應用

安裝 Supervisor

[Supervisor|http://supervisord.org/configuration.html]可以同時啟動多個應用,最重要的是,當某個應用Crash的時候,他可以自動重啟該應用,保證可用性。

sudo apt-get install supervisor

Supervisor 的全局的配置文件位置在:

/etc/supervisor/supervisor.conf

正常情況下我們並不需要去對其作出任何的改動,只需要添加一個新的 *.conf 文件放在

/etc/supervisor/conf.d/

下就可以,那么我們就新建立一個用於啟動 my_flask 項目的 uwsgi 的 supervisor 配置 (命名為:my_flask_supervisor.conf):

[program:my_flask]
# 啟動命令入口
command=/home/www/my_flask/venv/bin/uwsgi /home/www/my_flask/config.ini

# 命令程序所在目錄
directory=/home/www/my_flask
#運行命令的用戶名
user=root
        
autostart=true
autorestart=true
#日志地址
stdout_logfile=/home/www/my_flask/logs/uwsgi_supervisor.log        

啟動服務

sudo service supervisor start

終止服務

sudo service supervisor stop

安裝 Nginx

[Nginx|http://nginx.com/]是輕量級、性能強、占用資源少,能很好的處理高並發的反向代理軟件。

sudo apt-get install nginx

配置 Nginx

Ubuntu 上配置 Nginx 也是很簡單,不要去改動默認的 nginx.conf 只需要將

/ext/nginx/sites-available/default

文件替換掉就可以了。

新建一個 default 文件:

    server {
      listen  80;
      server_name XXX.XXX.XXX; #公網地址
    
      location / {
        include      uwsgi_params;
        uwsgi_pass   127.0.0.1:8001;  # 指向uwsgi 所應用的內部地址,所有請求將轉發給uwsgi 處理
        uwsgi_param UWSGI_PYHOME /home/www/my_flask/venv; # 指向虛擬環境目錄
        uwsgi_param UWSGI_CHDIR  /home/www/my_flask; # 指向網站根目錄
        uwsgi_param UWSGI_SCRIPT manage:app; # 指定啟動程序
      }
    }

將default配置文件替換掉就大功告成了!
還有,更改配置還需要記得重啟一下nginx:

sudo service nginx restart


免責聲明!

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



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