conda+Flask+gunicorn+Nginx Web-apiの開発

7261 ワード

文書ディレクトリ
  • 本文
  • 1.各部作用
  • 2.環境構築
  • 2-1.condaをインストールし、独立した仮想環境を作成する
  • 2-2.仮想環境に入りflaskサポート
  • をインストール
  • 2-3.api開発例
  • 2-4.gunicorn搭載webプロジェクト
  • のインストール
  • 2-5.nginx接続gunicornサーバ
  • のインストール
    本文
    リファレンスhttps://blog.csdn.net/llwang_10/article/details/80251270
    1.各部の作用
    1)conda condaはpythonが実行する仮想環境管理およびパッケージ管理を提供している.サーバに複数の環境ニーズがある場合.condaを使用して環境の清潔さを保証することが重要である.
    2)flask FlaskはPythonを用いて作成された軽量級Webアプリケーションフレームワークでありpython版のweb-apiを開発する
    3)gunicorn gunicornはWSDIプロトコルを実装したWebサーバである
    4)nginx Nginxは静的ファイルアクセスを提供するウェブサービスであるが,管理Pythonアプリケーションを直接実行することはできず,gunicornはこの問題を解決した.仮想環境にgunicornをインストールし、Nginxとgunicornの間のインタラクションを再構成するのを待っています.
    2.環境構築
    2-1.condaをインストールし、独立した仮想環境を作成
    #        
    #       python_web
    conda create -n python_web python=3.7.3
    

    2-2.仮想環境への移行とflaskサポートのインストール
    #       
    conda activate python_web
    #   flask-restful  
    pip install flask-restful
    

    ps:以上の2つのステップに基づいてpython版のweb-apiを単独で開発できます.参考:http://www.pythondoc.com/Flask-RESTful/quickstart.html#
    2-3.api開発例
    作成app.py
    from flask import Flask
    #   api  ,        
    import flask_restful as restful
    
    app = Flask(__name__)
    api = restful.Api(app)
    
    class HelloWorld(restful.Resource):
        def get(self):
            return {'hello': 'world'}
    
    api.add_resource(HelloWorld, '/')
    
    if __name__ == '__main__':
        app.run(host='127.0.0.1', port=8000)
    

    仮想環境でpython 3 appを単独で実行する.py
    * Serving Flask app "app" (lazy loading)
     * Environment: production
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Debug mode: on
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
     * Restarting with stat
     * Debugger is active!
     * Debugger PIN: 301-920-422
    
    

    ブラウザでのアクセスhttp://127.0.0.1:8000/
    ps:走ることができます.ここではデバッグサーバが起動しています.gunicornに配備する必要があります.
    2-4.gunicorn搭載Webプロジェクトのインストール
    pip install gunicorn
    

    テストプロセス:app.pyディレクトリの下にファイルwsgiを作成します.py呼び出しapp
    #wsgi.py, app.py       
    from app import app
    
    if __name__ == "__main__":
        app.run()
    

    ターミナルで実行
    gunicorn --bind 127.0.0.1:8000 wsgi:app
    

    コードが更新されるとgunicornを再起動し、ページをリフレッシュする必要があります.
    ps -ef|grep gunicorn
    kill -9 [pid]
    

    2-5.nginx接続gunicornサーバのインストール
    1)インストール手順2)nginx locationを構成するには、なぜ各構成が成功しないのかlocation/location~*^.+$location/50x.html有効
    私はlocation=/location~などを使っても2級ディレクトリができませんこの時ルートディレクトリで転送127.0.0.1:8000を構成するしかありません.2級ディレクトリのことはそれに任せてください.
     location / {
                    proxy_pass http://127.0.0.1:8000;
                    proxy_redirect     off;
                    proxy_set_header   Host                 $http_host;
                    proxy_set_header   X-Real-IP            $remote_addr;
                    proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
                    proxy_set_header   X-Forwarded-Proto    $scheme;
            }
    

    appを変更します.py
    from flask import Flask, jsonify, abort, request,render_template
    #   api  ,        
    import flask_restful as restful
    
    app = Flask(__name__)
    api = restful.Api(app)
    
    root = '/monitor'
    #     
    @app.route('%s' % root)
    def index():
        return render_template('index.html')
    
    test = [
        {
            'id': 1,
            'title': u'  ',
            'auther': u'  ',
            'price': 18
        },
        {
            'id': 2,
            'title': u'   ',
            'auther': u'  ',
            'price': 15
        }
    ]
    #   restful  
    @app.route('%s/api/v1/test' % root, methods=['GET'])
    def get_tasks():
        return jsonify({'test': test})
    
    
    if __name__ == '__main__':
        app.run(debug=True)