部署一個flask服務記錄

 

最近使用flask寫了一些簡單的服務。html

服務部署到服務器上進行使用,這個過程會有一些問題,須要進行記錄一下。python

說明運行的環境狀況。使用的是python3.6的虛擬環境,系統是centos7,其餘的有uwsgi,supervisor,ngnix。nginx

 

首先準備一個簡單的flask服務。django

代碼ipapp.py:flask

# encoding=utf-8
# date: 2019/3/5
__author__ = "Masako"

from flask import Flask

app = Flask(__name__)


@app.route('/')
def index():
    return "<p>my ip: 37.221.204.206</p>"


if __name__ == "__main__":
    app.run()
View Code

 

1、安裝python3.6centos

  1.下載服務器

   # wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz  app

  2.解壓 curl

    # tar -zxvf Python-3.6.8.tgz socket

  3.到解壓好的文件夾先配置 

    # cd Python-3.6.8 

    # ./configure 

    *遇到問題

    缺乏gcc

     安裝gcc 

   # yum install -y gcc 

    再配置,成功。

  4.繼續編譯及安裝

   # make && make install 

  5.建立虛擬環境

      個人工做文件夾爲 /root/ip_tool, 在這裏執行命令

   # virtualenv -p /usr/local/bin/python3 ip_env 

      建立的是本身安裝的python3的虛擬環境

       而後在虛擬環境安裝一些須要的python庫,如flask等

 

2、安裝並配置uwsgi

  uwsgi是服務器的一種,主要用來跑你的服務

  1.安裝

    在虛擬環境執行

     # pip install uwsgi 

  2.測試uwsgi

    使用uwsgi啓動一下個人flask服務

     ------

      爲了方便,先裝了一個screen 

       # yum install screen 

       而後在screen內測試uwsgi

        ------

      簡單啓動個人ipapp.py

# uwsgi --http 127.0.0.1:5000 --wsgi-file ipapp.py --callable app

     因爲在screen內運行的uwsgi,因此退到screen外部執行

          # curl http://127.0.0.1:5000 

     驗證獲得下圖

  3.配置文件

     把uwsgi的參數寫到文件裏面,保存爲test_uwsgi.ini

[uwsgi]
base = /root/ip_pool
http = 127.0.0.1:5000
wsgi-file = ipapp.py
callable = app

    再使用文件打開服務,注意在虛擬環境

        # uwsgi --ini test_uwsgi.ini 

        結果與使用uwsgi命令運行服務相同

       若是使用uwsgi打開服務有問題,多是uwsgi路徑或者配置相關問題,須要找到對應方案解決

 

3、安裝並配置nginx

  nginx是一個代理服務器。

        1.安裝

     # yum install nginx 

           *出現問題 No package nginx available.

         安裝一下源

            # yum install epel-release 

       再執行上一條命令,成功

   2.測試

     打開nginx

     # /bin/systemctl start nginx.service 

    在別的地方輸入服務器的地址,或者curl,能夠看到 "Welcome to nginx" 之類的字樣

           3.配置

     先到nginx安裝的文件夾,如/etc/nginx/,有多是其餘的,能夠本身找一下

      # cd /etc/nginx/ 

      編輯 "nginx.conf"

      若是有一些配置文件,能夠都放在一個文件夾中,如"conf.d",而後在配置中包含這個文件夾,即在nginx.conf的末尾加上

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

     在這裏,我簡單配置,直接修改nginx.conf

     找到「location /」,將大括號裏的內容修改以下

location / {
        include      uwsgi_params;
        uwsgi_pass 127.0.0.1:10050;
        uwsgi_param UWSGI_PYHOME /root/ip_pool/ip_env/bin/python;
        uwsgi_param UWSGI_CHDIR  /root/ip_pool;
        uwsgi_param UWSGI_SCRIPT ipapp:app;
    }

    此時,個人ipapp.py放在文件夾「/root/ip_pool」中,並有虛擬環境ip_env,啓動文件爲ipapp.py, 應用名爲app。

    咱們再修改一下uwsgi的配置,

[uwsgi]
base = /root/ip_pool
# http = 127.0.0.1:5000
socket = 127.0.0.1:10050
wsgi-file = ipapp.py
callable = app

    能夠看到,將http更換成了socket,而且保持地址與nginx中配置的 uwsgi_pass 一致。

    咱們重啓nginx  /bin/systemctl reload nginx.service 

       在虛擬環境啓uwsgi服務 

    開啓uwsgi

  4.再測試

    在另外一個地方(另外一臺機器)輸入個人IP地址,獲得我寫的網頁

    

    *若是訪問不起,檢查一下端口防火牆之類的。

    到此,服務就部署可用了。

 

4、安裝並使用supervisor

  supervisor主要用來管理進程,這裏使用其管理uwsgi程序。

   1.安裝,使用機器環境

    # yum install supervisor 

   生成配置文件

    # echo_supervisord_conf > /etc/supervisord.conf 

  啓動supervisor服務

     # supervisord -c /etc/supervisord.conf 

  查看狀態

    # supervisorctl status 

   *出現 unix:///tmp/supervisor.sock no such file , 建立文件後出現 unix:///tmp/supervisor.sock refused connection,多是服務沒有啓動

  2.配置

   配置配置文件,在 "/etc/supervisord.conf"文件中,取消註釋"[include]",增長本身的配置文件夾,這裏我使用supervisord.d

    即在"/etc/supervisord.conf"增長如下2行內容

[include]
files = supervisord.d/*.conf

    *.conf是我本身的文件後綴,默認是.ini

   配置本身的項目,編輯我本身的項目配置,配置以下

[program:ip]
directory=/root/ip_pool
command=/root/ip_pool/ip_env/bin/uwsgi --ini test_uwsgi.ini
autostart=true
user=root
stderr_logfile=/tmp/ip_stderr.log
stdout_logfile=/tmp/ip_stdout.log

  這個文件放在/etc/supervisord.d裏面便可,名字隨便取一個,後綴爲.conf

  重啓supervisorctl,這個任務就跑起來了

  

  若是跑不起來,端口占用,多是以前的uwsgi任務沒有關。

  這個時候再次訪問服務器ip地址,獲得的結果與以前相同。也就是supervisor只是用來跑這個程序的輔助工具。

 

總結

  使用uwsgi + nginx 配置服務,加上supervisor管理,須要的流程比較長,配置的文件比較多。

   須要耐心處理,遇到問題,多看提示,不會的搜索一下,不少人會遇到一樣的問題。

  總的來講,除了安裝必要的環境,須要修改或增長的文件有如下幾個:

    1.nginx,修改nginx.conf,配置路由、接口

    2.uwsgi,增長uwsgi.ini,也能夠不增長,直接執行命令,跑flask應用

    3.supervisor,增長myapp.conf,配置個人uwsgi的參數

    4.supervisor,修改supervisord.conf,增長包含本身編輯的配置文件路徑,以使supervisor找到配置文件並啓動程序

  後續再同一臺機器上配置其餘服務時,只須要修改路由,增長兩個配置文件(supervisor和uwsgi),文件大體相同,修改端口和須要執行的命令便可。

  若是涉及到更加複雜的服務,能夠豐富一下配置文件,根據需求,增長配置參數。

 

參考文章連接:

  http://docs.jinkan.org/docs/flask/

  http://www.supervisord.org/introduction.html

  http://www.runoob.com/django/django-nginx-uwsgi.html

  https://www.cnblogs.com/liubiao/p/6689081.html

  https://www.cnblogs.com/if-then/p/7259865.html

  https://www.cnblogs.com/alice-bj/articles/9298177.html

相關文章
相關標籤/搜索