conda+Flask+gunicorn+Nginx Web-apiの開発
文書ディレクトリ本文 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をインストールし、独立した仮想環境を作成
2-2.仮想環境への移行とflaskサポートのインストール
ps:以上の2つのステップに基づいてpython版のweb-apiを単独で開発できます.参考:http://www.pythondoc.com/Flask-RESTful/quickstart.html#
2-3.api開発例
作成app.py
仮想環境でpython 3 appを単独で実行する.py
ブラウザでのアクセスhttp://127.0.0.1:8000/
ps:走ることができます.ここではデバッグサーバが起動しています.gunicornに配備する必要があります.
2-4.gunicorn搭載Webプロジェクトのインストール
テストプロセス:app.pyディレクトリの下にファイルwsgiを作成します.py呼び出しapp
ターミナルで実行
コードが更新されるとgunicornを再起動し、ページをリフレッシュする必要があります.
2-5.nginx接続gunicornサーバのインストール
1)インストール手順2)nginx locationを構成するには、なぜ各構成が成功しないのかlocation/location~*^.+$location/50x.html有効
私はlocation=/location~などを使っても2級ディレクトリができませんこの時ルートディレクトリで転送127.0.0.1:8000を構成するしかありません.2級ディレクトリのことはそれに任せてください.
appを変更します.py
本文
リファレンス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)