python 자동화 테스트 (5) -- nginx + uwsgi + flask 웹 서버 구축

3836 단어
1. 웹 서비스 기본 프로 세 스
1) client 는 먼저 클 라 이언 트 가 서비스 자원 을 요청 합 니 다. 2) nginx nginx 는 직접 대외 적 인 서비스 인터페이스 로 클 라 이언 트 가 보 낸 http 요청 을 받 으 면 패 킷 을 풀 고 분석 합 니 다. 정적 파일 요청 이 라면 nginx 가 설정 한 정적 파일 디 렉 터 리 에 따라 요청 한 자원 을 되 돌려 줍 니 다. 동적 요청 이 라면 nginx 는 설정 파일 을 통 해 uWSGI 에 요청 을 전달 합 니 다.3) uWSGI uWSGI 는 받 은 패 키 지 를 처리 하여 wgi, 4) wgi wgi 를 요청 에 따라 django, flask 프로젝트 의 한 파일 이나 함 수 를 호출 합 니 다. 5) 웹 애플 리 케 이 션 이 처리 되면 django, flask 는 되 돌아 오 는 값 을 wgi 에 게 건 네 주 고 6) wgi wgi 는 되 돌아 오 는 값 을 포장 하여 uWSGI, 7) uWSGI uWSGI 에 게 전달 합 니 다.8) nginx nginx 는 최종 적 으로 클 라 이언 트 (예 를 들 어 브 라 우 저) 에 게 반환 값 을 되 돌려 줍 니 다.
2. nginx 배합
  • flask_nginx.conf
  • sudo ln -s /home/wyz/flask_nginx.conf /etc/nginx/conf.d/
  • service nginx start/stop/restart
  • ps -ef | grep nginx
  •  server {
            listen       80;         //   web    
            server_name  xxxxxx;     //    
            #charset koi8-r;
            access_log  /home/wyz/flask/logs/access.log;    //          ,logs          ,  nginx  
            error_log  /home/wyz/flask/logs/error.log;         //    
    
            location / {
                include        uwsgi_params;     //      uwsgi  
                uwsgi_pass     127.0.0.1:5051;   //   uwsgi      socket    
                                                 //  ,     uwsgi     。
                uwsgi_param UWSGI_CHDIR  /home/wyz/flask;     //     
                uwsgi_param UWSGI_PYTHON /home/wyz/flask/env36 //python    
                uwsgi_param UWSGI_SCRIPT manage:app;     //        (      
                                                         //        flask   
                                                         //          )
    }
    }
    

    3. uWSGI 배합
  • flask_uwsgi.ini
  • uwsgi --ini /home/wyz/flask/flask_uwsgi.ini
  • ps -ef | grep uwsgi
  • [uwsgi]
    socket = 127.0.0.1:5051
    #http = 127.0.0.1:5051
    pythonpath = /home/wyz/flask
    module = manage
    wsgi-file = /home/wyz/flask/manage.py
    callable = app
    master = true
    processes = 4
    #threads = 2
    daemonize = /home/wyz/flask/server.log
    

    4. flask 웹 응용 프로그램
    업로드 파일 을 수신 하고 upload 디 렉 터 리 에 저장 합 니 다.
    from werkzeug.utils import secure_filename
    from flask import Flask,render_template,jsonify,request
    import time
    import os
    import base64
     
    app = Flask(__name__)
    UPLOAD_FOLDER='upload'
    app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
    basedir = os.path.abspath(os.path.dirname(__file__))
    ALLOWED_EXTENSIONS = set(['txt','png','jpg','xls','JPG','PNG','xlsx','gif','GIF'])
     
    #         
    def allowed_file(filename):
        return '.' in filename and filename.rsplit('.',1)[1] in ALLOWED_EXTENSIONS
     
    #       ,    
    @app.route('/test/upload')
    def upload_test():
        return render_template('upload.html')
     
    #     
    @app.route('/api/upload',methods=['POST'],strict_slashes=False)
    def api_upload():
        file_dir=os.path.join(basedir,app.config['UPLOAD_FOLDER'])
        if not os.path.exists(file_dir):
            os.makedirs(file_dir)
        f=request.files['myfile']  #     file      ,myfile     name 
        if f and allowed_file(f.filename):  #               
            fname=secure_filename(f.filename)
            print fname
            ext = fname.rsplit('.',1)[1]  #       
            unix_time = int(time.time())
            new_filename=str(unix_time)+'.'+ext  #          
            f.save(os.path.join(file_dir,new_filename))  #     upload  
            token = base64.b64encode(new_filename)
            print token
     
            return jsonify({"errno":0,"errmsg":"    ","token":token})
        else:
            return jsonify({"errno":1001,"errmsg":"    "})
     
    if __name__ == '__main__':
        app.run(debug=True)
    

    좋은 웹페이지 즐겨찾기